我正在使用 Instagram feed API 在我的网站上展示我的 Instagram 帖子。但是一些视频 URL 显示“URL 签名已过期”。
有什么解决办法吗?
https://www.instagram.com/p/Bo7OXJ3hYM8/media/?size=m
请注意附加组件/media/?size=m
字母可以是t、m或l,代表不同的图片尺寸
这将返回您想要的图像
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,这可能会对您有所帮助。
在撰写本文时,您唯一的选择是以某种方式存储或缓存图像。
例如,您可以将图像存储在数据库中。 Instagram平台政策要求您在应用程序不再需要它们时删除这些图像。
另外,如果您使用CDN,您可以通过图像代理提供这些图像,然后在CDN上设置长期到期日。这样,您不会将图像存储在数据库中,但您的用户仍然可以在URL签名过期后看到它们。
给定的URL中有反斜杠。如果您将它们删除,它就可以工作了。 例如,API提供的URL是:
https:\/\/scontent.cdninstagram.com\/v\/t51.29350-15\/3304...
所以,我做到了这个:
https://scontent.cdninstagram.com/v/t51.29350-15/3304...
它起作用了。