Après quelques jours d'utilisation d'un cookie ig_pr
il y a deux jours est bloqué. On dirait que le seul moyen d'obtenir les données maintenant est d'utiliser sessionid
avec une valeur spécifique
J'utilisais instagram? __ a = 1 url pour lire tous les messages d'utilisateurs d'Instagram.
Il y a quelques heures, la réponse a changé et je ne peux plus utiliser max_id
paginer.
Avant d’envoyer habituellement une demande à
https://www.instagram.com/{{username}}/?__a=1
et en utilisant le 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}}
Maintenant le end_cursor
changements dans chaque appel & max_id ne fonctionne pas.
S'il vous plaît aider :)
Query_hash ne change pas, du moins ces derniers jours. Il indique de quel type de requête il s'agit.
Ci-dessous 4 types de requêtes répertoriées que je connaissais, espérons que ces derniers seront utiles.
Chargez plus de 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 le 2018-04-12. Vous devez supprimer le __a = 1 et extraire le JSON à l'intérieur d'un bloc. Recherchez "window._sharedData" dans le code HTML)
Chargez plus de 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"}
Chargez plus de 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 curseur final de la demande d'origine
Je suis juste venu par le même problème.
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 la graphql api.
https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables= {"id": "111", "premier": 12, "après": "xxx"}
utilisez query_hash ou query_id
Je n'ai aucune idée de la durée pendant laquelle query_id/query_hash fonctionnera, c'est à Instagram. Ils finiront par le changer.
Mis à jour le 08/04/2018 - Avant que FB ne vérifie aucun cookie, il semblerait qu'ils aient ajouté une validation rapide. Essayez d'ajouter ig_pr=2
au cookie de demande lors de l'envoi de votre API. Cette solution rapide fonctionne pour moi. Qui sait quand FB le changera à nouveau.
Tant que FB n'imposera pas la connexion à ces API de base, il existera toujours une solution de contournement simple.
Le principal problème avec l'utilisation de graph/query est que je n'ai que le nom d'utilisateur, pour extraire l'ID utilisateur & le dernier message comme nous le faisons avec? __ a = 1, nous devons obtenir la page utilisateur d'Instagram & extraire _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 obtenu toutes ces données, nous pouvons appeler graph/query (pas du côté client)
Traduit une partie du code de ces personnes en 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];
}
Je ne sais pas pour combien de temps ça va marcher. Pour mon petit projet, il fait le travail pour le moment. Le résultat est très similaire (sinon égal) à celui de l'URL: instagram.com/{user}/?__a=1
Cette réponse n’aide pas directement la question, mais la publication, car une personne pourrait en bénéficier. À la date du 12 avril 2018, le chargement de plusieurs API ne fonctionnera pas sans un en-tête Cookie
. Vous trouverez ci-dessous des codes pour récupérer le site APIS public 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
});
et pour charger plus d'articles, j'utilise:
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
est suffisant maintenant. Je ne suis pas sûr cependant, mais cela semble fonctionner sans eux aussi pour moi.
Pour la pagination, vous pouvez maintenant utiliser? __ a = 1 & page = 2
À compter de la date du 12 avril 2018, à 16h00 (GMT + 1), les requêtes d'API fonctionnent sans aucun cookie. Je n'ai aucune idée de ce qu'ils font ...
Essayez juste ce lien en navigation privée.