如何使用PHP避免503错误抓取instagram?

时间:2018-06-12 18:20:07

标签: php

我正在网站上工作,我希望从Instagram帐户中检索最近的6张照片,并将标题设为悬停文字。我的代码在下面有效,但我注意到在刷新页面一两次后,我开始收到此错误:

Warning: file_get_contents(http://instagram.com/green_tree_relief): failed to open stream: HTTP request failed! HTTP/1.1 503 No server is available for the request on line 14

我认为这是因为我的行为阻止了我的行为?

如果可能的话,我正在寻找解决方法。我试图欺骗用户代理并且没有用。如果我没有误解他们的API弃用,他们不会允许你使用它来获取公共内容。我认为这是一个道德上的灰色区域,所以完全放弃这个功能是一种选择,但我想让它发挥作用。

无论如何,在我的主页上有一个对这个PHP脚本的ajax调用,然后在成功时插入生成的HTML:

function scrape_insta($username) {

    $insta_source = file_get_contents('http://instagram.com/'.$username);
    $shards = explode('window._sharedData = ', $insta_source);
    $insta_json = explode(';</script>', $shards[1]);
    $insta_array = json_decode($insta_json[0], TRUE);
    return $insta_array;
}

$my_account = 'green_tree_relief';

$photostreamHTML = '';

$results_array = scrape_insta($my_account);

for($i = 0; $i < 6; $i++) {

    if(isset($results_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'][$i]['node']['edge_media_to_caption']['edges'][0]['node']['text'])) {
        $caption = $results_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'][$i]['node']['edge_media_to_caption']['edges'][0]['node']['text'];
    }

    if(isset($results_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'][$i]['node']['display_url'])) {
        $photostreamHTML .= '<div style="height: 84px;">
                            <a href="https://www.instagram.com/' . $my_account . '" target="_blank">
                                <img src="'
            . $results_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'][$i]['node']['display_url'] . '"
                                class ="img-responsive" title = "' . $caption . '">
                            </a>
                        </div>';
    }

}

正如我所说,当我没有在网站上工作几个小时但是在那之后它失败了,我开始加载页面的前几次工作。

任何建议都将不胜感激。

0 个答案:

没有答案