什么是新的Instagram json端点?

时间:2018-04-12 05:51:09

标签: json api instagram instagram-api endpoint

Instagram用于在端点https://www.instagram.com/<username>/?__a=1下将开放数据公开为json。这改变了一夜,端点不再可用。什么是新的终点或什么可以替代它?

提前致谢!

5 个答案:

答案 0 :(得分:18)

端点不再存在。由于丑闻,Facebook正在限制API。数据仍然存在,Instagram的前端需要它,所以现在的另一种选择是刮掉页面并在那里找到json数据。我是这样做的:

  • http访问https://www.instagram.com/<username>
  • 查找script标记哪个文字以window._sharedData =开头。您可以使用正则表达式或抓取库。
  • 文本的其余部分(最后的;除外)是您想要的json数据。
  • 将字符串化的json转换为json,以便像以前一样访问它。
  • &#39; ProfilePage&#39;中的第一个元素输入&#39; entry_data&#39; key完全对应于旧端点返回的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,
...
}

答案 1 :(得分:5)

如果您正在寻找正则表达式:

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

答案 2 :(得分:1)

您可以像 instagram-scraper 包那样创建会话。

您无需提供用户名和密码。下面的代码段将创建一个匿名会话。

import requests
import json
try:
    from urllib.parse import urlparse
except ImportError:
    from urlparse import urlparse

BASE_URL = 'https://www.instagram.com/'
CHROME_WIN_UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'

session = requests.Session()
session.headers = {'user-agent': CHROME_WIN_UA, 'Referer': BASE_URL}
session.cookies.set('ig_pr', '1')
req = session.get(BASE_URL)
session.headers.update({'X-CSRFToken': req.cookies['csrftoken']})

url = "https://www.instagram.com/instagram/?__a=1"
response = session.get(url, cookies="", headers={'Host': urlparse(url).hostname}, stream=False, timeout=90)
print(response.json())

https://github.com/arc298/instagram-scraper

答案 3 :(得分:0)

该端点仍然有效,但是您必须具有来自当前登录会话的有效cookie。

答案 4 :(得分:0)

https://www.instagram.com/<username>/?__a=1

有效,但您必须登录