Как получить общедоступный пользователь все сообщения из Instagram, без API Instagram - PullRequest
0 голосов
/ 31 мая 2018

Я пытался получить публичные сообщения пользователей из Instagram, я перепробовал почти все возможные ссылки, но каждый раз получал ошибку 403.

  1. https://www.instagram.com/graphql/query/?query_hash=ded47faa9a1aaded10161a2ff32abb6b&variables={"tag_name":"{user-name}","first":25,"after":""}

  2. https://www.instagram.com/{user-name}/?__a=1

  3. https://www.instagram.com/{user-name}/media

     $.ajax({
        url: URL,
        type: "GET",
        success: function(data) {
           console.log('Success!' ,data);
        },
        error: function (response) {
           console.log('ERROR!', response);
        }
     });
    

Выше приведены ссылки, откуда я пытался получить данные.Поскольку я прочитал, что Instagram меняет протокол, то есть ли еще способ получить общедоступными пользователями все посты без использования Instagram API и без использования бэкэнда?спасибо:)

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы получаете 403, потому что у вас нет действительного сеанса.Сеансы веб-приложений хранятся в виде файлов cookie (при просмотре instagram.com существует файл cookie cookie сеанса).

Вам необходимо включить cookie-файл сеанса в заголовки вашего запроса .

Простой способ получить все заголовки действительного запроса - перейти в раздел «Сети» Инструментария разработчика и скопировать.заголовки запроса или другой формат.

Альтернативой является использование сценариев Greasemonkey или Tampermonkey .Будет выполнено прямо из браузера и с использованием текущего сеанса.

0 голосов
/ 02 июня 2018

загружает только 12, надеюсь, кто-нибудь исправит это.

<?php
$username = "john";
$url = "https://www.instagram.com/".$username;
 $html = file_get_contents($url); 
$html = strstr($html,'window._sharedData = ')   ;
$html = explode("</script>", $html);
$html = $html[0];
$html = str_replace("window._sharedData = ","",$html);
$html = strstr($html,'"edge_owner_to_timeline_media');
$html = explode(',"edge_saved_media"',$html);
$html = '{'.$html[0].'}';

$html = json_decode($html,true);

for ($i=0; $i < 100; $i++) { 
$pos[$i] = $html['edge_owner_to_timeline_media']['edges'][$i]['node']['display_url'];
echo '<img src="'.$pos[$i].'" ><br>';
 }

?>

...