web-dev-qa-db-ja.com

新しいInstagram JSONエンドポイントとは何ですか?

Instagramは、エンドポイントの下でjsonとしてオープンデータを公開していましたhttps://www.instagram.com/<username>/?__a=1。これは一晩で変化し、エンドポイントはもう利用できません。新しいエンドポイントとは何ですか、またはこれに代わるものは何ですか?

前もって感謝します!

10

エンドポイントはもう存在しません。 FacebookはスキャンダルのためにAPIを制限しています。もちろん、データはまだそこにあり、Instagramのフロントエンドはそれを必要としているので、現時点での代替手段は、ページをスクレイプしてそこにあるjsonデータを見つけることです。ここに私がそれをする方法があります:

  • Httpでhttps://www.instagram.com/<username>にアクセスします。
  • テキストがwindow._sharedData =で始まるscriptタグを探します。これには、正規表現またはスクレイピングライブラリを使用できます。
  • 残りのテキスト(末尾の;を除く)は、必要なJSONデータです。
  • 以前のようにアクセスするために、文字列化されたJSONをJSONにキャストします。
  • 'entry_data'キーの 'ProfilePage'キーの最初の要素は、古いエンドポイントによって返されたjsonに正確に対応しています。

Pythonを使用した例を次に示します。

import requests
from bs4 import BeautifulSoup
import re
import json

r = requests.get('https://www.instagram.com/github/')
soup = BeautifulSoup(r.content)
scripts = soup.find_all('script', type="text/javascript", text=re.compile('window._sharedData'))
stringified_json = scripts[0].get_text().replace('window._sharedData = ', '')[:-1]

json.loads(stringified_json)['entry_data']['ProfilePage'][0]

Out[1]:
{u'graphql': {u'user': {u'biography': u'How people build software.',
u'blocked_by_viewer': False,
...
}
19

正規表現を探している場合:

<script type="text\/javascript">window[.]_sharedData = {[\s\S]*};<\/script>

6
Emixam23

このエンドポイントは引き続き機能しますが、現在ログインしているセッションからの有効なCookieが必要です。

0
Mike McCartin