我正在使用Instagram api。这个问题不是Instagram
具体的,而是关于解析 api 调用返回的响应。该 api 适用于分页。通过一些研究,我找到了将所有结果大量获取并避免分页的方法。我在解析 json 文件时遇到问题。在foreach
循环中,我尝试解析,但出现此错误:Invalid argument supplied for foreach()
.如何在foreach
循环中正确解析 json 文件值?
解释该过程的文章,如果不熟悉 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;
}
$insta
是一个对象,而不是一个数组。您应该这样引用:
foreach($media[data] as $insta){
$source_id = $insta->id;
}
对象被引用为 ->
。数组被引用为[]
这里有两个选项之一,您可以尝试将其引用为第一个:
foreach($media['data'] as $insta){
$source_id = $insta->id;
}
或者你可以尝试作为一个对象
foreach($media->data as $insta){
$source_id = $insta->id;
}
尝试将其转换为array
-
foreach((array)$media[0]['data'] as $insta) {
$source_id = $insta->id;
}