【PHP】Twitterでの短縮URL(t.co)の展開。get_headerを使わない方法

Twitterに投稿すると強制的にt.coが標準化となり約半年が経ちました。

つい最近TwitterAPIに手をつけたもののAPI上ではt.coの表示ばかりなので、いったいどこのサイトなんだろと解析がはかどりませんでした。

短縮URLの展開にはget_headersでヘッダーのmetaタグを使うのが主流みたいですが、アクセス数が増え、レスポンスもいまいち。
※get_headers — HTTP リクエストに対するレスポンス内で サーバによって送出された全てのヘッダを取得する(PHP5より実装)
http://php.net/manual/ja/function.get-headers.php

同じURLに対しても違う短縮をしてしまうため、何回もヘッダにアクセスせねばならず、サイトに対しての連続アクセスが避けられなくなります。また個人のサーバに連続アクセスすると大変まずいことになります。

ユーザにとっては、便利ですが、デベロッパー側に立つと思った以上に厄介です。


どうにかして、サイトアクセスせずに短縮URLを短縮する方法はないだろうか。

「まさか、t.coはデータベースなんてあるんじゃないか」

ふとそんなことを思い検索してると、Janetter等のクライアント向けの記事多く出現。

もう少し調べてみるとクライアントは表示に対して短縮URLと実際のURLが選択できるとのこと。あと、t.coはTwitter独自の短縮とのこと。

そして、Tweet EntitiesというAPIがあるということ。

Tweet Entities
https://dev.twitter.com/docs/tweet-entities

Tweet Entities APIを使ってTweetパーマリンク番号にアクセスしてみると、中にさまざまなものが格納されてました。

今回ほしかったt.coの短縮前のURLは[expanded_url] に格納されてました。

Tweet Entities API
http://api.twitter.com/1/statuses/show/[パーマリンク番号].json?include_entities=true

ただしAPIアクセス回数の制限が痛いので自動のシステムに組み込むのは理想的ではないです。