Парсинг instagram

darknight

Client
Регистрация
28.09.2013
Сообщения
104
Благодарностей
4
Баллы
18
Добрый день.
Некоторое время назад инстаграмм изменил свой API и теперь требуется X-Instagram-GIS. Как я понял, это MD5 хешсумма и состоит она из rhx_gis и переменных запроса. Но вот подобрать правильно эти переменные, чтоб получилась правильная хешсумма у меня не выходит. Может кто может помочь разобраться с этой бедой или уже столкнулся и есть решение?
Заранее спасибо.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

itserviceinс

Активный пользователь
Регистрация
12.11.2017
Сообщения
108
Благодарностей
30
Баллы
28
Код:
preg_match_all('~<script type="text/javascript">window._sharedData = (.*?);</script>~is'
$sharedData = json_decode($m[1][0], true);

$csrf_token = $sharedData['config']['csrf_token']
 

darknight

Client
Регистрация
28.09.2013
Сообщения
104
Благодарностей
4
Баллы
18

darknight

Client
Регистрация
28.09.2013
Сообщения
104
Благодарностей
4
Баллы
18

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

darknight

Client
Регистрация
28.09.2013
Сообщения
104
Благодарностей
4
Баллы
18
Листание поиска get запросами.
Нужно получить порядка 50к результатов. Вебом "скроллить" вниз такое количество нереально. Полгода назад еще, не было проблем получать и 500к, текущие апдейты осилить не могу.
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Пишу это для тех, кто не понимает откуда все-таки берется X-Instagram-GIS и так же как и я, плохо читает буржуйские форумы программистов. Покажу на наглядном примере:
1)Открываете любой сниффер
2)Грузите любое фото, например: https://www.instagram.com/p/BplmK_fj1HB/ - это первый запрос
3)Далее нажимаете кнопку: "Загрузить еще комментарии" и смотрите Get запрос. Там то и появляется X-Instagram-GIS, а сам url будет выглядеть примерно так:
Код:
https://www.instagram.com/graphql/query/?query_hash=f0986789a5c5d17c2400faebf16efd0d&variables=%7B%22shortcode%22%3A%22BplmK_fj1HB%22%2C%22first%22%3A34%2C%22after%22%3A%22QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA%3D%3D%22%7D
- это второй запрос
4)Из содержимого ответа на первый запрос парсите rhx_gis, получите примерно это: 4e60f00c4f846e6f8b7d0a4f75c66015
5)Декодируете url второго запроса (urldecode) и парсите все, что идет после variables=, получится примерно такая строка:
Код:
{"shortcode":"BplmK_fj1HB","first":34,"after":"QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA=="}
6)Наконец-то получаем хеш сумму MD5 вот такой строки:
Код:
4e60f00c4f846e6f8b7d0a4f75c66015:{"shortcode":"BplmK_fj1HB","first":34,"after":"QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA=="}
Сделать это можно здесь или вот таким сниппетом:
Код:
string input = @"4e60f00c4f846e6f8b7d0a4f75c66015:{""shortcode"":""BplmK_fj1HB"",""first"":34,""after"":""QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA==""}"; //заданая строка
// Md5 хеш
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder md5hash = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
    md5hash.Append(data[i].ToString("x2"));
}
//Возвращаем MD5 хеш для строки
return md5hash.ToString();
Сравниваем результат с значением из сниффера и радуемся жизни:-) Другими словами, X-Instagram-GIS - это md5 хеш строки rhx_gis:queryVariables. Откуда взять все остальные значения вы должны разобраться сами, я и так всегда мечтал, что бы ответ на мой вопрос был настолько разжеван:D
 

MPGVR90

Client
Регистрация
15.10.2012
Сообщения
119
Благодарностей
17
Баллы
18
Я ничего не понял, но лайк поставил :-)
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28

abcman

Client
Регистрация
13.10.2010
Сообщения
33
Благодарностей
4
Баллы
8
Жесть какая. Может кто это все замутить за бабло?
 

Raids

Client
Регистрация
12.09.2017
Сообщения
41
Благодарностей
19
Баллы
8
Пишу это для тех, кто не понимает откуда все-таки берется X-Instagram-GIS и так же как и я, плохо читает буржуйские форумы программистов. Покажу на наглядном примере:
1)Открываете любой сниффер
2)Грузите любое фото, например: https://www.instagram.com/p/BplmK_fj1HB/ - это первый запрос
3)Далее нажимаете кнопку: "Загрузить еще комментарии" и смотрите Get запрос. Там то и появляется X-Instagram-GIS, а сам url будет выглядеть примерно так:
Код:
https://www.instagram.com/graphql/query/?query_hash=f0986789a5c5d17c2400faebf16efd0d&variables=%7B%22shortcode%22%3A%22BplmK_fj1HB%22%2C%22first%22%3A34%2C%22after%22%3A%22QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA%3D%3D%22%7D
- это второй запрос
4)Из содержимого ответа на первый запрос парсите rhx_gis, получите примерно это: 4e60f00c4f846e6f8b7d0a4f75c66015
5)Декодируете url второго запроса (urldecode) и парсите все, что идет после variables=, получится примерно такая строка:
Код:
{"shortcode":"BplmK_fj1HB","first":34,"after":"QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA=="}
6)Наконец-то получаем хеш сумму MD5 вот такой строки:
Код:
4e60f00c4f846e6f8b7d0a4f75c66015:{"shortcode":"BplmK_fj1HB","first":34,"after":"QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA=="}
Сделать это можно здесь или вот таким сниппетом:
Код:
string input = @"4e60f00c4f846e6f8b7d0a4f75c66015:{""shortcode"":""BplmK_fj1HB"",""first"":34,""after"":""QVFBbTBVWS04UU9RR1BUTnZfV1FLRzZ2Z1E2NGVZQ2JRalpoRDYxazdCcWYycW9VTVZkN1FuZHhCZEhTVUVDSW93LU5TSVdYbk1NLUlySVlQMHUzcjlObA==""}"; //заданая строка
// Md5 хеш
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder md5hash = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
    md5hash.Append(data[i].ToString("x2"));
}
//Возвращаем MD5 хеш для строки
return md5hash.ToString();
Сравниваем результат с значением из сниффера и радуемся жизни:-) Другими словами, X-Instagram-GIS - это md5 хеш строки rhx_gis:queryVariables. Откуда взять все остальные значения вы должны разобраться сами, я и так всегда мечтал, что бы ответ на мой вопрос был настолько разжеван:D
Блин наткнулся бы на пару деньков раньше -)))

Теперь проблема с query_hash.

Я понял, что он формируется в запросах JS изучил эту тему https://www.diggernaut.ru/blog/kak-parsit-stranitsy-saytov-s-avtopodgruzkoy-na-primere-instagram/

Как сформировать правильный GET запрос к http://www.instagram.com/static/bundles/metro/ConsumerCommons.js/debea80f50a3.js что бы в ответе была понятная кодировка?
 
Последнее редактирование:

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Блин наткнулся бы на пару деньков раньше -)))

Теперь проблема с query_hash.

Я понял, что он формируется в запросах JS изучил эту тему https://www.diggernaut.ru/blog/kak-parsit-stranitsy-saytov-s-avtopodgruzkoy-na-primere-instagram/

Как сформировать правильный GET запрос к http://www.instagram.com/static/bundles/metro/ConsumerCommons.js/debea80f50a3.js что бы в ответе была понятная кодировка?
честно говоря я уже ничего не помню :D то для чего я это делал не оправдалось и все забылось
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)