我正在尝试使用 Instagram API 创建一个包含所有用户 Instagram 图片的画廊。但我在画廊里只有大约 33 张照片。你能帮我吗?我怎样才能解决这个问题?
$response = file_get_contents('https://api.instagram.com/v1/users/' . $target . '/media/recent?access_token=' . $_SESSION['instagram_token'] . '&count=-1');
我正在尝试使用 Instagram API 创建一个包含所有用户 Instagram 图片的画廊。但我在画廊里只有大约 33 张照片。你能帮我吗?我怎样才能解决这个问题?
$response = file_get_contents('https://api.instagram.com/v1/users/' . $target . '/media/recent?access_token=' . $_SESSION['instagram_token'] . '&count=-1');
根据文档,您正在使用一个端点,它将返回用户最近的所有媒体。因此,它不承诺返回所有图像。即使您指定了计数,也会返回最大数量的图像。
但是,您可以使用分页;有关信息,请参阅以下问题/答案:
我想您可以每个请求读取 20 个,然后找到结果的最低 id 并将其用作下一个请求的最大 id。
Request 1 (no max_id)
Id 100
Id 99
..
Id 81
Request 2 (max_id=81)
Id 80
..
Id 61
Request 3 (max_id=61)
Id 60
..
Id 41
然后继续请求,直到您不再收到任何返回的媒体
Instagram API 对其返回的结果数量施加了一个无声的、未记录的限制。即使你传入一个count
高于33
,它也最多只会返回 33 个结果。
我用 Javascript 编写了一个hack,它以进行更多 API 调用为代价消除了这个限制。目前,它仅在您按用户查询时才有效,但我可以实现它,因此它也适用于按标签查询,具体取决于我的可用时间和需求。
随时通过提交拉取请求做出贡献!(您可能希望将我所做的转换为 PHP 代码,以便您可以安全地使用访问令牌)
每个 API 调用将返回最多 20 张照片,您必须使用pagination.url
API 响应中的 进行另一个 API 调用以获取接下来的 20 张照片,依此类推。
https://api.instagram.com/v1/users/3/media/recent/?access_token=ACCESS-TOKEN