MediaWikiのAPIをGaucheで叩くとなんか変。
変というか、思った通りの結果+αになってしまって困っている感じ。
Wikipediaのページをランダムに取得して、適当に呟くようにしようとしてMediaWikiのAPIを調べて以下のようなURLを作った。
http://ja.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&format=json
一先ずこれで何かしら取得出来るのは、適当なブラウザに突っ込んでみたら分かると思う。
MediaWikiのAPIに関してはこっち => API:Main page - MediaWiki
ちなみにこんな感じのデータがjson形式で返ってくる。formatをxmlと書き換えればxmlが返ってくる。
{"query":{"random":[{"id":419952,"ns":0,"title":"\u6728\u4e4b\u672c\u8b66\u5bdf\u7f72"}]}}
それでGaucheだと何がおかしいかというと、以下のコード。
(receive (status head body) (http-get "jp.wikipedia.org" "/w/api.php?action=query&list=random&rnnamespace=0&format=json") (print body)) ;;デバッグするのにprintしてる
いつもの要領でこういうコード書いてみた。いつもなら、結果のjson(もしくはxml)だけが取得出来てそれをパースするだけで済む…。はずだったんだけど、なんかパースでコケるからprintしてみたら、下のような結果が返ってくる。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://ja.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&format=json">here</a>.</p> </body></html> {"query":{"random":[{"id":2186129,"ns":0,"title":"\u62db\u9060\u770c (\u9577\u6cbb\u5e02)"}]}} #<undef>
前半HTML、後半は結果のjson。コケるわけです。ちなみにprintしているから、普通に改行されているけど改行コード含む文字列が返ってきています。
苦肉の策で(string-scan body "