如何从Instagram API获取真实的总部图片?

时间:2019-01-21 16:00:09

标签: instagram instagram-api

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

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

我进行了一些研究,并能够在访问https://www.instagram.com/instagramforbusiness/?__a=1时找到更高质量的URL(请参阅profile_pic_url_hd,已回答here)。但是,InstaDP似乎有一个返回不同URL的后端,该URL重定向到高质量图像:https://instadp-cors-222621.appspot.com/get-hd?id=1107766105(请参阅hd_profile_pic_url_info,我从{{ 1}}链接)。我使用个人资料对此进行了测试,并能够以1024x1024的出色质量获得自己的图像。但是,?__a=1链接似乎只返回了我的个人资料图片(320x320)的链接。

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

因此,我在https://www.instagram.com/developer/创建了一个客户端密钥。我还能够获取我的身份验证令牌并确定?__a=1头的登录csrftoken。现在我的问题是如何继续?

我找到了关于此主题的一些答案,指出我应该请求https://i.instagram.com/api/v1/users/1107766105/info/,但是它始终以HTML形式返回登录页面。

我尝试过使用Chrome cookie的REST客户端并登录到Instagram,然后尝试将HTTP标头设置为X-CSRFTokenX-CSRFToken:<mycookietoken>。 (如果我没有设置Content-Type:application/json,则会出错,因此我需要添加它,但是如果设置了标头,即使CSRFToken是正确的,我也会再次获取HTML。我不会CSRFToken错误时收到错误消息。)

我还尝试设置CSRFTokenOriginReferer来欺骗Instagram,因为它认为请求来自其自己的窗口位置,没有运气。设置Host甚至会导致400错误的请求。甚至在URL中添加我的访问令牌都无效(Host)。

总而言之,这些服务如何从?access-token=########服务器以高达1024x1024的高质量来获取个人资料图片?

4 个答案:

答案 0 :(得分:3)

虽然我来晚了,但这可能对某人有所帮助:

步骤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”。在那里,您可以获取HD Instagram个人资料图片的URL。

希望这会有所帮助。

答案 1 :(得分:1)

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

过去,可以入侵Instagram的CDN URL来更改参数并从中获取高分辨率,但如今URL已签名,如果您更改任何参数,URL将会失败。

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

答案 2 :(得分:0)

步骤: 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图片网址的简写代码,该网址更大得多

答案 3 :(得分:0)

Instagram API 已更新。现在我们将只得到 320x320 大小的图像 https://www.instagram.com/{username}/?__a=1

即使您从该端点获取用户 ID,“用户信息”端点也不会在其响应中返回高清 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

相关问题