【发布时间】:2014-11-20 05:30:47
【问题描述】:
我正在使用 instagram api。这个问题不是Instagram 特定的,而是更多关于解析 api 调用返回的响应。该 api 适用于分页。通过一些研究,我找到了一种方法来获取大量结果并避免分页。我在解析 json 文件时遇到问题。在foreach 循环中,我尝试解析,但出现此错误:Invalid argument supplied for foreach()。如何在foreach 循环中正确解析 json 文件值?
LINK 到文章中,如果不熟悉 api 则解释该过程
问题在这里:尝试解析foreach loop - 包括一个测试访问令牌。这可以在任何地方进行测试
$get_media_url = 'https://api.instagram.com/v1/tags/nataliguatemipoa/media/recent?access_token=6678174.467ede5.205a03ebc4b74d4082823781c3149575';
$media = getResults($get_media_url); //Look Below to find function details
foreach($media['data'] as $insta){
$source_id = $insta['id'];
}
这是 Instagram 响应的示例,
Array
(
[0] => stdClass Object
(
[pagination] => stdClass Object
(
[next_min_id] => 1407287255810188
[deprecation_warning] => next_max_id and min_id are deprecated for this endpoint; use min_tag_id and max_tag_id instead
[min_tag_id] => 1407287255810188
)
[meta] => stdClass Object
(
[code] => 200
)
[data] => Array
(
[0] => stdClass Object
(
[attribution] =>
[tags] => Array
(
[0] => muff
[1] => hairstylist
)
//Cut the rest for example purposes
调用 api
function __apiCall($url, $post_parameters = FALSE) {
// Initialize the cURL session
$curl_session = curl_init();
// Set the URL of api call
curl_setopt($curl_session, CURLOPT_URL, $url);
// If there are post fields add them to the call
if($post_parameters !== FALSE) {
curl_setopt ($curl_session, CURLOPT_POSTFIELDS, $post_parameters);
}
// Return the curl results to a variable
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
// Execute the cURL session
$contents = curl_exec ($curl_session);
// Close cURL session
curl_close ($curl_session);
// Return the response
return json_decode($contents);
}
获取所有分页结果
function getResults($url){
$gotAllResults = false;
$results = array();
while(!$gotAllResults) {
$result = $this->__apiCall($url);
$results[] = $result;
if (!property_exists($result->pagination, 'next_url')) {
$gotAllResults = true;
} else {
$url = $result->pagination->next_url;
}
}
return $results;
}
【问题讨论】: