Instagram? __ a = 1 url больше не работает и проблемы с graphql/query для получения данных

Обновление 19 апреля

Через несколько дней использование cookie ig_pr два дня назад является блоком. Похоже, единственный способ получить данные теперь - использовать sessionid с определенным значением

оригинал

Я использовал instagram? __ a = 1 url, чтобы прочитать все сообщения пользователей instagram.

Несколько часов назад произошла смена ответа, и теперь я не могу использовать max_id для max_id на страницы.

Прежде чем я обычно отправляю запрос на

https://www.instagram.com/{{username}}/?__a=1

и используя graphql.edge_owner_to_timeline_media.page_info.end_cursor в ответе, я назвал ту же страницу новым max_id

https://www.instagram.com/{{username}}/?__a=1&max_id={{end_cursor}}

Теперь end_cursor изменяется в каждом вызове, а max_id не работает.

Пожалуйста помоги :)

Ответы

Ответ 1

Query_hash не изменяется, по крайней мере, в последние несколько дней. Он указывает, какой ТИП запроса он есть.

Ниже перечислены 4 типа запросов, которые я знал, надеюсь, что эта помощь.

Загрузите больше медиафайлов по адресу https://www.instagram.com/someone/?__a=1

https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables={"id":"93024","first":12,"after":"XXXXXXXX"}

(Instagram заблокировал вышеуказанный доступ с 2018-04-12 г. Вы должны удалить __a = 1 и извлечь JSON внутри блока. Ищите "window._sharedData" в HTML)

Загрузите больше медиафайлов по ссылке https://www.instagram.com/explore/tags/iphone/?__a=1

https://www.instagram.com/graphql/query/?query_hash=298b92c8d7cad703f7565aa892ede943&variables={"tag_name":"iphone","first":12,"after":"XXXXXXXX"}

Загрузите больше материалов по ссылке https://www.instagram.com/explore/locations/703629436462521/?__a=1

https://www.instagram.com/graphql/query/?query_hash=ac38b90f0f3981c42092016a37c59bf7&variables={"id":"703629436462521","first":12,"after":"XXXXXXXX"}

Загрузите больше комментариев для https://www.instagram.com/p/Bf-I2P6grhd/

https://www.instagram.com/graphql/query/?query_hash=33ba35852cb50da46f5b5e889df7d159&variables={"shortcode":"Bf-I2P6grhd","first":20,"after":"XXXXXXXX"}

где XXXXXXXX является конечным_курсором из исходного запроса

Ответ 2

Я только что пришел к тому же вопросу.

Похоже, они просто изменили свой частный api, удалив max_id. Их веб-сайт, похоже, заменил старый api графиком api.

https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables= {"id": "111", "first": 12, "after": "xxx"}

  • id: идентификатор пользователя,
  • сначала: количество узлов, которые нужно получить,
  • после: "end_cursor" вы можете получить из данных ['user'] ['edge_owner_to_timeline_media'] ['page_info'] ['end_cursor']

используйте либо query_hash, либо query_id

  • query_hash: 472f257a40c653c64c666ce877d59d2b
  • query_id: 17888483320059182

Я понятия не имею, как долго будет работать query_id/query_hash, вплоть до Instagram. В конечном итоге они изменят его.

Обновлено 4/8/2018 - до того, как FB не проверял файлы cookie, но похоже, что они добавили быструю проверку. Попробуйте добавить ig_pr=2 в файл cookie запроса при отправке вашего API. Это быстрое исправление работает для меня. Кто знает, когда FB снова изменит его.

Пока FB не применяет логин для этих основных API-интерфейсов, всегда будет непросто обходное решение.

Ответ 3

Основная проблема с использованием графика/запроса заключается в том, что у меня есть только имя пользователя, чтобы извлечь userId & last post, как мы привыкли делать? __ a = 1 мы должны получить страницу пользователя instagram & extract _sharedData

Javascript

let url = "https://www.instagram.com/"+username;
$.ajax({
    type: 'GET',
    url: url,
    error: function () {
        //..
    },
    success: function (data) {
        data = JSON.parse(data.split("window._sharedData = ")[1].split(";</script>")[0]).entry_data.ProfilePage[0].graphql;
        console.log(data);
    }
})

После получения всех этих данных мы можем вызвать граф/запрос (а не на стороне клиента)

Ответ 4

Я построил небольшой сервер, который делает это преобразование. Вы получите данные как обычно - получайте удовольствие 😊

https://apinsta.herokuapp.com/u/appwithus

Ответ 5

Перевел некоторые из кода людей на PHP:

<?php
function getPublicInfo($username) {
    $url     = sprintf("https://www.instagram.com/$username");
    $content = file_get_contents($url);
    $content = explode("window._sharedData = ", $content)[1];
    $content = explode(";</script>", $content)[0];
    $data    = json_decode($content, true);
    return $data['entry_data']['ProfilePage'][0];
}

Не уверен, как долго он будет работать. Для моего небольшого проекта он работает на данный момент. Результат очень похож (если не равен) на тот, который instagram.com/{user}/?__a=1 по URL-адресу: instagram.com/{user}/?__a=1

Ответ 6

Этот ответ не помогает напрямую, но публикует сообщения, потому что кто-то может воспользоваться ответом. На текущий день 12 апреля 2018 года загрузка дополнительных API-интерфейсов не будет работать без набора заголовков Cookie cookie. Ниже приведены некоторые коды для загрузки Instagram public APIS

    let url = "https://www.instagram.com/explore/";
    if (payload.type == 'location') {
        url = url + "locations/" + payload.location_id + "/" + payload.location_name + "/?__a=1";
    } else if (payload.type == 'hashtag') {
        url = url + "tags/" + payload.hashtag + "/?__a=1";
    } else { //profile
        url = "https://www.instagram.com/" + payload.user_name + "/?__a=1";
    }

    request(url, function (error, response, body) {
        body = JSON.parse(body);
        //below are params which are required for load more pagination payload
        paginationData = {
            has_next_page: body.data.user.edge_owner_to_timeline_media.page_info.has_next_page,
            end_cursor: body.data.user.edge_owner_to_timeline_media.page_info.end_cursor
        };

        //user.edge_owner_to_timeline_media for profile posts,
        //hashtag.edge_hashtag_to_media for hashtag posts
        //location.edge_location_to_media for location posts
    });

и для загрузки большего количества предметов, я использую:

    let url = "https://www.instagram.com/graphql/query/";
    if (payload.type == 'location') {
        let variables = encodeURIComponent('{"id":"' + payload.pagination.id + '","first":50,"after":"' + payload.pagination.end_cursor + '"}');
        url = url + "?query_hash=ac38b90f0f3981c42092016a37c59bf7&query_id=17865274345132052&variables=" + variables;
    } else if (payload.type == 'hashtag') {
        let variables = encodeURIComponent('{"tag_name":"' + payload.pagination.tag_name + '","first":50,"after":"' + payload.pagination.end_cursor + '"}');
        url = url + "?query_hash=298b92c8d7cad703f7565aa892ede943&query_id=17875800862117404&variables=" + variables;
    } else { //profile
        let variables = encodeURIComponent('{"id":"' + payload.pagination.owner_id + '","first":50,"after":"' + payload.pagination.end_cursor + '"}');
        url = url + "?query_hash=472f257a40c653c64c666ce877d59d2b&query_id=17888483320059182&variables=" + variables;
    }

    let options = {
        url: url,
        headers: {
            Cookie: "Cookie value which i copied from my logged in instagram browser window"
        }
    };

    request(options, function (error, response, body) { });

Похоже, что query_id больше не требуется, а query_hash достаточно. Хотя я не уверен, но, похоже, для меня это работает без них.

Ответ 7

Для разбивки на страницы теперь вы можете использовать? __ a = 1 & page = 2

Ответ 8

По состоянию на текущую дату 12 апреля 2018 года, 16:00 (GMT + 1), запросы API работают без какого-либо файла cookie. Я понятия не имею, что они делают...

Просто попробуйте эту ссылку в частной навигации.

Ответ 9

Uri https://www.instagram.com.br/someusername?__a=1 все еще работает. Что вам нужно сделать, это отправить действительный файл cookie в заголовке вашего запроса. Для тестов войдите в свою учетную запись, пропустите этот URI с именем пользователя и проверьте заголовки запросов (в Chrome вы можете видеть его), получите значение cookie и в вашем приложении, когда вы выполняете запрос к этому URI, установите этот cookie в своем запросите заголовки и будете работать.