はてなダイアリーキーワード自動リンク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の文字コードを何度も変えていたんだけど。
いっぱい苦手な英語を読んで頑張ったんだけど。
やっぱり独学だときつい部分もあるなぁ。独学でしか身に付かないことも多いけど。
# 気合とか、根性とか・・・。
ひとのコードを読むのは、やっぱり大事だ。