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 登录页面

为啥我无法在 prolog 中得到斑马谜题的答案?

为啥它不会将_keys 发送到评论框?

使用 axios 提取 instagram 数据并且 ?__a=1 半天后被阻止(1 个请求/分钟)

Instagram ?__a=1&max_id=<end_cursor> 不适用于公共用户提要