【发布时间】:2019-10-17 23:57:48
【问题描述】:
我正在对某人的代码进行故障排除,该代码旨在从 Instagram 动态获取图片,然后将它们打印到页面上。
问题是,进程本身基本上是整个页面的瓶颈,导致加载时间出现 10-12 秒的峰值。
我似乎无法找到导致此问题的具体原因。以前的谷歌搜索让我得到了关于使用 file_get_contents() 时连接没有自动关闭的响应,但这不应该是 PhP 5.6 的问题,尤其是 7.1,不是吗?
这是有问题的代码:
<?php
function scrape_insta_hash($tag) {
$insta_source = file_get_contents('https://www.instagram.com/explore/tags/'.$tag.'/');
$shards = explode('window._sharedData = ', $insta_source);
$insta_json = explode(';</script>', $shards[1]);
$insta_array = json_decode($insta_json[0], TRUE);
return $insta_array;
}
$tag = "placeholder";
$results_array = scrape_insta_hash($tag);
$limit = 5;
$imgs = array();
for ($i=$limit; $i >= 0; $i--) {
if(array_key_exists($i,$results_array['entry_data']['TagPage'][0]["graphql"]["hashtag"]["edge_hashtag_to_media"]["edges"])) {
$latest_array = $results_array['entry_data']['TagPage'][0]["graphql"]["hashtag"]["edge_hashtag_to_media"]["edges"][$i]["node"];
$newPosting = ["image"=>$latest_array['display_url']];
$imgs[] = $newPosting['image'];
}
}
?>
【问题讨论】:
-
如果您连续发送多个请求,您可能会受到 Instagram 服务器的限制。尝试伪造浏览器请求,因为 Instagram 可能会将您标记为机器人,请查看此 so post,如果您在循环中报废(我怀疑您是这样),请尝试在请求之间添加一个小睡眠。
-
谢谢 - 在您对循环抓取并因此受到限制的评论之后,我尝试将代码加载到一个有一段时间没有向 Instagram 请求任何内容的网站上 - 果然,前几次没有节流,然后是硬节流。这样的用例的解决方案是什么?使用 file_get_contents() 的输出设置缓存,或者?
标签: php instagram file-get-contents php-7.1