Instagram? __ a = 1 url non funziona più e problemi con graphql / query per ottenere dati

Aggiornamento 19 aprile

Dopo alcuni giorni l’uso del cookie ig_pr due giorni fa è un blocco. Sembra che l’unico modo per ottenere i dati ora sia usare sessionid con un valore specifico

Originale

Stavo usando instagram? __ a = 1 url per leggere tutti i post degli utenti di instagram.

Qualche ora fa c’è stata una variazione nella risposta e ora non mi permette di usare max_id per impaginare.

Prima di solito ho inviato una richiesta a

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

    e utilizzando graphql.edge_owner_to_timeline_media.page_info.end_cursor nella risposta ho chiamato la stessa pagina con un nuovo max_id

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

    Ora le modifiche di end_cursor in ogni chiamata e max_id non funzionano.

    Per favore aiuto 🙂

    La query_hash non cambia, almeno negli ultimi giorni. Indica quale TIPO di query è.

    Di seguito elencati 4 tipi di query che conoscevo, spero che questo aiuto.

    Carica più contenuti multimediali in https://www.instagram.com/someone/?__a=1

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

    (Instagram ha bloccato l’accesso sopra dal 2018-04-12. Devi rimuovere __a = 1 ed estrarre il JSON all’interno di un blocco. Cerca “window._sharedData” nel codice HTML)

    Carica più contenuti multimediali in 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"} 

    Carica più contenuti multimediali in 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"} 

    Carica più commenti per https://www.instagram.com/p/Bf-I2P6grhd/

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

    dove XXXXXXXX è il end_cursor dalla richiesta originale

    Sono appena arrivato dallo stesso problema.

    Sembra che abbiano appena cambiato la loro API privata rimuovendo il max_id . Il loro sito Web sembra aver sostituito la vecchia API con la graphql api.

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

    • id : ID utente,
    • primo : quantità di nodes da ottenere,
    • after : il ‘end_cursor’ che puoi ottenere dai dati [‘user’] [‘edge_owner_to_timeline_media’] [‘page_info’] [‘end_cursor’]

    utilizzare query_hash o query_id

    • query_hash : 472f257a40c653c64c666ce877d59d2b
    • query_id : 17888483320059182

    Non ho idea di quanto tempo quel query_id / query_hash funzionerà, tocca a Instagram. Alla fine lo cambieranno.

    Aggiornato il 4/8/2018 – Prima che FB non controllasse alcun cookie, ma sembra che abbiano aggiunto una convalida rapida. Prova ad aggiungere ig_pr=2 al cookie di richiesta, quando invii la tua API. Questa soluzione rapida funziona per me. Chissà quando FB lo cambierà di nuovo.

    Finché FB non impone l’accesso per queste API di base, ci sarà sempre una soluzione facile.

    Il problema principale con l’uso di graph / query è che ho solo il nome utente , per estrarre l’ ID utente e l’ultimo post come usiamo fare con? __ a = 1 dobbiamo ottenere la pagina utente di instagram ed estrarre _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(";")[0]).entry_data.ProfilePage[0].graphql; console.log(data); } }) 

    Dopo aver ottenuto tutti questi dati possiamo chiamare graph / query (non nel lato client)

    Ho costruito un piccolo server che esegue questa trasformazione. Riceverai i dati come al solito – divertiti 😊

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

    Questa risposta non aiuta direttamente la domanda, ma pubblica perché qualcuno potrebbe beneficiare della risposta. A partire dalla data corrente del 12 aprile 2018, il caricamento di più API non funzionerà senza un set di intestazione Cookie . Di seguito sono riportati alcuni codici per il recupero di APIS pubblici di Instagram

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

    e per caricare più oggetti, sto usando:

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

    Sembra che query_id non sia più richiesto e query_hash è sufficiente ora. Non sono sicuro, ma sembra funzionare senza di loro anche per me.

    Tradotto il codice di qualcuno in PHP:

      

    Non sono sicuro per quanto a lungo funzionerà. Per il mio piccolo progetto fa il lavoro per ora. Il risultato è molto simile (se non uguale) a quello dell’URL: instagram.com/{user}/?__a=1

    A partire dalla data corrente 12 aprile 2018, 4:00 PM (GMT + 1), le query API funzionano senza cookie. Non ho idea di cosa stiano facendo …

    Prova questo link nella navigazione privata.

    Per l’impaginazione ora puoi usare? __ a = 1 & page = 2