1080x1080 照片通过 Instagram API

Posted

技术标签:

【中文标题】1080x1080 照片通过 Instagram API【英文标题】:1080x1080 photos via Instagram API 【发布时间】:2015-09-26 23:05:44 【问题描述】:

http://www.theverge.com/2015/7/6/8899807/instagram-1080p-pictures-photo-upload

The Verge 最近宣布,Instagram 的最新应用版本正在上传 1080x1080 分辨率的照片。浏览网站的源代码时,可以通过 html 轻松获取这些照片。这些可以通过官方 Instagram API 访问吗?如果有,怎么做?

【问题讨论】:

为什么这会遭到反对? 亚当暂时请考虑将@sebastien.b 的答案标记为正确的答案。 对于阅读以下 cmets 的任何人:请注意,1080 版本通常不是可用的最大版本。无论出于何种原因,IG 似乎只为他们的应用程序提供更大的版本。 【参考方案1】:

[更新] 2018 年 3 月 23 日之后

我使用了 Ekrem Gurdal 的答案使其工作:

IG API 为您提供“链接”属性,例如https://www.instagram.com/p/BTduOwSAwN6/

然后你可以附加 ?__a=1 到这个例如https://www.instagram.com/p/BTduOwSAwN6/?__a=1

您可以从存储高分辨率照片的json结果中提取:graphsql.shortcode_media.display_url

例如https://instagram.fmnl2-1.fna.fbcdn.net/vp/f8f54b9fcb2bca69d7c73d9ffb232d64/5C324A1C/t51.2885-15/e35/18161146_397673830625587_2385146908864675840_n.jpg

希望这会有所帮助。也许 IG 人将来也会找到一种方法来禁用它。为什么他们不只是在 API 响应中包含高分辨率照片,smh

[更新] 自 2018 年 3 月 23 日起,以下解决方法不再有效。

只是为了更新在 2018 年查看此内容的任何人。对我有用的解决方案是在将分辨率替换为 1080x1080 的基础上删除“vp/”。

例如

https://scontent.cdninstagram.com/vp/41d5aee08758061976d26e48f45e673a/5ADA338E/t51.2885-15/s320x320/e35/20065394_1785212551507111_5192354829363576832_n.jpg

https://scontent.cdninstagram.com/41d5aee08758061976d26e48f45e673a/5ADA338E/t51.2885-15/s1080x1080/e35/20065394_1785212551507111_5192354829363576832_n.jpg

【讨论】:

谢谢曼尼,你救了我的命 8-) 好吧,只是暂时 - 现在我们得到了 400 个尝试使用此解决方法...感谢 Instagram/Facebook 的每个人,感谢您提供不稳定、不受支持和无用限制的 API,您让我的生活如此难忘:-/ 这个也打了补丁,现在返回“拒绝访问”。 更新的答案在 3 月 23 日之前的解决方法停止工作时有效 投反对票。自 2019 年 3 月起不再有效,您会收到“URL 格式不匹配”​​错误。【参考方案2】:

不知道您为什么会被否决,但不,API 目前没有返回该解决方案。但是,它可以从 API 返回的其他分辨率中“猜测”出来,但这可能随时发生变化。例如,给定标准分辨率 JSON:

  "standard_resolution": 
    "url": "https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/s640x640/e35/sh0.08/11370971_837216559694773_771634899_n.jpg",
    "width": 640,
    "height": 640
  

删除大小部分(此处为s640x640)和随后的两个路径(此图片为e35/sh0.08,可能与您的不同)以得到1080x1080 的URL:

    https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/11370971_837216559694773_771634899_n.jpg

自从在我的帐户上激活该解决方案以来,这一直有效。但同样,我只会等待 API。

【讨论】:

确实,这会导致 Instagram 返回“无效的 URL 签名”403 HTTP 错误 @dstj 你找到解决方法了吗?注意到它也停止了对我的工作。 投反对票。自 2019 年 3 月起不起作用,您会收到“URL 格式不匹配”​​。【参考方案3】:

自 2018 年 3 月 26 日起,Instagram 更改了链接。 这是从 API 获取 1080x1080 分辨率图像的有效解决方案。

    https://www.instagram.com/username/?__a=1获取user_Id。

    将user_id粘贴到此链接https://i.instagram.com/api/v1/users/user_id/info/

    hd_profile_pic_url_info 获取高清网址链接。 :)

【讨论】:

您使用的是 IG API 吗?因为我在他们的 API 响应中找不到 HQ 链接。 @user1945821 - 只需从第一个链接复制 user_id 并将其粘贴到第二个链接中。在第二个链接的 api 响应中,您可以获取与个人资料图片相关的所有链接。 哈哈好吧,我在寻找用户的媒体(图片)而不是个人资料图片。它们只返回缩略图、低分辨率、标准分辨率。没有高清或任何高分辨率 第二个链接坏了,它重定向到 Instagram 的登录页面,而不是返回 JSON。为什么? 赞成。截至 2019 年 3 月 27 日,这是唯一对我有用的解决方案。所有其他人都给我“拒绝访问”或“网址结构不匹配”。【参考方案4】:

我注意到,只要去掉 size 部分,就会返回最大的图像:

https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/s640x640/e35/sh0.08/11370971_837216559694773_771634899_n.jpg

https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/e35/sh0.08/11370971_837216559694773_771634899_n.jpg

因此这应该可以解决问题:

var hightUrl = data.images.standard_resolution.url.replace("/s640x640/","/");

【讨论】:

"URL 签名过期" - 这个也不错!! :| 不确定 SO 策略是否不再删除有效响应。【参考方案5】:

如果可用,您可以使用此 url 获取 1080p 图像:

https://www.instagram.com/p/['IMAGE-CODE']/?__a=1

【讨论】:

我们从哪里得到 IMAGE-CODE ? 这是简码,但是如果您只有访问令牌,这不适用于私有图像。我似乎无法让它不响应 404。 @AshokDevatwal 我的意思是帖子的链接。这是我的帖子的json:instagram.com/p/BhWLTrklsfH/?__a=1你可以在第29行找到1080p图片的链接。 2021年这个还在,第三张好像是上传的原图。【参考方案6】:

instagram 图片 URL 的问题是 json 响应中提供的 URL 签名会在一段时间后过期。我对这个问题的解决方法如下:

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

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

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

结果:高质量图片网址:

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

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

这个链接可以被认为是 Instagram 图片 URL 的速记代码,它非常大。支持的尺寸值为 t(缩略图)、m(中)、l(大)。默认为 m。

【讨论】:

media?size=l 将是最大 1080 版本,即使存在更大的版本。 是的,我认为这对于大多数用例来说已经足够了。如果您使用上述解决方案,您也不必每隔几个小时重新创建一次图片网址(fb 每 24 到 72 小时重新创建一次十六进制代码)。【参考方案7】:

自 2018 年 3 月 20 日起生效。

删除 vp 和 size 部分。 所以如果我们有一张 150x150 的图片here

https://scontent.cdninstagram.com/vp/6f28b299faab04675a936073c94d0fde/5B2E3498/t51.2885-15/s150x150/e35/c135.0.810.810/28152308_875888592619569_7505395194448052224_n.jpg

去掉/vp和/s150x150得到

https://scontent.cdninstagram.com/6f28b299faab04675a936073c94d0fde/5B2E3498/t51.2885-15/e35/c135.0.810.810/28152308_875888592619569_7505395194448052224_n.jpg

我们可以得到 1080 的图像 here

你甚至可以只留下最后两段

https://scontent.cdninstagram.com/e35/28152308_875888592619569_7505395194448052224_n.jpg

可以看到here

希望对你有帮助

【讨论】:

【参考方案8】:

这对我今天(2018 年 8 月 15 日)大多数公开图像有用。我认为,因为人们使用不同的应用程序上传图片,API 可能会显示不同的大小,但链接是相同的默认分辨率文件。

    进入用户页面:https://www.instagram.com/username 点击你想要的图片,网址栏会变成:https://www.instagram.com/p/image-code/?taken-by=username 从网址复制image-code 转至:https://www.instagram.com/p/image-code/?__a=1 扫描 JSON 文件(启用JSON viewer extension 会有所帮助)并单击最高分辨率的图像进行下载。例如:

【讨论】:

它还在工作吗?我想获得 hd_profile_pic_url_info。有没有可能? @Awadesh 是的,我上周才用过。 实际上我想在服务器端为我的 android 应用程序获取这些数据。我没有用户可以点击图片的平台。能否请您提出一些建议【参考方案9】:

我不确定是否可以获得 1080p 分辨率的图像。但这是获取320x320 分辨率图像的一种方法。

1) 在以下 URL 中输入用户的username。这里我使用simonsterstrength 作为用户名。 https://www.instagram.com/simonsterstrength/?__a=1

2)搜索"profile_pic_url_hd",复制网址,访问IG称之为高清的图片。


注意:截至 2020 年 6 月,IG CDN 的响应正常。

【讨论】:

【参考方案10】:

你收到了

"standard_resolution": 
    "url": "https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/s640x640/e35/sh0.08/11370971_837216559694773_771634899_n.jpg",
    "width": 640,
    "height": 640
  

可以将s640x640 替换为s1080x10802048x2048。此请求均返回分辨率为 1080x1080

的图像
var hightUrl = data.images.standard_resolution.url.replace("s640x640","s1080x1080");

【讨论】:

很好地使用我自己的示例代码来编写基本相同的答案:) 这不是同一个答案...两者都返回不同的图像。 sebastien.b 示例中的一个返回真实的 1080 分辨率图片(如果可用)。 Dmitry 的答案返回了 640x640 图像的放大版本。这个更大,几乎 100KB,质量明显低于原来的 1080。

以上是关于1080x1080 照片通过 Instagram API的主要内容,如果未能解决你的问题,请参考以下文章

Instagram:从网页分享照片

从 Instagram 获取大缩略图照片不再使用“替换”

将照片上传到 Instagram 后,控制权不会返回到应用程序

Instagram 旋转照片标题未显示

如何在 Instagram 照片 URL 中获取大照片

如何获取用户的 Instagram 提要