WordPressのバージョンアップを検討中

AS Hole(http://piyocast.com/as)で使っている(サーバー側の)BlogソフトWordPressはちょっと古いバージョンなので、新しいものを入れてみようと考えていた。つまり、バージョンアップだ。 

ついでに、AppleScriptから直接更新を行うようなことを考えて、XML-RPCでいろいろできないかと探っていた。 

WordPressといっても、いろいろと分岐したバージョンが(過去に)あったりで、どのバージョンでも同様にXML-RPC経由でコントロールできるわけではない、と考え、複数バージョンのWordPressに向けて「mt.supportedMethods」というメソッドを投げてみた。 

tell application “
http://piyomaru.wordpress.com/xmlrpc.php” 
call xmlrpc {method name:”mt.supportedMethods”, parameters:{}} 
end tell 

--> {“wp.getUsersBlogs”, “wp.getPage”, “wp.getPages”, “wp.newPage”, “wp.deletePage”, “wp.editPage”, “wp.getPageList”, “wp.getAuthors”, “wp.getCategories”, “wp.getTags”, “wp.newCategory”, “wp.deleteCategory”, “wp.suggestCategories”, “wp.uploadFile”, “wp.getCommentCount”, “wp.getPostStatusList”, “wp.getPageStatusList”, “wp.getPageTemplates”, “wp.getOptions”, “wp.setOptions”, “wp.getComment”, “wp.getComments”, “wp.deleteComment”, “wp.editComment”, “wp.newComment”, “wp.getCommentStatusList”, “blogger.getUsersBlogs”, “blogger.getUserInfo”, “blogger.getPost”, “blogger.getRecentPosts”, “blogger.getTemplate”, “blogger.setTemplate”, “blogger.newPost”, “blogger.editPost”, “blogger.deletePost”, “metaWeblog.newPost”, “metaWeblog.editPost”, “metaWeblog.getPost”, “metaWeblog.getRecentPosts”, “metaWeblog.getCategories”, “metaWeblog.newMediaObject”, “metaWeblog.deletePost”, “metaWeblog.getTemplate”, “metaWeblog.setTemplate”, “metaWeblog.getUsersBlogs”, “mt.getCategoryList”, “mt.getRecentPostTitles”, “mt.getPostCategories”, “mt.setPostCategories”, “mt.supportedMethods”, “mt.supportedTextFilters”, “mt.getTrackbackPings”, “mt.publishPost”, “pingback.ping”, “pingback.extensions.getPingbacks”, “demo.sayHello”, “demo.addTwoNumbers”, “wpStats.check_key”, “wpStats.get_blog_id”, “wpStats.get_site_id”, “wpStats.update_bloginfo”, “wpStats.update_postinfo”, “wpStats.ping_blog”, “wpStats.flush_posts”} 


サポートしているメソッドの一覧が返ってくるので、異なるバージョン間で共通して使えるものがどれかを確認できた。やはり、バージョンによって使えたり使えなかったりするものがあるようだ。 

MovableTypeをはじめとする、WordPressやらのBlogのソフトでは、XML-RPC経由でさまざまな操作が行えるようになっている。ただ、各Blogソフトがてんでバラバラに実装していたので、途中から足並みを揃えるようになったようだ。とはいうものの、異なるBlogソフトの間で連携とか乗り換えが行えないと不便なので、他のソフトが実装しているメソッドは以前から実装していたようだ。 

blogger系、movabletype系、metaBlog系、wpネイティブ系、その他系(デモ用の機能とか)……と、WordPress自身もいろいろなメソッドを受け付けるようになっていて、どれを使うべきなのか調べていた。 

そんな手探り状態の中で、いくつか「仕様どおりに書いてるけど動かない」というものも出てきた。 

それが、画像のアップロードだ(汗) 

さまざまな既存のScriptを参考にしつつ、base64でエンコードしてアップロードまではできているんだけど……サーバー上でデコードされない。「なんちゃら.jpg」とかいう「あたかもJPEGファイルであるかのような名前を持つbase64エンコードされたテキストファイル」なんてものが出来上がってしまう。 

改行コードが悪いのだろうか……などと考えて、いろいろいじくっているのだが、うまく行かない。まさか、WordPressのバージョンが古くて、ちゃんと動いていないだけなんと違うのか? などと考えて、最新のバージョンが動いていると思われるWordPress.com(登録すると3GBまで無料で使えるWebサービス)に向けてAppleScriptからXML-RPCでコントロールしてみたが……画像のアップロードはやはりダメ。当分、base64にうなされそうだ。 

もうひとつ、頭の痛い問題があった。 

AS HoleではスクリプトエディタのカスタムURLプロトコル「applescript://」を利用して、(Mac OS Xユーザーだけは)クリックするとスクリプトエディタにAppleScriptが転送されるようになっている。 

ところが、先のWordPress.com上に取得したアカウントで試しにHTMLに書き出したAppleScriptを記事中に入れてみたところ……リンクが反応しない(ーー; 

投稿時には問題なかったのに、保存したタイミングで書き換えられてしまうようだ。 

WordPressの新しいバージョンに移行したいが、カスタムプロトコルが通らないのであれば意味がない。大問題だ。 

探してみたら、FireFoxのブックマークレット方面(だと思うのだが詳細不明)で同じような話があって、 

■WordPress からリンクできる URL のスキームを増やす 
http://43hr.wordpress.com/tag/wordpress/ 

たしかに、ソースを読んでみると……/wp-include/kses.php の346行で、 

function wp_kses($string, $allowed_html, $allowed_protocols = array ('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet')) { 

とあり、プロトコルを入れてある配列とのチェックを行っていることが分る。ここに「applescript」の文字を追加してあげればよさそうだ。 


なんとか、イケそうな感じにはなってきたのだが……画像のアップロードだけは納得できない。

Copyright By Piyomaru Software. All Rights Reserved