php函数传递再次返回该函数

时间:2016-02-05 10:20:16

标签: php function api loops instagram

我正在使用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个图像。

我的问题是:

  1. 如何使用 next_max_id 参数再次将返回函数传递给该函数,以便循环并再次使用该函数?
  2. 如何将结果合并为1个对象数组?
  3. 我很抱歉我的英语和我的解释如果不好。

    感谢您的帮助。

2 个答案:

答案 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
}
祝你好运!