【发布时间】:2020-05-22 08:37:20
【问题描述】:
我正在尝试获取 Instagram 帖子的 json。获取数据的url:
$url = "https://www.instagram.com/p/" . $_GET['media'] . "/?__a=1";
当我在浏览器中得到这个 url - 一切正常,json 返回。顺便说一句,浏览器未登录 instagram。但是当我使用 curl 或 file_get_contents($url); 时,它会将带有标题“位置”的 http 代码 302 返回到登录页面。
代码示例:
$url = "https://www.instagram.com/p/" . $_GET['media'] . "/?__a=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json') );
$data = curl_exec($ch);
curl_close($ch);
var_dump($data);
也许 curl 选项应该修改为看起来像浏览器。
更新
我尝试了与浏览器中相同的标题,包括 cookie,但没有运气,这似乎是不可能的。我已经使用这个 hack 编写了页面,最近停止工作。使用 API 意味着重写一切,因为响应的数据不同。
【问题讨论】:
-
您应该改用instagram API。他们专门为开发人员开发了它,以便能够与他们的服务进行交互。你这样做的方式很老套(甚至可能违反他们的服务条款)。在 API 保持不变的情况下,对其 UI/URL 和您的代码的任何更改都可能会中断。
-
你最好使用他们的 API,而不是用你自己的方式破解它
-
@MagnusEriksson 这只是昨天的一个问题。它以前工作过。不幸的是,我也需要一个不使用 API 的解决方案,所以我对解决方案非常感兴趣!
-
“这只是昨天的一个问题。它以前工作过。” - 这正是您应该使用 API 的原因。该站点可以随时更改而不会发出任何警告,这意味着您将需要不断地“修复”您的代码。这很可能也违反了他们的服务条款。
标签: php curl instagram-api