Instagram? a=1 url ne fonctionne plus et des problèmes avec graphql / requête pour obtenir des données

Mise À Jour 19 Avril

Après quelques jours à l'aide de cookie ig_pr il y a deux jours est bloquer. Regarde comme le seul moyen d'obtenir les données est d'utiliser sessionid avec une valeur spécifique

Origine

j'utilisais instagram ?__a=1 url de lire tous les post de instagram à ses utilisateurs.

il y a quelques heures il y a eu un changement dans la réponse et maintenant ne me permet pas d'utiliser max_id pour paginer.

avant d'envoyer une demande

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

et graphql.edge_owner_to_timeline_media.page_info.end_cursor dans la réponse j'ai appelé la même page avec un nouveau max_id

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

end_cursor changements dans chaque appel & max_id ne fonctionne pas.

s'il vous Plaît aider :)

19
demandé sur Pablo 2018-03-13 23:29:24

7 réponses

le query_hash ne change pas, du moins ces derniers jours. Il indique quel type de requête il est.

ci-dessous énuméré 4 types de requête que je connaissais, j'espère que ces aider.

Charger plus médias sous https://www.instagram.com/someone/?__a=1

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

(Instagram a bloqué l'accès ci-dessus depuis 2018-04-12. Vous devez enlever le _ _ a=1 et extraire le JSON à l'intérieur d'un bloc. Cherche "fenêtre"._sharedData " dans le HTML)

Charger plus médias sous 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"}

Charger plus médias sous 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"}

Charger plus commentaires pour https://www.instagram.com/p/Bf-I2P6grhd/

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

où XXXXXXXX est le end_cursor de l'original demande

7
répondu Felix Ng 2018-04-12 13:09:46

je viens par la même question.

on dirait qu'ils viennent de changer leur api privée en supprimant le max_id. Leur site Web semble avoir remplacé l'ancienne api par l'api graphql.

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

  • id: utilisateur ID,
  • premier: quantité de noeuds à obtenir,
  • après: "end_cursor' vous pouvez obtenir à partir de données['utilisateur']['edge_owner_to_timeline_media']['page_info']['end_cursor']

utiliser query_hash ou query_id

  • query_hash: 472f257a40c653c64c666ce877d59d2b
  • query_id: 17888483320059182

je n'ai aucune idée de combien de temps query_id / query_hash fonctionne, il est Jusqu'à Instagram. Ils finiront par changer.

mise à Jour de 4/8/2018 - avant, FB n'avait pas vérifié les cookies, mais on dirait qu'ils ont ajouté une validation rapide. Essayez d'ajouter ig_pr=2 vers le cookie de requête, lors de l'envoi de votre API. Cette solution rapide fonctionne pour moi. Qui sait quand FB le changera encore.

tant que FB n'impose pas la connexion pour ces API de base, il y aura toujours une solution facile.

9
répondu Daniel Choi 2018-04-08 01:35:44

le principal problème avec l'utilisation de graph / query est que je n'ai que le nom d'utilisateur, pour extraire l'userId & le dernier post comme nous l'utilisons pour faire avec ?__a=1, nous avons pour obtenir l'instagram de l'utilisateur de la page et l'extrait de _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);
    }
})

Après avoir vu toutes ces données, on peut graphe d'appel/de requête (pas dans le côté client)

7
répondu Pablo 2018-04-13 08:15:31

cette réponse n'aide pas directement la question, mais elle est affichée parce que quelqu'un pourrait en tirer profit. À partir de la date actuelle 12 avril 2018, la charge plus D'API ne fonctionnera pas sans un Cookie jeu d'en-tête. Voici quelques codes pour récupérer 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
    });

et pour charger plus d'articles, je suis en utilisant:

    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) { });

il semble query_id n'est plus nécessaire et query_hash suffit maintenant. Je ne suis pas sûr, mais il semble travailler sans eux aussi m'.

3
répondu Noushad PP 2018-04-13 18:41:09

Traduit certains des gens de code 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];
}

Pas sûr de combien de temps ça va marcher. Pour mon petit projet, il fait le travail pour l'instant. Le résultat est très similaire (si ce n'est égal) de l'un à l'URL: instagram.com/{user}/?__a=1

2
répondu Zerquix18 2018-04-24 16:03:58

Pour la pagination, vous pouvez maintenant utiliser ?__a=1&page=2

1
répondu Igor Sovcik 2018-03-31 21:54:04

à partir de la date actuelle 12 avril 2018, 16h00 (GMT+1), les requêtes API fonctionnent sans aucun cookie. Je n'ai aucune idée de ce qu'ils font...

Juste essayer ce lien en navigation privée.

1
répondu Pierre Grimaud 2018-04-12 15:00:59