Фото из Instagram без API

Просто способ спарсить фото из любого открытого инстаграм аккаунта без получения API. Инстаграм хранит данные о медиа в объекте window._sharedData, который можно получить из изходного кода страницы, но есть способ проще, т.к. те же данные можно получить по определенным эндпоинтам в формате json. С полным список можно ознакомиться в репозитории на гитхабе https://github.com/MohanSha/InstagramResearch

Приведу пример основных

// Страница поста (вместо <id> указывать символьный id поста, пример B9tZ2uto6Vr
https://www.instagram.com/p/<id>/?__a=1

// Страница аккаунта, можно получить последние 12 постов
https://www.instagram.com/<userame>/?__a=1

// Список нужного количества постов
https://www.instagram.com/graphql/query/?query_id=17888483320059182&variables=%7B%22id%22%3A%22<user_id>%22%2C%22first%22%3A<num_of_posts>%7D

Разбор данных

Теперь нужно всего лишь разобрать данные, которые мы получаем. Для этого преобразуем их в более понятный формат при помощи функции php jsone_descode() иисследуем получившийся массив данных через var_dump().

В следствии чего мы узнаем url фото/всей мультимедиа из поста инстаграм. Помимо фото массив полученных данных хранит множество другой информации, например адрес гидролокации или превью фото.

Парсинг фото из instagram на php

Пример получения фото со страницы отдельного поста

// получаем данные поста инстаграм
$data = file_get_contents('https://www.instagram.com/p/B9tZ2uto6Vr/?__a=1');

// преобразуем данные в массив
// Можно исследовать массив при момощи var_dump($data_arr), если нужна какая-то доп. информация
$data_arr = json_decode($data, true);

// получаем url основного фото
$photo = $data_arr[graphql][shortcode_media][display_url];

// выводим фоточку
echo '<img src="' .$photo. '" alt="">';

Пример парсинга фото из нескольких постов instagram на php. В этом примере нам понадобиться ID аккаунта инстаграм, который можно найти в исходном коде по фразе profilePage_. Выведем последние 9 фото из инстаграма Cristiano Ronaldo

// получаем данные последних 9ти постов
$data = file_get_contents('https://www.instagram.com/graphql/query/?query_id=17888483320059182&variables=%7B%22id%22%3A%22173560420%22%2C%22first%22%3A8%7D');
 
// преобразуем данные в массив
$data_arr = json_decode($data, true);

// массив с фото
$photo_arr = $data_arr['data']['user']["edge_owner_to_timeline_media"]["edges"];
 
// получаем url основного фото и отображем на странице
foreach ($photo_arr as $key => $value) {
	$photo = $value["node"]["display_url"];
	echo '<img width="240" height="240" src="' .$photo. '" alt="">';
}

Результат работы скрипта