はてなダイアリーキーワード自動リンクAPIとApache XML-RPC

本をさがそうを作っていたとき、はてなダイアリーキーワード自動リンクAPIで苦戦していた。
Apache XML-RPCを使うと、以下のように日本語がdumpされてしまい、うまくリンクが取得できなかった。

はてな
はてな

そこで僕のとった行動は、XML-RPCのソースをとってきて、がんがんデバッグして、日本語を変換しているところを突き詰めて、コメントアウトしてしまうという、恐ろしく強引な手法・・・。
ちなみに修正したのはXMLWriterImplの212行目以降。

//					if (canEncode(c)) {
//						w.write(c);
//					} else {
//						w.write("&#");
//						w.write(Integer.toString(c));
//						w.write(";");
//					}

なにかおかしいと思いつつ、最初は文字コードとその範囲を調べて、適当に値を突っ込んでいたが、結局わけがわからなかったので、コメントアウトしてしまった・・・。

オープンソースのコードを読むのはこのときが初めてで、すごく大変だった。
# よい経験にはなったけど・・・。


しかし、今日ついに解決。
昨日コメントをいただいた、id:Yoshioriさんが公開しているはてな認証APIのライブラリに、はてなダイアリーキーワード自動リンクAPIのコードもあった。
実行してみると、ちゃんと日本語がリンクされて返ってきている。

ソースを確認してみると、僕のコードとの違いがわかった。

			map.put("body", body.getBytes("utf-8"));

パラメータをMapでリクエストするんだけど、bodyの中身がbyteだ。
僕はStringをそのまま突っ込んでいた・・・。文字コードについては何度も確認していたが、byte
でよいとはわからなかった。
いろいろな文字コードでgetByteして、それをStringに直したりはしたんだけど。
XmlRpcClientConfigImplでconfigの文字コードを何度も変えていたんだけど。
いっぱい苦手な英語を読んで頑張ったんだけど。


やっぱり独学だときつい部分もあるなぁ。独学でしか身に付かないことも多いけど。
# 気合とか、根性とか・・・。

ひとのコードを読むのは、やっぱり大事だ。