トップ 最新

2008-03-01

λ Mimori's Algorithms Space

今日から Live Space に移転する方向で。

野望

  • 過去の日記を転送する
  • ここのRSSは http://kamiyn.spaces.live.com/blog/feed.rss に飛ばす。RSS feed ってリダイレクトしていいのかしら?

λ Windows Live Spaces にXML-RPC経由で投稿したりする

ドキュメントは Windows Live Spaces MetaWeblog API。 tDiary の日記を転送するという目的なので久々にRubyで記述。

getUserBlogs.rb : ブログ情報の取得

require 'xmlrpc/client'

uri = "https://storage.msn.com/storageservice/MetaWeblog.rpc"
username = "kamiyn"
password = "********"
client = XMLRPC::Client.new2( uri )
blogger = client.proxy("blogger")
begin
        appkey = "ignored" # ignored
        result = blogger.getUsersBlogs appkey, username, password
        p result
rescue XMLRPC::FaultException => e
        puts "fault #{e.faultCode}: #{e.faultString}"
end

結果

[{"blogid"=>"MyBlog", "blogName"=>"Mimori's Algorithms Space", "url"=>"http://spaces.msn.com/members/kamiyn"}]

→ blogid は MyBlog である。metaWeblog.newPostドキュメント見ると確かにそう書いてあるんだけど… ドキュメントの記載が This should be the string MyBlog じゃなくて This should be the string "MyBlog" だったら見分けついたのに。

getRecentPosts.rb : 最近の投稿情報の取得

require 'xmlrpc/client'

uri = "https://storage.msn.com/storageservice/MetaWeblog.rpc"
username = "kamiyn"
password = "********"
client = XMLRPC::Client.new2( uri )
metaWeblog = client.proxy("metaWeblog")

begin
        blogid = "MyBlog"
        numberOfPosts = 5
        result = metaWeblog.getRecentPosts blogid, username, password, numberOfPosts
        p result
rescue XMLRPC::FaultException => e
        puts "fault #{e.faultCode}: #{e.faultString}"
end

newPost.rb : 記事の投稿

require 'xmlrpc/client'

uri = "https://storage.msn.com/storageservice/MetaWeblog.rpc"
username = "kamiyn"
password = "********"
client = XMLRPC::Client.new2( uri )
metaWeblog = client.proxy("metaWeblog")

begin
        blogid = "MyBlog"
        title = "testTitle" # タイトル
        description = "testDescription" # 中身
        dateCreated = XMLRPC::DateTime.new(2007,11,1,0,0,0) # 日時
        categories = ["TestCategory"] # カテゴリー
        publish = true # falseにするとドラフトに保存,公開されない
        result = metaWeblog.newPost blogid, username, password, {'title'=>title, 'description'=>description, 'dateCreated'=>dateCreated, 'categories'=>categories}, publish
        p result
rescue XMLRPC::FaultException => e
        puts "fault #{e.faultCode}: #{e.faultString}"
end

λ ruby XMLRPC の SSL 接続で文句言われないようにする

上記のままだと以下のような文句を言われる。

warning: peer certificate won't be verified in this SSL session

要するに証明書の検証してないわけなんだが、XMLRPC::Client にルート証明機関の証明書を指定する方法がないのでパッチあてた。 いろいろ作るのが面倒なので内部でかかえていた Net/HTTPS オブジェクトをそのままプロパティとして公開しただけ。

diff -u /usr/local/lib/ruby/1.8/xmlrpc/client.rb  /usr/local/lib/ruby/1.8/xmlrpc/client.rb.bak                                               [~/tdiary/dailyupdate]
=== /usr/local/lib/ruby/1.8/xmlrpc/client.rb    2008-03-01 20:01:35.000000000 +0900
+++ /usr/local/lib/ruby/1.8/xmlrpc/client.rb.bak        2008-03-01 19:58:17.000000000 +0900
@@ -385,7 +385,6 @@
     # Cookie support
     attr_accessor :cookie

-    attr_reader :http

     attr_reader :timeout, :user, :password

getUserBlogs.rb 改: ブログ情報の取得 SSLの検証付

require 'xmlrpc/client'

uri = "https://storage.msn.com/storageservice/MetaWeblog.rpc"
username = "kamiyn"
password = "********"
client = XMLRPC::Client.new2( uri )
client.http.ca_file = "/usr/local/share/curl/curl-ca-bundle.crt"
client.http.verify_mode = OpenSSL::SSL::VERIFY_PEER
client.http.verify_depth = 5
blogger = client.proxy("blogger")
begin
        appkey = "ignored" # ignored
        result = blogger.getUsersBlogs appkey, username, password
        p result
rescue XMLRPC::FaultException => e
        puts "fault #{e.faultCode}: #{e.faultString}"
end

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|

using plugin: amazon calendar2 category html_anchor makelirs makerss recent_comment3 recent_trackback3 squeeze tb-send tb-show recent_list

Copyright(C) 2003-2007 by KAMIYA Satosi (上美谷 智史) All rights reserved.
gmail 無断リンク上等! ただし自動的に捕捉されます。