首先,该主题已经存在问题,但是没有一个问题能完全掩盖我的问题,因为这不是我需要的数据,或者是无法正常工作。
诸如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-CSRFToken
和X-CSRFToken:<mycookietoken>
。 (如果我没有设置Content-Type:application/json
,则会出错,因此我需要添加它,但是如果设置了标头,即使CSRFToken
是正确的,我也会再次获取HTML。我不会CSRFToken
错误时收到错误消息。)
我还尝试设置CSRFToken
,Origin
和Referer
来欺骗Instagram,因为它认为请求来自其自己的窗口位置,没有运气。设置Host
甚至会导致400错误的请求。甚至在URL中添加我的访问令牌都无效(Host
)。
总而言之,这些服务如何从?access-token=########
服务器以高达1024x1024的高质量来获取个人资料图片?
答案 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
结果:高质量的图片网址:
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