Instagram ?__a=1 查询:为啥我得到登录页面而不是 JSON?
Posted
技术标签:
【中文标题】Instagram ?__a=1 查询:为啥我得到登录页面而不是 JSON?【英文标题】:Instagram ?__a=1 query: Why do I get login page instead of JSON?Instagram ?__a=1 查询:为什么我得到登录页面而不是 JSON? 【发布时间】:2020-09-23 04:50:07 【问题描述】:这是一个返回 Instagram 用户数据 JSON 的示例 url:https://www.instagram.com/therock/?__a=1
它会像这样返回 JSON:
"logging_page_id":"profilePage_232192182",
"show_suggested_profiles":true,
"show_follow_dialog":false,
"graphql":
"user":
"biography":"founder",
"blocked_by_viewer":false,
"business_email":null,
"restricted_by_viewer":false,
"country_block":false,
"external_url":"https://projectrock.online/7ad",
"external_url_linkshimmed":"https://l.instagram.com/?u=https%3A%2F%2Fprojectrock.online%2F7ad&e=ATMKh6M0eOgq-_jVoR3-xJ0Q2wwVSenYemMoYM0A0nWrW9Y5P7mDXX1dkk2dDLidhEuV1Wees7Z3teLJqp7vB2k&s=1",
"edge_followed_by":
"count":199139001
,
"followed_by_viewer":false,
"edge_follow":
"count":406
,
"follows_viewer":false,
"full_name":"therock",
"has_ar_effects":false
我正在开发一个 ASP.NET Core API,并且有一个接收 instagram 句柄并解析 JSON 的端点。它在本地运行良好,但是当我在 Azure 部署的 API 上点击相同的端点时,我得到了登录页面:
<!DOCTYPE html>
<html lang="en" class="no-js not-logged-in client-root">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
Login • Instagram
</title>
<meta name="robots" content="noimageindex, noarchive">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#ffffff">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, viewport-fit=cover">
<link rel="manifest" href="/data/manifest.json">
我尝试使用第三方浏览器即服务 (PhantomJsCloud),但返回相同的登录页面。我以为这是 CORS 策略,但修复它不起作用,并且还设置了返回的 cookie,但无济于事。我真的迷路了,如果有人能指出为什么会发生这种情况,我将非常感激。谢谢!
【问题讨论】:
你有想过这个吗? 【参考方案1】:可能 instagram 不希望您这样获取它,并且有一些机制可以识别您的请求是以编程方式完成的。我假设当您在浏览器中调用它时它正在工作。您可以尝试使用 cypress 或 puppeteer 使其仍然可以工作,或者可能使用带有令牌等的官方 api。
编辑: 好吧..我玩了一下,可以让它以某种方式工作,但不确定这有多可靠:
首先我从以下内容开始:https://codelike.pro/fetch-instagram-posts-from-profile-without-__a-parameter/ 在解析 JSON 对象后,我搜索了entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.page_info.end_cursor
--> 使用 end_cursor 进行以下请求:
https://www.instagram.com/graphql/query/?query_id=17888483320059182&id=928659671&first=100&after= 您需要将 end_cursor 用于 &after 查询参数。 query_id
是instagram账号的Media,id
是instagram账号的id(可以从parsedObject中获取instagram账号的id
)
query_id
是来自 instagram 的某种硬编码,其他 id 可以在这里找到:https://gist.github.com/Carlos-Henreis/2df27431fa5d7a84b7a5e57ee1bf6ae2#file-query_id-csv
编辑 2: 意识到这只会在你的 ip 也没有被 instagram 检测到或者你发送一个登录会话的 cookie 时才有效,否则你不会得到 ProfilePage 而是一个 LoginAndSignupPage 不幸的是
有关更多信息,请参阅此处:https://***.com/a/57722553/5195852
【讨论】:
以上是关于Instagram ?__a=1 查询:为啥我得到登录页面而不是 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
Instagram 公共 API (/?__a=1) 有效,但仅在某些时候有效
调用 Instagram 'www.instagram.com/explore/tags/tag/?__a=1' 返回 Instagram 登录页面