1. ホーム
  2. facebook

グラフAPIから "本物の "Facebookプロフィール画像URLを取得する

2023-09-21 01:54:44

質問

FacebookグラフAPIを使うと、ユーザーのプロフィール画像を取得することができます。

http://graph.facebook.com/517267866/picture?type=large

となっており、問題なく動作します。しかし、上記のURLをブラウザに入力すると、画像の実際のアドレスは

http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg

最初の URL を使って 2 番目の URL をプログラム的に取得するにはどうすればよいでしょうか。

どのように解決するのですか?

最初の URL は、2 番目の URL に HTTP 302 (一時的なリダイレクト) を与えています。 そこで、プログラム的に2番目のURLを見つけるには、1番目のURLに対してHTTPリクエストを発行して Location ヘッダを取得します。

とはいえ、2つ目のURLが永続的であることを当てにしてはいけません。 HTTP レスポンス コード (永久的な 301 ではなく 302) を少し読むと、Facebook は、たとえば画像をホストするためにサーバーを使用する人々を防ぐために、これらの URL を定期的に変更する可能性があることがわかります。


編集します。 OPが貼ったCDN URLが404になっていることに注目し、URLが長寿命であることは当てにならないことがわかります。 また、グラフ API へのリンクが <img> をSSLで保護されたページで というパラメータがあります。 を追加する必要があります。 を使用することを確認してください。 https://graph.facebook.com .


更新しました。 APIには パラメータを追加しました。 - redirect=false - を追加し、リダイレクトではなく JSON を返すようにしました。 再送された JSON には CDN の URL が含まれています。

{
   "data": {
      "url": "http://profile.ak.fbcdn.net/...",
      "is_silhouette": false
   }
}

繰り返しますが、私はこのCDN URLが長寿命であることを当てにしていません。 JSONレスポンスは寛容なCORSヘッダとともに送信されるので、XHRリクエストでクライアント側で自由にこれを行うことができます。