几个月前,Instagram开始通过删除大多数功能并拒绝接受大多数权限范围的新应用程序来使其公共API无法运行.本周进行了进一步的修改,进一步限制了开发商的选择.
我们中的许多人已转向使用Instagram的私有Web API来实现我们以前的功能.一个突出的ping/instagram_private_api设法重建大部分先前的功能,但是,随着本周公开宣布的更改,Instagram也对其私有API进行了基础更改,需要魔术变量,用户代理和MD5哈希来进行网络抓取请求可能.这可以通过跟踪先前链接的git存储库上的最新版本来看到,并且可以在此处看到继续获取数据所需的确切更改.
这些变化包括:
https://instagram.com/
获取rhx_gis
魔术密钥.X-Instagram-GIS
标头,它是通过rhx_gis
在传递MD5哈希之前神奇地连接键和查询变量而形成的.任何小于此值都会导致403错误.这些更改已在上述存储库中成功实现,但是,我在JS中的尝试仍然失败.在下面的代码中,我试图从用户时间轴中获取前9个帖子.确定这个的查询参数是:
query_hash
的42323d64886122307be10013ad2dcc44
(取从用户的时间轴媒体).variables.id
任何用户ID作为字符串(从中获取媒体的用户).variables.first
,要获取的帖子数,作为整数.以前,https://www.instagram.com/graphql/query/?query_hash=42323d64886122307be10013ad2dcc44&variables=%7B%22id%22%3A%225380311726%22%2C%22first%22%3A1%7D
由于URL不受保护,因此可以通过简单地从GET中获取此请求而无需任何上述更改.
但是,我尝试实现在上述存储库中成功编写的功能不起作用,我只收到来自Instagram的403个回复.我在节点环境中使用superagent作为我的请求库.
/*
** Retrieve an arbitrary cookie value by a given key.
*/
const getCookieValueFromKey = function(key, cookies) {
const cookie = cookies.find(c => c.indexOf(key) !== -1);
if (!cookie) {
throw new Error('No key found.');
}
return (RegExp(key + '=(.*?);', 'g').exec(cookie))[1];
};
/* …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,即我的Instagram API访问令牌经常过期而且我更新文档并理解虽然令牌不会一般到期,但Instagram可能会出于任何安全原因或任何原因决定随时使令牌到期.
我知道当它到期时,我需要建立一个身份验证过程并请求一个新的令牌和所有这些东西.但问题是我的应用程序只是检索我自己的Feed以在我自己的网站上显示,一旦令牌过期,设置这样的过程没有意义,我唯一能做的就是手动检索和更新我的代码中的令牌.
所以我想知道是否还有一种方法可以在不使用访问令牌的情况下获取提要,因为我只是提取自己的提要.或者还有其他方法可以解决这个问题吗?
谢谢你的帮助.
我一直在使用Instagram的未记录的API https://www.instagram.com/<user>/?__a=1
来获取网站上的公共用户Feed.一段时间以来,这已不再适用,可能是因为Facebook删除了它.还有其他方法可以轻松获取instagram帐户的数据吗?
我想显示Instagram中与特定主题标签相关的公共内容(一切正常)但我无法在access_token
每次过期时续订.
("不要认为你的access_token永远有效." - https://www.instagram.com/developer/authentication/)
手动更新它不是一个选项,我必须确保access_token
在任何时候有效,无需重新验证.
有什么想法或问题吗?:)
我希望我的应用程序查询带有特定主题标签的 Instagram 帖子。看起来这可以用@mentions 来完成,但不要用#hashtags 来完成。我错过了什么吗?我不确定我是想获取所有带有主题标签的帖子,还是只是通过身份验证的用户发布带有该主题标签的帖子。但是当有人用这个#hashtag 发帖时,我需要得到新的帖子。有没有办法用 Instagram API 做到这一点?
我想我的计划 B 可能是创建一个 instagram 用户并让人们 @mention 用户而不是使用主题标签。然后我的应用程序可以作为该用户进行身份验证并进行定期轮询。
最近,我想到了从instagram帐户及其帖子中抓取信息的想法,例如评论数量或喜欢数量。到目前为止,我发现在chrome中调试时发现,例如“网络”标签下的链接https://www.instagram.com/instagram/?__a返回包含所需信息的JSON,但实际加载的内容仍然是普通的网站html代码。
到目前为止,我在python中使用以下代码尝试过:
import urllib.request
r = urllib.request.urlopen(url)
print(r.read())
Run Code Online (Sandbox Code Playgroud)
或在javascript中:
window.onload = function () {
res = fetch("https://www.instagram.com/instagram/?__a", {
method: 'get'
}).then(function (data) {
return data.json();
}).catch(function (error) {
console.log("ERROR".concat(error.toString()));
});
console.log(res.user);
};
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,当使用这些功能时,我仅获取网站代码(html),有没有办法仅获取后台加载的JSON?我知道人们会使用instagram api推荐我,但是我没有网站或公司要注册。
instagram ×5
access-token ×2
javascript ×2
api ×1
json ×1
oauth-2.0 ×1
python ×1
web-scraping ×1