$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

WebService::Bitlyというcpanモジュールを作った

 最近bit.lyのAPIを使うことがあって、それをうまく扱うようなcpanモジュールを探していたら、WWW:Shorten::Bitlyというモジュールが見つかった。ただ、このモジュールでは自分のやりたかった事が出来なかったので*1、もう少し汎用的なモジュールを作ってみました。

機能

bit.lyのAPI

  • shorten
  • expand
  • validate
  • clicks
  • bitly_pro_domain
  • lookup
  • authenticate
  • info

perlから扱う事が出来ます。つまり、URLを短くしたり、短いURLを長くしたり、クリック数の統計をとったりなどの機能を使う事が出来ます。。

利用例

use WebService::Bitly;

#インスタンス生成
my $bitly = WebService::Bitly->new(
    user_name => 'shibayu',
    user_api_key => 'R_1234567890abcdefg',
);

#shorten
my $result_shorten = $bitly->shorten('http://example.com/');
if ($result_shorten->is_error) {
    warn $result_shorten->status_code;
    warn $result_shorten->status_txt;
}
else {
    my $short_url = $result_shorten->short_url;
}

#expand
my $expand = $bitly->expand(
    short_urls => ['http://bit.ly/abcdef', 'http://bit.ly/fedcba'],
    hashes     => ['123456', '654321'],
);
if (!$expand->is_error) {
    for $result ($expand->results) {
        print $result->long_url if !$result->is_error;
    }
}

repository

githubに置いてあります。
http://github.com/shibayu36/WebService-Bitly

まとめ

 今回初めてこのようなモジュールを作成してみて、汎用的になるよう作るのはやはり難しいという印象を受けました。perlプログラマの方に聞きつつ、試行錯誤を繰り返し、ある程度完成というところまで到達できました。非常に勉強になったので、これからもモジュール作成をできるだけ行なっていきたいと思います。

 ただ、まだperlを始めたばかりということもあり、こんな設計でいいのだろうかと思う部分が多々あります。もし、「この書き方より、こっちの書き方の方がいい」という意見があったら、指摘していただきたいです。自分の書いたプログラムを添削してもらえたりするWebサービスとかってあるのかな。 

現在PAUSEアカウントの登録中なので、登録完了したらCPANに上げてみたいなと思っています。登録申請してから四日間ぐらい何も音沙汰ないけど、もう一度登録申請した方がいいかなー。

*1:エンドユーザのアカウントを追加でリクエストしたり、domainをj.mpにしたりとかができなかった