Cookieを使用して数日後ig_pr
は2日前にブロックされます。現在データを取得する唯一の方法は、特定の値でsessionid
を使用することです
Instagramのユーザーのすべての投稿を読むためにinstagram?__ a = 1のURLを使用していました。
数時間前、応答に変更があり、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が機能しなくなりました。
助けてください :)
少なくとも過去数日間は、query_hashは変更されません。クエリの種類を示します。
以下に、私が知っている4つのクエリタイプを示します。これらが役立つことを願っています。
https://www.instagram.com/someone/?__a=1 の下にさらにmediaを読み込む
https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables={"id":"93024","first":12,"after":"XXXXXXXX"}
(Instagramは2018-04-12以降、上記のアクセスをブロックしました。__a = 1を削除し、ブロック内のJSONを抽出する必要があります。HTMLで「window._sharedData」を探してください)
https://www.instagram.com/explore/tags/iphone/?__a=1 の下にさらにmediaを読み込む
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 の下にさらにmediaを読み込みます
https://www.instagram.com/graphql/query/?query_hash=ac38b90f0f3981c42092016a37c59bf7&variables={"id":"703629436462521","first":12,"after":"XXXXXXXX"}
もっと読み込むcommentsfor 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は元のリクエストのend_cursorです
私はちょうど同じ問題に来ました。
max_idを削除してプライベートAPIを変更したようです。彼らのウェブサイトは古いAPIをgraphql APIに置き換えたようです。
https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables= {"id": "111"、 "first":12、 "after": "xxx"}
query_hashまたはquery_idのいずれかを使用します
Query_id/query_hashがどのくらいの期間機能するかはわかりません。Instagramの問題です。最終的には変更されます。
2018年4月8日に更新-FBはCookieをチェックしませんでしたが、クイック検証を追加したようです。 APIを送信するときに、リクエストCookieにig_pr=2
を追加してみてください。この簡単な修正は私にとっては有効です。 FBがいつそれを再び変更するかを誰が知っていますか。
FBがこれらの基本的なAPIのログインを強制しない限り、常に簡単な回避策があります。
グラフ/クエリを使用する場合の主な問題は、sernameしかなく、ユーザーIDを抽出することと、?__ a = 1で行う最後の投稿を使用して、instagramのユーザーページを取得する必要があることです& _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);
}
})
このデータをすべて取得した後、グラフ/クエリを呼び出すことができます(クライアント側ではありません)
人々のコードの一部を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];
}
どれくらいの期間機能するかはわかりません。私の小さなプロジェクトでは、今のところ仕事をしています。結果は、URLの結果と非常によく似ています(等しくない場合):instagram.com/{user}/?__a=1
この回答は、質問を直接支援するのではなく、誰かが回答の恩恵を受ける可能性があるため、投稿しています。現在の日付2018年4月12日の時点で、Cookie
ヘッダーセットがないと、APIのロードは機能しません。以下はInstagramのパブリックAPIを取得するためのいくつかのコードです
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
で十分です。確かではありませんが、それらがなくても私には機能しているようです。
ページネーションには、?__ a = 1&page = 2を使用できます
2018年4月12日の午後4時(GMT + 1)現在、APIクエリはCookieなしで機能します。彼らが何をしているかわからない...
プライベートナビゲーションで このリンク を試してください。