先日tokuhiromさんのブログで、ohlohというサービスを知りました。
凄いですね、1位tokuhiromさん、2位cho45さん両方とも1000commits超えています。さて今日はこのohlohという開発者向けサイトが提供するAPIを使って、codereposコミット数ランキングを作ってみたいと思います。
ohlohのAPIドキュメントによると、ContributorFactというAPIでtokuhiromさんの記事にある様なランキングが取得出来る事が分かりました。
APIを利用する為にはAPIキーが必要になりますので、アカウントを取得後にAPI Keysのページでキーを取得、リクエストクエリの後にapi_keyというパラメータで送信すればAPIが実行出来ます。単純にDumpしても面白くないので、今日はXMLで結果取得したデータをJSONで出力し、Ajaxで扱えるマッシュアップサイトぽい物を作ってみます。
perlのコードは単純に
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use XML::Simple;
use JSON::Syck;
use CGI;
my $api_key = "your-api-key";
my $callback = "";
my $q = new CGI;
$callback = $q->param("callback") if defined $q->param('callback');
my $content = get("http://www.ohloh.net/projects/8359/contributors.xml?api_key=$api_key");
my $parser = XML::Simple->new();
my $xml = $parser->XMLin($content);
my $json = JSON::Syck::Dump($xml);
print $q->header(
-type => 'text/javascript',
-charset => 'utf-8'
);
print "$callback($json)";
という、XMLinからJSON::Syckへの流し込みのコードになります。
これをCGIとして実行し、JSONを生成します。またクライアント側は
<script type="text/javascript" src="jquery-latest.js"></script>
<script type="text/javascript"><!--
$(function() {
$('#coderepos-committers').html('');
$.getJSON("http://your.example.com/coderepos-ranking.cgi?callback=?", function(data) {
$.each(data.result.contributor_fact, function(index, item) {
$('<div>').html(
'<b>' + item.contributor_name + '</b><br />' +
'<blockquote>' +
'main language: ' + item.primary_language_nice_name + '<br />' +
'commits: ' + item.commits + '<br />' +
'</blockquote>').appendTo('#coderepos-committers');
});
});
})();
--></script>
<div id="coderepos-committers"></div>
とすれば、以下の様な画面が表示されます。
XMLinからJSON::Syck::Dumpの流れが便利すぎますね。:-)
このランキングを作るロジック自体、手数の多そうな処理になりますからこのAPI便利かもしれません。他のプロジェクトでこの様なランキングページを作ってみても面白いかもしれませんね。




Leave a comment