Как я могу обойти блокировку ботов в Instagram, чтобы получить полную страницу с помощью file_get_contents ()

#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.