Instagram 故事抓取工具 PHP
Instagram Story Scraper PHP
我构建了一个小的 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>";
}
}
}
}
?>
您收到该错误是因为您试图遍历不是数组的内容。
所以在第 22 行,你这样做:
$stories = $data['data']['reels_media']['0']['items'];
这显然是不正确的。尝试 var_dump($data);
并查看您获得的输出并从那里开始。如果您还在为 post var_dump.
的结果而苦恼
我正在检查与您相同的问题。显然这是因为命令 'foreach' 正在访问一个空数组。
我深入查看了数据,发现$stories
是空的,因为它无法从instagram网站接收当前数据。
当我尝试访问程序在我自己的浏览器上创建的 URL 并登录了 ins 帐户时,它起作用了。
所以问题是因为代码$cookies = dirname(__FILE__)."/cookie.txt" ;
找不到当前的cookies。您应该在登录 instagram 网站后复制 cookie,并将 cookie.txt
文件与 .php 文件放在同一文件夹中。
我构建了一个小的 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>";
}
}
}
}
?>
您收到该错误是因为您试图遍历不是数组的内容。
所以在第 22 行,你这样做:
$stories = $data['data']['reels_media']['0']['items'];
这显然是不正确的。尝试 var_dump($data);
并查看您获得的输出并从那里开始。如果您还在为 post var_dump.
我正在检查与您相同的问题。显然这是因为命令 'foreach' 正在访问一个空数组。
我深入查看了数据,发现$stories
是空的,因为它无法从instagram网站接收当前数据。
当我尝试访问程序在我自己的浏览器上创建的 URL 并登录了 ins 帐户时,它起作用了。
所以问题是因为代码$cookies = dirname(__FILE__)."/cookie.txt" ;
找不到当前的cookies。您应该在登录 instagram 网站后复制 cookie,并将 cookie.txt
文件与 .php 文件放在同一文件夹中。