我的一位朋友决定在Instagram上进行抽奖活动,而没有过多考虑如何获得喜欢帖子的完整用户列表。他说他可以从可用/可见列表中选择一个随机用户,但这不公平,所以我决定介入。
这个帖子目前有1.4k喜欢。
首先,我在JS中创建了一个小脚本来查看,向下滚动(填充列表)并最终获得喜欢该帖子的用户。创建这很麻烦,但它确实有效。然后我意识到我无法查看所有用户。虽然有1.4万用户,但我只能列出其中的675个。
以公平的名义,这还不够。所以我开始挖掘更多,并检查(Instagram)帖子页面发布到Instagram Graph API的HTTP请求,以加载更多用户。这就是URL的样子:
https://www.instagram.com/graphql/query/?query_id=SOME_ID&variables={\"shortcode\":\"SHORTCODE\",\"first\":20}
当我向此网址发出请求时,我会收到以下信息:
{
"data": {
"shortcode_media": {
"id": "SOME_ID",
"shortcode": "SHORTCODE",
"edge_liked_by": {
"count": 675,
"page_info": {
"has_next_page": false,
"end_cursor": "AQBPkM1xm2XgBx8ZQ8lR6GDsFAvQBx_Eqxg2NnTXN-GUPGhlpUa9_10UoMcJ6xNcIH4"
},
"edges": [{
"node": {
"id": "", // value omitted intentionally
"username": "", // value omitted intentionally
"full_name": "", // value omitted intentionally
"profile_pic_url": "", // value omitted intentionally
"is_verified": false,
"followed_by_viewer": false,
"requested_by_viewer": false
}
},
...
这个["edge_liked_by"]["count"]
属性设置为675
。我猜这是服务器端的限制。当我在URL中增加"first"
参数并使其大于675时,它仍会返回675个用户。
我可以克服这个限制并以任何方式获得完整列表吗?
更新:我刚刚对评论做过同样的尝试。该帖子有11.8k评论,这是请求返回的内容:
{
"data": {
"shortcode_media": {
"edge_media_to_comment": {
"count": 11809,
"page_info": {
"has_next_page": true,
"end_cursor": "AQBV53OxNFkaHwJ6xjgHmlI-hwtpHCEeButMmGLwZJ_sjdyUy49gY_WZo1iH_aRcuAFOCzfrKPEktMaQLRjFVAsmQTincJpr4ZTITbTT1BZkJQ"
},
"edges": [{
"node": {
"id": "",
"text": "",
"created_at": ,
"owner": {
"id": "",
"profile_pic_url": "",
"username": ""
}
}
},
...
评论的确切数量为11809
,请求首先列出10259
,但还有下一页。所以我要求下一页,就是这样:
{
"data": {
"shortcode_media": {
"edge_media_to_comment": {
"count": 11809,
"page_info": {
"has_next_page": false,
"end_cursor": null
},
"edges": [{
"node": {
"id": "",
"text": "",
"created_at": ,
"owner": {
"id": "",
"profile_pic_url": "",
"username": ""
}
}
},
...
这次它没有返回剩余的1550(11809 - 10259)用户,但只有356个用户。并且没有下一页。所以似乎存在一些不一致之处。 (也许,有一个隐私问题阻止某些用户被列出?)