2011年05月14日

Seesaa blog の API を叩いてみる

org2blogの導入、失敗

seesaa blogはmetaWeblogのAPIを使えるということで org2blogを使って投稿しようと思い、 el-getを使ってorg2blogをインストールし、 さらに依存するということで auto-installを使ってxml-rpc.elをインストールし、 とりあえず下記のコードを評価しておいて

(require 'xml-rpc)
(add-to-list 'load-path "~/.emacs.d/el-get/org2blog/")
(require 'org2blog-autoloads)

(setq org2blog/wp-blog-alist
      '(("mugijiru"
         :url "https://ssl.seesaa.jp/blog/rpc"
         :username "******"
         :password "******"
         )))

そして

M-x org2blog/wp-login

しようとしたところ

Contacting host: blog.seesaa.jp:80
Reading [text/xml]... 919 bytes of 909 bytes (101%)
xml-rpc-xml-to-response: XML-RPC fault `Failed to access class (metaWeblog): Can't locate metaWeblog.pm in @INC (@INC contains: /home/seesaa/bl/lib /home/seesaa/savacan/lib /usr/local/perl-5.8/lib/5.8.8/x86_64-linux-thread-multi /usr/local/perl-5.8/lib/5.8.8 /usr/local/perl-5.8/lib/site_perl/5.8.8/x86_64-linux-thread-multi /usr/local/perl-5.8/lib/site_perl/5.8.8 /usr/local/perl-5.8/lib/site_perl /home/seesaa/cpan/lib/5.8.8/x86_64-linux-thread-multi /home/seesaa/cpan/lib/5.8.8 /home/seesaa/cpan/lib /home/seesaa/cpan/lib/site_perl/5.8.8/x86_64-linux-thread-multi /home/seesaa/cpan/lib/site_perl/5.8.8 /home/seesaa/cpan/lib/site_perl . /usr/local/perld) at (eval 26339) line 3.

って怒られた。 何が悪いのかさっぱりわからんので とりあえずもっと低レベルなところから手をつけてみる。

wordpress-xmlrpc-0.11 というgemを使ってみる

wordpress-xmlrpc という gem を入れてみて

下記のようなコードを動かしてみる

require 'rubygems'
require 'wordpress-xmlrpc'

blog_params = {
  :blog_uri => "http://blog.seesaa.jp/",
  :xmlrpc_path => "rpc",
  :user => "******@gmail.com",
  :password => "******"
}

blog = Wordpress::Blog.new(blog_params)

p blog.get_page_list

すると

$ ruby test.rb
/opt/local/lib/ruby/1.8/xmlrpc/parser.rb:152:in `fault': wrong fault-structure: {"faultCode"=>"Client", "faultString"=>"Failed to access class (wp): Can't locate wp.pm in @INC (@INC contains:) at (eval 34489) line 3.
"} (RuntimeError)

やっぱり怒られる。

XMLRPCを直接叩いてみる

# -*- coding: utf-8 -*-
require 'xmlrpc/client'

proxy = XMLRPC::Client.new("blog.seesaa.jp", "/rpc")

p proxy.call("mt.supportedMethods")
p proxy.call("blogger.getRecentPosts", "", "mugijiru", "******@gmail.com", "******")

ここまでやってようやく気付く。

seesaaは、WordPressのAPIに対応してない!

何故か対応しているものと思い込んで試してしまった……。 そりゃ動かないわけだ。

ってことで、Emacsからmt/blogger/metaWeblogのAPIを叩く他の方法を探す。

weblogger-el

インストールはしてみたけどうまく動かなかった……。

M-x weblogger-setup-weblog

して名前を決めた辺りで

when: Symbol's value as variable is void: mt_keywords

とか怒られる。

ググってみても、割とあれなelispらしいので、 自分自身elispに明るくないのでとりあえず放置……。

rubyから直接xmlrpcを叩く

もうしょーがないから、 Rubyからxmlrpc喋らせて自前でAPIを叩くことに。

とりあえずコードはこんな感じ。

# -*- coding: utf-8 -*-
require 'xmlrpc/client'

proxy = XMLRPC::Client.new("blog.seesaa.jp", "/rpc")

content = {}
content["title"] = "記事のタイトル"
content["description"] = <<CONTENT
ここに本文を書く
CONTENT

proxy.call("metaWeblog.newPost", "mugijiru", "******@gmail.com", "******", content, true)

SSLは、叩いてない。めんどくさかった。 というか、直接プログラムに本文とか書く時点でめんどくさがってる。 けどまあとりあえずはこれでOK

本文の出力

タイトルはともかく、 本文のHTMLを手書きはめんどい。

ってことで、どうにか手抜きで出力する方法を考えてみた。

ま、org-modeで書いているので、 とりあえず org-export-as-html-to-buffer して 本文になるところをコピペして、 上記のスクリプトに貼り付けることでとりあえず解決。

seesaaにログインして直接書くよりはるかに楽になったので 割と満足

タグ:Emacs ruby API
posted by 麦汁 at 11:32 | Comment(0) | TrackBack(0) | blog設定 | このブログの読者になる | 更新情報をチェックする