Instagram ?__a=1 不再工作了
Instagram ?__a=1 not working anymore
我一直在使用 Instagram 的未记录 API https://www.instagram.com/<user>/?__a=1
在网站上获取 public 用户提要。一段时间以来,这不再有效,可能是因为 Facebook 删除了它。有没有其他方法可以轻松获取 Instagram 帐户的数据?
配置文件 url 的 html 响应中附加了相同的响应,我在 [=16] 中执行了此临时解决方案(当我无法使用 API 时) =]:
url_recent_media = 'https://www.instagram.com/%s/' % instagram_id
response = urllib2.urlopen(url_recent_media)
insta_html = response.read()
insta_html_split = insta_html.split('"ProfilePage":[')
if len(insta_html_split) > 1:
insta_html_split_2 = insta_html_split[1].split(']},"gatekeepers"')
if len(insta_html_split_2) > 1:
json_dict = json.loads(insta_html_split_2[0])
希望对你有所帮助。
https://www.instagram.com/<user>/
中有JSON条数据。
您可以使用正则表达式来查找您需要的内容。
样本
// This regexp gets widest possible dict around "profile_pic_url"
// but inside tag <script type="text/javascript">...</script>
let r = new RegExp('<script type="text\/javascript">' +
'([^{]+?({.*profile_pic_url.*})[^}]+?)' +
'<\/script>');
let source = document.documentElement.outerHTML;
let jsonStr = source.match(r)[2];
let data = JSON.parse(jsonStr);
console.log('data', data);
let oldVariantOfData = data['entry_data']['ProfilePage'][0];
console.log('oldVariantOfData', oldVariantOfData);
我构建了一个小型服务器来进行这种转换。您将像以前一样通过 ?__a=1(如 JSON)收到 Instagram 数据 - 玩得开心
https://www.instapi.io/u/<username>
https://www.instapi.io/u/appwithus
编辑 12/2020:很遗憾,该服务不再可用
不使用instagram也可以试试API。
import json, urllib2
img_dicts = []
url = 'https://www.instagram.com/{}/'.format(instagram_username)
try:
r = urllib2.urlopen(url, timeout=10.0)
instagram_html = r.read()
instagram_html_data = instagram_html.split('"ProfilePage":[')
if len(instagram_html_data) > 1:
instagram_html_final_data = instagram_html_data[1].split(']},"gatekeepers"')
if len(instagram_html_final_data) > 1:
json_dict = json.loads(instagram_html_final_data[0])
media = json_dict['graphql']['user']['edge_owner_to_timeline_media']['edges']
for obj in media:
img_dicts.append({
'id': obj['node']['id'],
'caption': obj['node']['edge_media_to_caption']['edges'][0]['node']['text'],
'imgurl_standard': obj['node']['display_url'],
'imgurl_lower': obj['node']['thumbnail_resources'][4]['src'],
'imgurl_thumb': obj['node']['thumbnail_resources'][3]['src']
})
img_dicts
会给你不同质量的图片和 Instagram 的标题 post。
编辑 15/03 不再工作 似乎 instagram 再次更改了他们的 API,现在它给出了 CORS 错误。
截至 2021 年 2 月 2 日,我找到了解决方案
而不是使用要求登录的 https://www.instagram.com/username/?__a=1。
只需添加一个 /channel 似乎就可以了,就像这样:
我一直在使用 Instagram 的未记录 API https://www.instagram.com/<user>/?__a=1
在网站上获取 public 用户提要。一段时间以来,这不再有效,可能是因为 Facebook 删除了它。有没有其他方法可以轻松获取 Instagram 帐户的数据?
配置文件 url 的 html 响应中附加了相同的响应,我在 [=16] 中执行了此临时解决方案(当我无法使用 API 时) =]:
url_recent_media = 'https://www.instagram.com/%s/' % instagram_id
response = urllib2.urlopen(url_recent_media)
insta_html = response.read()
insta_html_split = insta_html.split('"ProfilePage":[')
if len(insta_html_split) > 1:
insta_html_split_2 = insta_html_split[1].split(']},"gatekeepers"')
if len(insta_html_split_2) > 1:
json_dict = json.loads(insta_html_split_2[0])
希望对你有所帮助。
https://www.instagram.com/<user>/
中有JSON条数据。
您可以使用正则表达式来查找您需要的内容。
样本
// This regexp gets widest possible dict around "profile_pic_url"
// but inside tag <script type="text/javascript">...</script>
let r = new RegExp('<script type="text\/javascript">' +
'([^{]+?({.*profile_pic_url.*})[^}]+?)' +
'<\/script>');
let source = document.documentElement.outerHTML;
let jsonStr = source.match(r)[2];
let data = JSON.parse(jsonStr);
console.log('data', data);
let oldVariantOfData = data['entry_data']['ProfilePage'][0];
console.log('oldVariantOfData', oldVariantOfData);
我构建了一个小型服务器来进行这种转换。您将像以前一样通过 ?__a=1(如 JSON)收到 Instagram 数据 - 玩得开心
https://www.instapi.io/u/<username>
https://www.instapi.io/u/appwithus
编辑 12/2020:很遗憾,该服务不再可用
不使用instagram也可以试试API。
import json, urllib2
img_dicts = []
url = 'https://www.instagram.com/{}/'.format(instagram_username)
try:
r = urllib2.urlopen(url, timeout=10.0)
instagram_html = r.read()
instagram_html_data = instagram_html.split('"ProfilePage":[')
if len(instagram_html_data) > 1:
instagram_html_final_data = instagram_html_data[1].split(']},"gatekeepers"')
if len(instagram_html_final_data) > 1:
json_dict = json.loads(instagram_html_final_data[0])
media = json_dict['graphql']['user']['edge_owner_to_timeline_media']['edges']
for obj in media:
img_dicts.append({
'id': obj['node']['id'],
'caption': obj['node']['edge_media_to_caption']['edges'][0]['node']['text'],
'imgurl_standard': obj['node']['display_url'],
'imgurl_lower': obj['node']['thumbnail_resources'][4]['src'],
'imgurl_thumb': obj['node']['thumbnail_resources'][3]['src']
})
img_dicts
会给你不同质量的图片和 Instagram 的标题 post。
编辑 15/03 不再工作 似乎 instagram 再次更改了他们的 API,现在它给出了 CORS 错误。
截至 2021 年 2 月 2 日,我找到了解决方案
而不是使用要求登录的 https://www.instagram.com/username/?__a=1。
只需添加一个 /channel 似乎就可以了,就像这样: