tokuhirom's Blog

CPAN 関連の API などのメタデータについての雑感

CPAN のメタデータは以下の3つにより配布されている。

いずれも gzip した状態で 200KB を越えるようなわりと大きなテキストファイルなので、これを web site や、CLI 等から直接利用すると、速度が遅くなる。

そこで、以下のような解決策がかんがえられているみたいです。

CPAN::SQLite

http://search.cpan.org/~rkobes/CPAN-SQLite-0.199/

上記ファイルから SQLite にデータをつっこむスクリプトを提供。検索用のメソッドも提供してくれる。

なお、一部の検索系のメソッドに SQL Injection 脆弱性があるので注意。ユーザーからの入力を直接いれさせると大変危険なので注意が必要。
(作者に連絡済だが、「次回リリースするときにでもなおしてやんよ」などと呑気なことをいってらっしゃるので、注意を喚起するものである)

また、正規化がわりといきすぎていて、02packages.details.txt.gz だと一行におさまっている、パッケージ名から dist ファイル名の生成という一番基本的な動作が、これをつかうと、3つのテーブルを JOIN しなくてはいけなかったりして、ちょっとアレゲである。

CPAN Meta DB by id:miyagawa

http://cpanmetadb.appspot.com/

curl http://cpanmetadb.appspot.com/v1.0/package/Plack::Request
のようにアクセスすると、パッケージ名から、ダウンロードするファイルとバージョン番号が YAML でかえってくるという API である。

高速で、容易に利用可能なので便利である。ただし、これは機能が1つしかない。ので、マッチしなければつかえません(あたりまえ)

CPANDB

http://search.cpan.org/dist/CPANDB/

adamk が http://svn.ali.as/db/cpandb.bz2 という sqlite のファイルを配布してやるから、それをつかえばいいよ、というプロジェクトである。

CPANDB.pm のドキュメントが TBD なかんじだが、実際には ORLite を利用しているだけなので、対した問題ではない。これをつかうのが嫌であれば、DBIx::Skinny なり DBIC なりで schema を dump して普通につかえばよろしい。

これは非常に筋がいいアプローチだとおもうのだが、更新頻度が低いようで、今日ダウンロードしてデータをしらべてみたら、Plack のバージョンが 0.911 のもののデータまでしかはいっていなかった。
2月25日には 0.912 がでているので、今日が 3月6日であることをかんがえると、ちと更新頻度に難がある(自分のユーズケースではすくなくともつかえない)。

ただし、schema のネーミングなどの感じからすると CPAN::SQLite よりもこちらの方が好みである。

CPANIDX

http://search.cpan.org/dist/App-CPANIDX/

こちらは bingos 氏によるもので、メタデータからの SQLite DB の生成(mysql にも対応しているようです)。
FastCGI による web api interface の提供も行っています。

また、API は実際に bingos さんのサーバーでうごいてるみたいです。
http://cpanidx.bingosnet.co.uk/cpandb/yaml/auth/BINGOS

ただ、この API は、ネットワーク的にとおいため、日本からだと結構おそいです