GNOME Seed から Web API を使う

Web API を使うには、XMLHttpRequest オブジェクトを使うのが一般的らしいのだが、GNOME Seed はブラウザが無いため利用できない。webkit を使う方法もあるとは思うが、GNOME で一般的に利用される libsoup を使ってみた。

Web API もよくわからないので、
http://www.atmarkit.co.jp/fnetwork/rensai/5minapi/01.html
のサンプルで使っている、
http://zip.cgis.biz/
を利用する。

郵便番号 100-0001 を検索するソースは以下のとおり

#! /usr/bin/env seed

const Soup = imports.gi.Soup;

var session = new Soup.SessionSync();
var request = new Soup.Message.c_new("GET", "http://zip.cgis.biz/xml/zip.php?zn=1000001");
var status = session.send_message(request);

var data = request.response_body.data;
print(data);

Soup オプジェクトを利用して、同期の SoupSession を作成し、GET で URI を送るだけ。受け取ったデータはXML形式なので、libxml を使えば良いと思う。
しかし、手元では文字化けしている。

$ ./zip.js 
<?xml version="1.0" encoding="utf-8" ?>
<ZIP_result>
<result name="ZipSearchXML" />
<result version="1.01" />
<result request_url="http%3A%2F%2Fzip.cgis.biz%2Fxml%2Fzip.php%3Fzn%3D1000001" />
<result request_zip_num="1000001" />
<result request_zip_version="none" />
<result result_code="1" />
<result result_zip_num="1000001" />
<result result_zip_version="0" />
<result result_values_count="1" />
<ADDRESS_value>
<value state_kana="??????" />
<value city_kana="?????" />
<value address_kana="????" />
<value company_kana="none" />
<value state="???" />
<value city="????" />
<value address="???" />
<value company="none" />
</ADDRESS_value>
</ZIP_result>

もう少し細工が必要そうだ。