如何从Instagram API获取真实的HQ图像?

问题描述 投票:0回答:5

首先,这个主题已经存在一些问题,但没有一个问题完全掩盖了我的问题,因为它要么不是我需要的数据,要么无法正常工作。

InstaDP 等服务可以向您显示 Instagram 中任何个人资料图片的 HQ 版本。现在,我想知道这怎么可能?

我做了一些研究,在访问 https://www.instagram.com/instagramforbusiness/?__a=1 时能够找到更高质量的 URL(参见

profile_pic_url_hd
,回答此处)。然而,InstaDP 似乎有一个后端,它返回一个不同的网址,重定向到更高质量的图像:https://instadp-cors-222621.appspot.com/get-hd?id=1107766105(参见
hd_profile_pic_url_info
,我从
?__a=1
链接的结果中提取了 URL 的 ID)。我用我的个人资料对此进行了测试,并能够以 1024x1024 的出色质量获得我自己的图像。然而,
?__a=1
链接似乎只返回我的个人资料图片的320x320链接。

由于 InstaDP 似乎不是唯一能够获取总部个人资料图片的玩家,因此我继续比较了这些玩家的后端。似乎每个服务对于同一 Instagram 帐户的总部个人资料图片都有不同的 URL。所以我的结论是 Instagram API 参与了这一切。

所以我在 https://www.instagram.com/developer/ 创建了一个客户端密钥。我还能够获取我的身份验证令牌并确定我登录的

X-CSRFToken
标头的 csrftoken。现在我的问题是如何继续?

我找到了这个主题的一些答案,说明我应该请求 https://i.instagram.com/api/v1/users/1107766105/info/,但它总是以 HTML 形式返回登录页面。

我之前尝试过使用 Chrome cookie 并登录 Instagram 的 REST 客户端,我尝试将 HTTP 标头设置为

X-CSRFToken:<mycookietoken>
Content-Type:application/json
。 (如果我没有设置
CSRFToken
,它会出错,所以我需要添加它,但如果设置了标头,即使
CSRFToken
正确,我也会再次获取 HTML。当
CSRFToken
是错误的。)

我还尝试设置

Origin
Referer
Host
来欺骗 Instagram 相信请求来自其自己的窗口位置,但没有运气。设置
Host
甚至会导致 400 错误请求。即使在 URL 中添加我的访问令牌也没有效果 (
?access-token=########
)。

总结一下我的问题,这些服务如何从

cdninstagram
服务器获取高达 1024x1024 的高质量个人资料图片?

instagram instagram-api
5个回答
9
投票

虽然我迟到了,但这可能对某人有帮助:

第1步: 您需要获取高清 Instagram 个人资料图片的第一件事是他们的个人资料 ID。这可以在用户配置文件链接的源代码中找到。例如,如果您查看以下链接的来源https://www.instagram.com/abdulhaq0/并搜索“logging_page_id”,您将获得“profilePage_1285389476”。个人资料页面后面的数字是该帐户的 ID。

第2步: 接下来,您需要将 ID 放入以下 URL https://i.instagram.com/api/v1/users/{ProfileID}/info/ 并在浏览器中打开它。在我们的例子中,链接是https://i.instagram.com/api/v1/users/1285389476/info/

第3步: 现在在上面的链接上搜索“hd_profile_pic_url_info”。在那里你可以得到高清 Instagram 个人资料图片的 URL。

希望这有帮助。


5
投票

步骤:

  1. 获取 Instagram 帖子链接。例如:https://www.instagram.com/p/Bo-Jru-g7Wa/

或者如果您没有链接,instagram api 会在结果数组中为您提供一个永久链接选项,上面的链接为 Bo-Jru-g7Wa

  1. 现在只需在网址后添加 media?size=l 即可,

结果:高质量图像网址:

https://www.instagram.com/p/Bo-Jru-g7Wa/media?size=l

这个链接可以被视为 Instagram 图像 URL 的速记代码,它要大得多


2
投票

我相信像 https://instadp.site/ 这样显示高分辨率用户个人资料图像的网站不使用官方 Instagram API。

过去可以破解 Instagram 的 CDN URL 来更改参数并从中获取高分辨率,但现在 URL 已签名,如果更改任何参数,URL 将失败。

因此,他们可能使用的唯一解决方案是模拟客户端。有一个流行的 PHP 客户端:https://github.com/mgp25/Instagram-API


0
投票

Instagram API 已更新。现在我们只能得到 320x320 大小的图像

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

即使您从此端点获取用户 ID,“用户信息”端点也不会在其响应中返回 hd url,并且现在也应该传递标头。

import requests
def get_user_by_user_id(user_id):
    if user_id:
        base_url = "https://i.instagram.com/api/v1/users/{}/info/"
        headers = {
            'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 105.0.0.11.118 (iPhone11,8; iOS 12_3_1; en_US; en-US; scale=2.00; 828x1792; 165586599)'
        }
        try:
            res       = requests.get(base_url.format(user_id),headers=headers)
            print(res.json())
        except Exception as e:
            print("getting user failed, due to '{}'".format(e.message))

get_user_by_user_id(userid)

您可以检查此代码并尝试。像 instadp 这样的网站我猜他们不使用 instagram 的官方 API


0
投票

获取高清 (1080x1080) 个人资料图片的最简单、最可靠的方法是 Instaloader CLI。

instaloader USERNAME_OF_INTEREST --no-posts --login YOUR_USERNAME
© www.soinside.com 2019 - 2024. All rights reserved.