Instagram/feed API的媒体网址显示“URL签名已过期”

31
我正在使用 Instagram feed API 在我的网站上展示我的 Instagram 帖子。但是一些视频 URL 显示“URL 签名已过期”。 有什么解决办法吗?
4个回答

28
您可以使用带有额外参数的媒体URL作为解决方案,以获取所需的图像,而不是使用直接的图像链接。
例如:
https://www.instagram.com/p/Bo7OXJ3hYM8/media/?size=m

请注意附加组件/media/?size=m

字母可以是tml,代表不同的图片尺寸

这将返回您想要的图像

参考:https://www.instagram.com/developer/embedding/


1
这仅适用于图像,而不适用于卷轴/视频。有任何解决方案吗? - Praful Bagai
在多图发布中,我们如何指定我们想要的图片? - undefined

18

Instagram已经为他们的媒体URL添加了URL签名。

您可以使用这个正则表达式轻松删除URL签名:"vp.*/.{32}/.{8}/"

例如在PHP中:

preg_replace('/vp.*\/.{32}\/.{8}\//', '', $mediaUrl)
另一方面,我认为删除URL签名并不是最好的解决方法(只是一个快速修复)。更好的方法是再次调用Instagram API以获取新的URL。

更新

目前Instagram正在检查URL签名,如果未出现签名,则返回403“访问被拒绝”错误,因此现在唯一的解决方法是再次调用Instagram API以获取新的媒体URL。

更新于2018年4月

Instagram已关闭其“api.instagram.com/v1/media/”端点,因此目前无法更新帖子的URL。

一种可能的解决方案是下载媒体并将其存储在自己的服务器上(我不建议这种解决方案,因为它违反了Instagram API的条款,所以请自行承担风险)。

另一种解决方案是重新调用您找到媒体的原始端点(但目前使用新的API速率限制难以管理呼叫)。

此外,您可以在github上找到一些非官方的Instagram API,这可能会对您有所帮助。


你知道他们最初使用URL签名的动机是什么吗?如果我们在没有签名的情况下获取媒体会发生什么,我很好奇。 - zaboco
1
@zaboco 可能他们不希望应用程序存储媒体URL。 - Jordi
1
@ZorleQ 你说得对,似乎这个方法不再起作用了,所以唯一的解决方案是再次调用Instagram API以获取新的媒体URL。 - Jordi
2
你可能需要补充说明,现在获取新的URL也并非总是可行的。Instagram关闭了通过ID端点https://api.instagram.com/v1/media/<id>获取帖子的方式。在我的情况下,我通过标签收集,因此/recent端点并不总是返回我想要刷新的帖子。 - yagger
你是对的 @yagger,我会在本周稍后编辑答案。感谢你的更新! :) - Jordi

5

在撰写本文时,您唯一的选择是以某种方式存储或缓存图像。

例如,您可以将图像存储在数据库中。 Instagram平台政策要求您在应用程序不再需要它们时删除这些图像。

另外,如果您使用CDN,您可以通过图像代理提供这些图像,然后在CDN上设置长期到期日。这样,您不会将图像存储在数据库中,但您的用户仍然可以在URL签名过期后看到它们。


存储图像是否违反条款? - younes0

-1

给定的URL中有反斜杠。如果您将它们删除,它就可以工作了。 例如,API提供的URL是:

https:\/\/scontent.cdninstagram.com\/v\/t51.29350-15\/3304...

所以,我做到了这个:

https://scontent.cdninstagram.com/v/t51.29350-15/3304...

它起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接