hatenablog gemでタグ付きの文章が出力できない問題を解決した

色々とコード書き換えながら試したいのでローカルにbundle installする。

$ bundle install --path vendor/bundle

これでvendor/bundle以下にあるgemファイルを書き換えることでライブラリの挙動を変えたりpしながら調べることができる。

コードを読んでいくとxmlにエスケープが入っていないことが分かった。rubyでシンプルなXML escape。なので以下のようにエンコード関数を渡すことで動くようになった。

def entry_xml(title = '', content = '', categories = [], draft = 'no', updated = '', author_name = @user_id)
  .
  .
  xml % [e(title), author_name, e(content), updated, categories_tag, draft]
end

足したe()関数はこんな感じ。

def e(str)
  str.encode(xml: :text)
end

うまく行ったぜー、とプルリクエスト送ろうと思ったらkymmt90/hatenablogにあるコードと中身が違う、あれ?よくみるとbundle installで入っているのはhatenablog-0.2.1だけど最新はhatenablog-0.2.2であることに気がついた。これはもしかして・・・結局マージリクエストは以下のようになった。

Update hatenablog to 0.2.2 by ongaeshi · Pull Request #2 · kymmt90/hatenablog-writer

これで以下のようなタグ付きのテキストも問題なく投稿できるようになった。

<html>
</html>