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
[ツッコミを入れる]
[]
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.