【问题标题】:How to get the real HQ image from the Instagram API?如何从 Instagram API 获取真实的总部图像?
【发布时间】:2019-06-15 01:21:57
【问题描述】:

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

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

我进行了一些研究,并在访问https://www.instagram.com/instagramforbusiness/?__a=1 时找到了更高质量的 URL(见profile_pic_url_hd,回答here)。然而,InstaDP 似乎有一个后端,它返回一个不同的 url,重定向到更高质量的图像: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 它会出错,所以我需要添加它,但是如果设置了标题,我会再次获得 HTML,即使 CSRFToken 是正确的。当我没有收到错误时CSRFToken 是错误的。)

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

总结一下我的问题,这些服务是如何从cdninstagram 服务器获得如此高质量、高达 1024x1024 的个人资料图片的?

【问题讨论】:

  • 你找到解决办法了吗?
  • 找到解决办法了吗?

标签: instagram instagram-api


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

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

    结果:高质量图片网址:

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

    你可以在这里看到它的实际效果:https://jsfiddle.net/nmj1z7wo/fiddle URL

    这个链接可以看作是 Instagram 图片 URL 的速记代码,它要大得多

    【讨论】:

    • 对不起,你误解了我的问题。我不想要帖子中的总部图片,我想要个人资料图片的总部图片。
    【解决方案3】:

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

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

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

    【讨论】:

    • 正如您所说,此类网站不使用官方 Instagram API,他们如何设法找到并访问 Instagram 的非官方 API?
    【解决方案4】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多