我正在使用Instagram API,并且在函数循环方面有点混乱。
我尝试创建代码以从instagram用户获取所有图像,但API仅限制20个图像。我们必须接下来打电话到下一页。
我在我的应用程序中使用https://github.com/cosenary/Instagram-PHP-API,这是获取图像的功能。
function getUserMedia($id = 'self', $limit = 0)
{
$params = array();
if ($limit > 0) {
$params['count'] = $limit;
}
return $this->_makeCall('users/' . $id . '/media/recent', strlen($this->getAccessToken()), $params);
}
我尝试拨打电话,返回值为
{
"pagination":
{
"next_url": "https://api.instagram.com/v1/users/21537353/media/recent?access_token=xxxxxxx&max_id=1173734674550540529_21537353",
"next_max_id": "1173734674550540529_21537353"
}, [.... another result data ....]
表示第一个功能结果,并产生20个图像。
我的问题是:
我很抱歉我的英语和我的解释如果不好。
感谢您的帮助。
答案 0 :(得分:0)
你应该使用递归函数 当next_url找到null / empty
时停止该函数答案 1 :(得分:0)
从Instagram-PHP-Api文档中,我觉得您应该使用分页()方法来接收下一页:
$photos = $instagram->getTagMedia('kitten');
$result = $instagram->pagination($photos);
只需使用条件(if)验证$ result是否包含内容,如果有,则使用分页()进行另一次调用以请求下一页。递归地做。
但我认为使用while循环在没有Instagram-PHP-Api的情况下实现是个好主意:
$token = "<your-accces-token>";
$url = "https://api.instagram.com/v1/users/self/media/recent/?access_token=".$token;
while ($url != null) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$photos = json_decode($output);
if ($photos->meta->code == 200) {
// do stuff with photos
$url = (isset($photos->pagination->next_url)) ? $photos->pagination->next_url : null; // verify if there's another page
} else {
$url = null; // if error, stop the loop
}
sleep(1000); // to avoid to much requests on Instagram at almost the same time and protect your rate limits API
}
祝你好运!