WordPress の記事投稿時カテゴリ設定に Movable Type と同じ方式を採用しようとしたが失敗した。
Movable Type では mt.getCategoryList でカテゴリの一覧を取得し、mt.setPostCategories で記事へのカテゴリ設定を行うという方法を採った。
同じ方法を WordPress に転用できないかと試したところ以下のような例外が発生し、正常に機能しないことがわかった。
E, [2011-07-14T19:56:16.551099 #5660] ERROR -- : #<Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)> ../Ruby192/lib/ruby/1.9.1/rexml/source.rb:212:in `match' ../Ruby192/lib/ruby/1.9.1/rexml/source.rb:212:in `match' ../Ruby192/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:425:in `pull' ../Ruby192/lib/ruby/1.9.1/rexml/parsers/streamparser.rb:16:in `parse' ../Ruby192/lib/ruby/1.9.1/rexml/document.rb:204:in `parse_stream' ../Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:718:in `parse' ../Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:460:in `parseMethodResponse' ../Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:421:in `call2' ../Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:410:in `call' ../mail2weblog/main/plugin/weblog/mt/mt_post_extension.rb:33:in `set_post_categories' ../mail2weblog/main/plugin/weblog/mt/mt_post_extension.rb:25:in `post_after' ../mail2weblog/main/plugin/weblog/metaweblog/metaweblog_post_extension.rb:76:in `post' ../mail2weblog/main/plugin/command/weblog_post_command.rb:31:in `run' ../mail2weblog/main/lib/weblog_command.rb:61:in `run' ../mail2weblog/main/lib/mui/mail_command_processor.rb:50:in `block in run' ../Ruby192/lib/ruby/1.9.1/net/pop.rb:645:in `each' ../Ruby192/lib/ruby/1.9.1/net/pop.rb:645:in `each_mail' ../mail2weblog/main/lib/mui/mail_command_processor.rb:47:in `run' m2w.rb:30:in `<main>' ... Exception parsing Line: 9 Position: 284 Last 80 unconsumed characters: カテゴリ1</string> (REXML::ParseException) ../Ruby192/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:441:in `rescue in pull' ../Ruby192/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:332:in `pull' ../Ruby192/lib/ruby/1.9.1/rexml/parsers/streamparser.rb:16:in `parse' ../Ruby192/lib/ruby/1.9.1/rexml/document.rb:204:in `parse_stream' ../Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:718:in `parse' ../Ruby192/lib/ruby/1.9.1/xmlrpc/parser.rb:460:in `parseMethodResponse' ../Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:421:in `call2' ../Ruby192/lib/ruby/1.9.1/xmlrpc/client.rb:410:in `call' ../mail2weblog/main/plugin/weblog/mt/mt_post_extension.rb:33:in `set_post_categories' ../mail2weblog/main/plugin/weblog/mt/mt_post_extension.rb:25:in `post_after' ../mail2weblog/main/plugin/weblog/metaweblog/metaweblog_post_extension.rb:76:in `post' ../mail2weblog/main/plugin/command/weblog_post_command.rb:31:in `run' ../mail2weblog/main/lib/weblog_command.rb:61:in `run' ../mail2weblog/main/lib/mui/mail_command_processor.rb:50:in `block in run' ../Ruby192/lib/ruby/1.9.1/net/pop.rb:645:in `each' ../Ruby192/lib/ruby/1.9.1/net/pop.rb:645:in `each_mail' ../mail2weblog/main/lib/mui/mail_command_processor.rb:47:in `run'
本問題についてわかっていることを列挙する。
本問題は以下の条件が揃ったときに発生する一般的な問題のようだ。
XML ドキュメントを解析する前に、対象の XML ドキュメントの encoding 指定の有無を確認し、encoding 指定がなければ強制的に入れるパーサを追加することで対処した。
詳細な対処方法に着いては、以下のページにまとめた。
- XMLRPC::Client で CompatibilityError が発生した場合の対処方法について
Movable Type では mt.getCategoryList でカテゴリの一覧を取得し、mt.setPostCategories で記事へのカテゴリ設定を行うという方法を採った。
同じ方法を WordPress に転用できないかと試したところ以下のような例外が発生し、正常に機能しないことがわかった。