複数の人の言及ツイートを拾って表示するような場合、これまではtweetimag.esというサービスを使ってアイコンを表示してきました。これはTwitterアイコンの取得を代行してくれるAPIのようなサービスで、こんな感じで指定してやればアイコンが表示されます。
http://img.tweetimag.es/i/nobodyplace_n
とっても便利だったんですが、負荷が上がって対応できなくなったのかいよいよ落ちることが多くなり不安定でダメそうなので、自分で何とかしなくてはいけなくなりました。素直にユーザー名だけでこんな風に取れると推測でいろいろ出来て楽で良いんですけど、
理想)http://img.twitter.com/nobodyplace/square_middle.jpg
あいにくそんなことにはなってないので…
現実)https://twimg0-a.akamaihd.net/profile_images/1210586817/may_sq_400_normal.jpg
なんとかプログラムで対応してやる必要があります。
アイコンのURLはTwitterのAPIを利用して
で、このURLはTwitterのAPIを利用すれば引っ張って来れます。GET users/profile_image/:screen_name | Twitter Developers
例えばこんな感じのリクエストを出すと、
https://api.twitter.com/1/users/profile_image?screen_name=nobodyplace
アイコン画像のURLである以下にリダイレクトされるという具合。
https://si0.twimg.com/profile_images/1210586817/may_sq_400_normal.jpg
ただし注意書きとして以下のように書かれているので、
GET users/profile_image/:screen_name | Twitter Developers
This method should only be used by application developers to lookup or check the profile image URL for a user. This method must not be used as the image source URL presented to users of your application.(抄訳:このメソッドは開発者がプロフィールイメージを探したりそのURLをチェックしたりするときにのみ使用可能です。このメソッドをアプリケーションのイメージ表示用URLとして使用してはいけません。)
上のリクエストをそのままimgタグに入れて表示させることは出来ません。あくまでURL取得用。
アイコン表示のための手順
というわけで、アイコン表示の手順としてはこんな感じになります。- APIを叩いてアイコンのURLを取得
- ユーザー名とアイコンのURLをセットでどこかに保存
- ツイートを表示するときに引っ張ってきて表示
取得部分をPHP+HTTP_Clientでやるとこんな感じ。
Authentication不要のGETリクエストなので簡単。APIから画像へは302リダイレクトなので素直にリダイレクト後のURLを取得すれば問題なしです。サンプルではサイズの設定を省略していますが、「size=」をくっつけることで指定してやることも可能です。
注意点としては、一応「Rate Limit」ありと仕様には書かれているので使いすぎ注意、かな。
これ自体がたくさん必要な場面てそうはないと思いますが、他との兼ね合いもあるので。
ご利用は計画的に。