[PHP] TwitterのユーザアイコンURLをキャッシュする

Twitterのユーザアイコンを表示するケースはよくあると思いますが、素直にAPIを使ってしまうとIPアドレス単位で150回/時APIのアクセス制限にひっかかったりして、厄介です。

また、ドキュメントを見ると、<img src=”画像APIのURL” />とかで直接リダイレクトさせて使うのはやめてね、みたいなことも書いてあって、さらに厄介です。

https://dev.twitter.com/docs/api/1/get/users/profile_image/%3Ascreen_name

 

そんな中で、tweetimag.esというサービスはいけていて、ユーザIDを渡せば画像が返ってくるAPIを無料で提供してくれています。

レスポンスも速いので、小規模なサービスや個人用途あればこのAPIを使わせてもらうのがベターだと思います。

 

ただ、ある程度の規模やTwitterクライアントみたいなものになると、無料の外部APIに頼るのはちょっと・・・という場合がありそうです。

多くのサービスは裏でうまく対応しているんだと思いますが、公開されているものでいい感じのライブラリが見つからなかったので、過去に自前で対応していた時のやり方をベースにPHPのライブラリをつくってみました。

twicon

memcachedを使ってURLをキャッシュするようにしていて、ざっくり以下の仕様です。

  • ユーザIDとサイズを指定して、関数を呼び出す
  • 過去のキャッシュがある → そのままURLを返す
  • 過去のキャッシュがない → TwitterAPIに画像URLを取得しにいき、キャッシュを保存

SSLのURLも取得でき、memcachedサーバの指定、キャッシュ時間の変更、キー名のprefix変更に対応しています。

<img src="/twicon.php?id=XXXXX" alt="icon" />

みたいな使い方もOKです。

対象ユーザIDが存在しない場合や、API接続失敗したときなどは1px×1pxの透明gifを返すので、最悪とれなくても画像取得がエラーになることはない安心仕様になってます。

 

ちょっと気になる、という方でmemcachedサーバ用意できる方は、サンプルを参考に使ってみてもらえれば幸いです。

(何かおかしかったら、コメントかpull requestください)