Rubyで短縮URLを展開してみた

 iTunes Store(Japan)
この記事の所要時間: 32

3年ほど前書いたとあるスクリプトでは短縮URLの展開処理について hugeurl というパッケージを利用していました。

展開には http://search.twitter.com/hugeurl?url= を使っている。

とのことでしたが、知らず知らずのうちにTwitterの短縮URL APIが終了していたそうで、展開処理はHTTP-HEADをし、ResponseのLocationを見るように変更されたそうです。

twitterのURL展開隠しAPIを使っていたのだがいつの間にかなくなっていたので、HTTP-HEADしてresponseのlocationを見るようにした。

最近になり、短縮URLの展開処理が必要になったので使ってみると求めてる解が得られなかったので、求める解が得られるようなものを書いてみました。

検証材料

実装結果のチェックに下記のツイート内にあるURLを食わせてやります。

ただし、Twitter Search APIから取得できるツイートのURLは ”http://bit.ly/LEIdIN” ではなく、
Twitter独自の短縮URLの結果である “http://t.co/39XdDUP9″ になるため、こちらのほうをチェックURLとします。
また、”http://bit.ly/LEIdIN” の元URLは “http://tinyurl.com/7gbmp2b” とtinyurl.comの短縮URLが登録されており、”http://tinyurl.com/7gbmp2b” には “http://www.iex3.info/archives/1249″ が登録されています。
結果から言えば、”http://www.iex3.info/archives/1249″ が帰ってくるような展開処理が望ましいと言えます。

実装 1

参考サイトによると、Net::HTTP#head を使うと良いみたいなことが書いてあり、そのままコードも書いてあったのでそれを拝借しました。

上記のスクリプトに対して、”http://t.co/39XdDUP9″ を食わせてみます。

1段階目の展開しか得られてないのはプログラム通りってところです。

実装 2

次に実装1のプログラムに再帰的に展開すれば、求める解が得られるだろうと思ったので下記のように追記してみました。

上記のスクリプトに対して、再度 “http://t.co/39XdDUP9″ を食わせてみます。

若干求める解と違うような気がしますが… 挙動を知ってみたいので、 expand_url に入った直後に入力パラメータ url を出力してみました。

ということで、若干違いますがほぼ求めてる解が得られた気もするのでこれでOKとします。

参考サイト