Instagram?__ a = 1 url不再工作&graphql/query的问题来获取数据

Pab*_*blo 25 javascript instagram instagram-api

4月19日更新

两天前使用cookie ig_pr几天后就是块了.看起来现在获取数据的唯一方法是使用sessionid特定值

原版的

我使用Instagram?__ a = 1 url来阅读Instagram用户的所有帖子.

几个小时前,响应发生了变化,现在不允许我使用max_id分页.

在我经常发送请求之前

https://www.instagram.com/{{username}}/?__a=1

graphql.edge_owner_to_timeline_media.page_info.end_cursor在响应中使用新的max_id调用同一页面

https://www.instagram.com/{{username}}/?__a=1&max_id={{end_cursor}}

现在end_cursor每个call&max_id 的更改都不起作用.

请帮忙 :)

小智 26

我通过添加修复了它&__d=dis。例如像这样https://www.instagram.com/p/Ch656GRoyuO/?__a=1&__d=dis

  • https://www.instagram.com/p/Ch656GRoyuO/?__a=1&__d=dis { "message": "请稍等几分钟再试。", "require_login": true, "status": "fail" } (6认同)

Mat*_*ttF 20

编辑 15/03 不再 工作 似乎 instagram 再次更改了他们的 API,现在它给出了 CORS 错误。

截至 2021 年 2 月 2 日,我找到了解决方案

而不是使用 要求登录的https://www.instagram.com/username/?__a=1

只是添加一个 /channel 似乎可以使它工作,如下所示:

https://www.instagram.com/username/channel/?__a=1

  • 这个解决方案对您仍然有效吗?我还在 /username/channel 端点上收到 CORS 错误 (3认同)
  • 截至 2-3 天前,CORS 问题正在被触发。我可以从本地系统上的节点环境执行该查询,但是当我使用 lamda 函数时,我认为它试图将我重定向到登录页面,从而导致无效的 JSON 响应。 (2认同)
  • 我希望他们仍然有这个活动:(你们找到任何解决方法了吗? (2认同)

Fel*_* Ng 18

query_hash至少在过去几天内没有变化.它表明它是什么类型的查询.

下面列出了我认识的4种查询类型,希望这些有用.

https://www.instagram.com/someone/?__a=1下加载更多媒体

https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables={"id":"93024","first":12,"after":"XXXXXXXX"}
Run Code Online (Sandbox Code Playgroud)

(Instagram在2018-04-12之后阻止了上述访问.你必须删除__a = 1并在块中提取JSON.在HTML中查找"window._sharedData")

https://www.instagram.com/explore/tags/iphone/?__a=1下加载更多媒体

https://www.instagram.com/graphql/query/?query_hash=298b92c8d7cad703f7565aa892ede943&variables={"tag_name":"iphone","first":12,"after":"XXXXXXXX"}
Run Code Online (Sandbox Code Playgroud)

https://www.instagram.com/explore/locations/703629436462521/?__a=1下加载更多媒体

https://www.instagram.com/graphql/query/?query_hash=ac38b90f0f3981c42092016a37c59bf7&variables={"id":"703629436462521","first":12,"after":"XXXXXXXX"}
Run Code Online (Sandbox Code Playgroud)

https://www.instagram.com/p/Bf-I2P6grhd/加载更多评论

https://www.instagram.com/graphql/query/?query_hash=33ba35852cb50da46f5b5e889df7d159&variables={"shortcode":"Bf-I2P6grhd","first":20,"after":"XXXXXXXX"}
Run Code Online (Sandbox Code Playgroud)

其中XXXXXXXX是原始请求的end_cursor


Dan*_*hoi 11

我刚刚遇到同样的问题.

看起来他们只是通过删除max_id来改变他们的私人api .他们的网站似乎用graphql api取代了旧的api.

https://www.instagram.com/graphql/query/?query_hash=472f257a40c653c64c666ce877d59d2b&variables= {"id":"111","first":12,"after":"xxx"}

  • id:用户ID,
  • 第一:要获得的节点数量,
  • 之后:'end_cursor'你可以从data ['user'] ['edge_owner_to_timeline_media'] ['page_info'] ['end_cursor']获得

使用query_hash或query_id

  • query_hash:472f257a40c653c64c666ce877d59d2b
  • query_id:17888483320059182

我不知道query_id/query_hash会工作多久,这取决于Instagram.他们最终会改变它.

更新于4/8/2018 - 在FB没有检查任何cookie之前,但看起来他们添加了快速验证.ig_pr=2在发送API时,请尝试添加到请求Cookie.这个快速修复对我有用.谁知道FB什么时候会改变它.

只要FB不强制登录这些基本API,就会有一个简单的解决方法.

  • @Pablo我已经更新了上面的快速修复.发送请求时,将"ig_pr = 2"添加到请求cookie.我有一种感觉,这将是一场猫捉老鼠的游戏. (2认同)

Pab*_*blo 7

使用图形/查询的主要问题是我只有用户名,提取userId和我们使用的最后一个帖子?__ a = 1我们必须得到Instagram的用户页面并提取_sharedData

使用Javascript

let url = "https://www.instagram.com/"+username;
$.ajax({
    type: 'GET',
    url: url,
    error: function () {
        //..
    },
    success: function (data) {
        data = JSON.parse(data.split("window._sharedData = ")[1].split(";</script>")[0]).entry_data.ProfilePage[0].graphql;
        console.log(data);
    }
})
Run Code Online (Sandbox Code Playgroud)

获得所有这些数据后,我们可以调用图形/查询(不在客户端)


Zer*_*x18 6

将一些人的代码翻译成PHP:

<?php
function getPublicInfo($username) {
    $url     = sprintf("https://www.instagram.com/$username");
    $content = file_get_contents($url);
    $content = explode("window._sharedData = ", $content)[1];
    $content = explode(";</script>", $content)[0];
    $data    = json_decode($content, true);
    return $data['entry_data']['ProfilePage'][0];
}
Run Code Online (Sandbox Code Playgroud)

不确定它会工作多久.对于我的小项目,它现在可以完成这项工作.结果与URL上的结果非常相似(如果不相等):instagram.com/{user}/?__a=1


小智 6

自 2021 年 5 月 21 日起,使用 /channel 将使其正常工作,但前提是在您的请求中使用浏览器 User-Agent 标头,例如使用curl:

curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" https://www.instagram.com/{username}/channel/?__a=1


Igo*_*cik 5

对于分页,您现在可以使用 ?__a=1&page=2

  • @Moondra 我只是在开发工具中研究网络请求。 (2认同)