web-dev-qa-db-ja.com

Instagram / feed APIメディアのURLに「URL署名の有効期限が切れています」と表示される

InstagramフィードAPIを使用して、WebサイトにInstagramの投稿を表示しています。ただし、一部のビデオURLには「RL signature expired」と表示されます。

私のための解決策はありますか?

22
Arun Singh

Instagramは、メディアのURLにURL署名を追加しました。

次の正規表現を使用して、URL署名を簡単に削除できます。「vp。* /。{32} /。{8} /」

たとえば、PHPの場合:

preg_replace('/vp.*\/.{32}\/.{8}\//', '', $mediaUrl)

一方、URL署名を削除するのが最善の解決策だとは思いません(ただの簡単な修正です)。良い方法は、新しいURLを取得するためにInstagram APIを再度呼び出すことです。


[〜#〜] update [〜#〜]

Instagramは現在URL署名をチェックしており、署名が存在しない場合は403 "Access denied"エラーを返すため、唯一の解決策は、Instagram APIを再度呼び出して新しいメディアURLを取得することです。

2018年4月更新

Instagramは「api.instagram.com/v1/media/」エンドポイントを閉じたため、現在、投稿のURLを更新することはできません。

考えられる解決策は、メディアをダウンロードして自分のサーバーに保存することです(Instagram APIの条件に違反するため、このソリューションはお勧めしませんので、自己責任で行ってください)。

別の解決策は、メディアを再度見つけた元のエンドポイントを呼び出すことです(ただし、現在、新しいAPIレート制限で呼び出しを管理することは困難です)。

また、GitHubで役立つ非公式のInstagram APIを見つけることができます。

18
Jordi

直接画像リンクを使用する代わりに、いくつかの追加パラメーターを使用してメディアURLを解決策として使用して、目的の画像を取得できます。

例えば

https://www.instagram.com/p/Bo7OXJ3hYM8/media/?size=m

アドオン/ media /?size = mに注意してください

文字はtmまたはlさまざまな画像サイズ

これにより、目的の画像が返されます

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

12

これを書いている時点での唯一の選択肢は、何らかの方法で画像を保存またはキャッシュすることです。

たとえば、データベースに画像を保存できます。 Instagramプラットフォームポリシーでは、アプリケーションで不要になった画像を削除する必要があります。

または、CDNを使用する場合は、イメージプロキシを介してこれらのイメージを提供し、CDNに長い有効期限を設定できます。この方法では、データベースに画像を保存しませんが、URL署名の有効期限が切れた後でもユーザーはそれらを見ることができます。

4
Pirkka Esko