« Top

[お知らせ] JSON 変換サービス

BOINC や BOINC ベースのプロジェクトで配信されている各種 XML データを JSON 形式に変換するサービスを始めました。 (3/14 追記)

JSON (JavaScript Object Notation)というのはデータ交換用のフォーマットの一種です。 仕様が単純で Javascript などのスクリプト言語でも簡単に取り扱えるのが特徴です。 最近流行の Ajax でも簡単に取り扱うことが出来るので注目されています。

今回提供するサービスは, BOINC や BOINC ベースのプロジェクトで配信されている各種 XML データを JSON 形式のデータに変換して再配布するものです。 現時点で対応しているデータは以下の5つです。

変換を行う CGI スクリプトは xml2json.cgi をベースにしています。 JSON データを取得するには以下の URI で GET 要求します。

http://huaa.baldanders.info/xml/?type=value

value の値によって要求するデータを切り替えられます。 とり得る値は以下のとおりです。

client :BOINC クライアント のバージョン情報
devclient :BOINC クライアント のバージョン情報(開発バージョンを含む)
boinc :BOINC Project News の RSS フィード
seti :SETI@home Project News の RSS フィード
einstein :Einstein@Home Project News の RSS フィード
boincstat :Boinc Combined Statistics の User Stats

type=boincstat の場合は cpid (Cross-project ID)もあわせてセットします。

http://huaa.baldanders.info/xml/?type=boincstat&cpid=Cross-projectID

Cross-project ID は各プロジェクトのアカウントページに書かれています。

結果は text/plain データ(UTF-8 エンコード)として返されます。 実際に試してみると分かりますが, 以下のような Javascript コードになっています。

if (typeof(value) == 'undefined') value = {};
value.data = {
    ...
};

if (typeof(value.onload) == 'function') value.onload(value.data);

value の部分(オブジェクト名)はパラメータの type 値になります。 例えばパラメータを type=client と指定すると, オブジェクト名は client になり, 変換情報は client.data に格納されます。 もしオブジェクト名を変えたい場合は URI のパラメータに var を追加します。

http://huaa.baldanders.info/xml/?type=value&var=name

例えばパラメータを type=client&var=json と指定すると, オブジェクト名は json になります。 var の名前には英字およびアンダーバー(_)しか使えないのでご注意ください。 例えば type=client&var=client2 などとしても無視されます(オブジェクト名は client になります)。

返ってきたデータは Javascript のソースとしてインクルードします。

<script type="text/javascript" src="http://huaa.baldanders.info/xml/?type=client"></script>

なお, テストページに Javascript の記述例があるので参考にしてください。 テストページには CGI の非同期読み込みとコールバック関数(object.onload)の定義例があります。

JSON については別の blog で記事を書いています。 JSON に興味があるかたは参考にしていただけるとうれしいです。

本サービスでは各プロジェクトのサイトへの過剰なアクセスを避けるため, 取得データのキャッシュを行っています。 一度アクセスすると少なくとも6時間はキャッシュされますのでご注意ください。 本サービスへの過剰なアクセスもご遠慮ください(情報はキャッシュされますので意味がありません)。 本サービスで出力される情報については一切保証はありません。 また本サービス自体を予告なく停止することがありますのであらかじめご了承ください。 あくまでも各自で責任の取れる範囲内でのご利用を心がけていただけるようお願いいたします。

トラックバック

このエントリーのトラックバックURL: