【问题标题】:Instagram Story Scraper PHPInstagram Story Scraper PHP
【发布时间】:2020-02-03 19:35:15
【问题描述】:

我构建了一个小的 Instagram Story Scraper,但我无法让它工作......我可能只是太累了。 我已经尝试了所有方法,但我自己无法解决问题

每次我用 Wamp 运行它时都会遇到同样的错误

这是我的 index.php 文件

<?php
require_once('instagramStory.php');
$story = new instagram_story();
echo $story->getStory("garyvee");
?>

这是 instagramStory.php

<?php
class instagram_story{
    protected function file_get_contents_curl($url){
        $cookies = dirname(__FILE__)."/cookie.txt" ;
        $curl = curl_init();
        curl_setopt ($curl, CURLOPT_URL, $url);
        curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt ($curl, CURLOPT_COOKIEFILE, $cookies);
        curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
        $answer = curl_exec($curl);
        curl_close($curl);
        return $answer;
    }
    public function getStory($username){
        $url = file_get_contents("https://www.instagram.com/$username/");
        $json = '/sharedData\s=\s(.*[^\"]);<.script>/ixU';
        preg_match_all($json, $url, $jsondata, PREG_SET_ORDER, 0);
        $array = json_decode($jsondata[0][1], true);
        $user_id = $array['entry_data']['ProfilePage']['0']['graphql']['user']['id'];
        $stories = $this->file_get_contents_curl("https://www.instagram.com/graphql/query/?query_hash=de8017ee0a7c9c45ec4260733d81ea31&variables=%7B%22reel_ids%22%3A%5B%22$user_id%22%5D%2C%22tag_names%22%3A%5B%5D%2C%22location_ids%22%3A%5B%5D%2C%22highlight_reel_ids%22%3A%5B%5D%2C%22precomposed_overlay%22%3Afalse%2C%22show_story_viewer_list%22%3Atrue%2C%22story_viewer_fetch_count%22%3A50%2C%22story_viewer_cursor%22%3A%22%22%7D");
        $data = json_decode($stories, true);
        $stories = $data['data']['reels_media']['0']['items'];
        $_story = [];
        foreach ($stories as $story) {
            $vid = 'video_resources';
            if (!array_key_exists($vid, $story)) {
                $_story [] = $story['display_url'];
            } else {
                $_story [] = $story['video_resources'][0]['src'];
            }
        }
        foreach ($_story as $story) {
            $check = '/mp4/m';
            preg_match_all($check, $story, $matches, PREG_SET_ORDER, 0);
            if (empty($matches)) {
                echo "<a href=$story&dl=1><img src=$story></a>";
            } else {
                echo '<video width="320" height="240" controls>';
                echo '<source src="' . $story . '" type="video/mp4">';
                echo '</video>';
                echo "<a href=$story&dl=1>Download</a>";
            }
        }
    }
}
?>

【问题讨论】:

  • print_r($data); die; 在您的json_encode 之后。你得到了什么?
  • 它显然不喜欢$storiesvar_dump($stories) 在第 24 行之前查看它包含的内容。

标签: php instagram scrape


【解决方案1】:

我正在检查与您相同的问题。显然这是因为命令“foreach”正在访问一个空数组。

我深入查看了数据,发现$stories是空的,因为它无法接收到来自instagram网站的当前数据。

当我尝试访问由我自己的浏览器上的程序创建的 URL 并记录了 ins 帐户时,它可以工作。

所以问题是因为代码$cookies = dirname(__FILE__)."/cookie.txt" ; 找不到当前的cookie。您应该在登录 instagram 网站后复制 cookie,并将 cookie.txt 文件与 .php 文件放在同一文件夹中。

【讨论】:

    【解决方案2】:

    您收到该错误是因为您尝试遍历不是数组的内容。

    所以在第 22 行,你正在这样做:

    $stories = $data['data']['reels_media']['0']['items'];

    这显然是不正确的。试试var_dump($data);,看看你得到了什么输出并从那里去。如果您仍然在努力发布 var_dump 的结果。

    【讨论】:

    • 我还在苦苦挣扎?
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多