#instagram #file-get-contents
#Instagram #file-get-contents
Вопрос:
Я пытаюсь очистить данные со страницы пользователя Instagram (IG) для использования в качестве потокового канала на веб-сайте, но, по-видимому, IG использует блокировщик ботов, поэтому метод PHP возвращает не все элементы строки JSON.
Данные, которые я пытаюсь получить, следующие, в частности "ProfilePage":[{}]
объект, который виден через локальный браузер, когда он не вошел в IG.
<script type="text/javascript">window._sharedData = {
"config": {
"csrf_token": "MaYaasysNl6fy19YthOGUNVOXvYitbmO",
"viewer": null,
"viewerId": null
},
"country_code": "US",
"language_code": "en",
"locale": "en_US",
"entry_data": {
"ProfilePage": [{
"logging_page_id": "profilePage_28995773",
"show_suggested_profiles": true,
"show_follow_dialog": false,
"graphql": {
"user": {
//[...more data follows including images and links]
}
}
</script>
Но то, что я получаю при очистке с помощью php-скрипта, — это следующее, которое не включает ProfilePage
элемент и данные внутри entry_data
объекта.
<script type="text/javascript">window._sharedData = {
"config": {
"csrf_token": "VgzhYPHc6dXWP3qQFKjlWYEBK59bDo6A",
"viewer": null,
"viewerId": null
},
"country_code": "US",
"language_code": "en",
"locale": "en_US",
"entry_data": {
"LoginAndSignupPage": [{
"captcha": {
"enabled": false,
"key": ""
},
"gdpr_required": false,
"tos_version": "row",
"username_hint": ""
}]
},
"hostname": "www.instagram.com",
"is_whitelisted_crawl_bot": false,
"connection_quality_rating": "EXCELLENT",
"deployment_stage": "c2",
"platform": "web",
"nonce": "kQ3AWksy1DQ9TXuwLdKMkw==",
"mid_pct": 84.93332,
"zero_data": {},
"cache_schema_version": 3,
"server_checks": {},
</script>
Я пробовал использовать cURL
, file_get_contents()
, new DOMDocument()->loadHTMLFile()
чтобы получить весь исходный код страницы, а затем preg_match
для нужной строки, но ни один из методов не смог обойти блокировщик.
$ig = file_get_contents($url);
preg_match_all('#shortcode":"(.*)",#i',$ig, $match);
Ожидаемый доход
Array
(
[0] => CB-W_D2h3Sz
[1] => B65TtGYBH8Z
[2] => B65SNqsha6O
[3] => B62NvlShguS
[4] => B6zwW5CBETr
[5] => B6wbz5nB_dP
[6] => B6wa3rxBOOP
[7] => B6uw9RwBSSd
[8] => B6tg9dIh_XB
[9] => B6tYekYhIe8
[10] => B6pR-pGhvoE
[11] => B6pRhVgBwaZ
)
Буквальный возврат
Array
(
)
Как я могу получить нужные данные?
Ответ №1:
Я определил решение
https://instagram.com/graphql/query/?query_id=17888483320059182amp;variables={"id":"217723373","first":8,"after":null}
Комментарии:
1. Как получить идентификатор пользователя из имени пользователя? ig basic profile api возвращает идентификатор пользователя, который отличается и не работает с этим graphql api.