CPAN 関連の API などのメタデータについての雑感
CPAN のメタデータは以下の3つにより配布されている。
- authors/01mailrc.txt.gz
- modules/02packages.details.txt.gz
- modules/03modlist.data.gz
いずれも 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 は、ネットワーク的にとおいため、日本からだと結構おそいです
Published: 2010-03-06(Sat) 09:37