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 :)
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
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.
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)
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'.
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
Pour la pagination, vous pouvez maintenant utiliser ?__a=1&page=2
à 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.