Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

Services_ShortURL_Googl作った

先日、GoogleGoogleツールバーなどから利用するURL短縮サービス(Google URL Shortener)をリリースしたわけですが、Perl界隈では早速Yappoさんがモジュールを書かれた模様。


http://goo.gl/ ってのが巷では始まっていますが、まだ勝手に tinyurl を作れないようなので
簡単に http://goo.gl/hogetinyurl を作る WWW::Shorten::Google ってモジュールを書きました。

http://github.com/yappo/p5-WWW-Shorten-Google

CPAN には、各種 tinyurl を使って url を短くするための統一インタフェイスとして WWW::Shorten ってのがあるので、それの流儀にしたがって作りました。

GitHubのソースを見てみると、何じゃこの演算は。。。で、調べてみると、


goo.gl短縮URLを作るための、APIは公開されていないのだが、Google Toolbarのxpiファイルをunzipし、lib/toolbar.js というファイルを読むと getUrlShorteningRequestParams_ という関数が見付かる。これが、Google URL Shortenerに投げるPOSTデータを生成している。

あーなるほどー。ということで、

$ wget http://dl.google.com/firefox/google-toolbar-beta-win.xpi
$ unzip google-toolbar-beta-win.xpi
$ grep em:version install.rdf
    <em:version>7.0.20091214Wb1</em:version>
$ cd lib
$ 

して、toolbar,jsを確認。おお。。。なるほどなるほど。この部分を他の言語に置き換えれば、Perl版だろうがPHP版だろうが作れそうな感じ。


ということで、Services_ShortURL_Googl作りました。"Google"じゃなくて"Googl"です。モノはopenpear.orgに上げてあります。

インストールは

$ sudo pear channel-discover openpear.org
$ sudo pear install -a openpear/Services_ShortURL_Googl-alpha
$ 

な感じで。PEAR::Services_ShortURLパッケージのサブパッケージ的な位置づけで作ってますので、当然PEAR::Services_ShortURLは必須です。また、goo.glのレスポンスがjson形式のため、これを処理するためにjson拡張に依存しています。ということで、PHP5.2.0以上に対応ということで;-)
使い方は、SVNリポジトリにあるsample.phpのような感じ。

<?php
require_once "Services/ShortURL/Googl.php";

/**
 * Services_ShortURLパッケージに組み込まれれば、
 * Services_ShortURL::factoryメソッドを使うように
 * なるハズ
 *
 * $obj = Services_ShortURL::factory('Googl');
 */
$obj = new Services_ShortURL_Googl();
try {
    $result = $obj->shorten('http://d.hatena.ne.jp/shimooka/');
    echo $result . PHP_EOL;
    echo $obj->expand($result) . PHP_EOL;
} catch (Exception $e) {
    echo $e->getMessage() . PHP_EOL;
    exit;
}

このスクリプトの出力は、

$ php sample.php
http://goo.gl/BuQj
http://d.hatena.ne.jp/shimooka/
$ 

のようになります。
折角なので、Date_Holidays_Japanの時のようにPEAR本家に提案してみる予定。


このパッケージを作るに当たり、Yappoさんの公開されたコードを参考にさせてもらいました。ありがとうございました:-)