#!/usr/bin/env ruby -Ku #coding: utf-8 require 'rubygems' require 'net/http' require 'wsse' require 'base64' require 'stringio' require 'pp' class LivedoorBlogAtomPub # livedoor のブログの細かい仕様は http://help.blogpark.jp/archives/52288925.html def initialize(login_id, atompub_key, blogid ) @username, @password, @blogid = [login_id, atompub_key, blogid] @server_host_name = "livedoor.blogcms.jp" end def service() #サービスの全般:WSSE認証のチェックに使う。 response = self.http.get('/atom/service',{'X-WSSE' => WSSE::header(@username, @password )}) response.body end def atom() #エントリ取得 http = Net::HTTP.start(@server_host_name) response = http.get("/atom/blog/#{@blogid}/article",{'X-WSSE' => WSSE::header(@username, @password )}) response.body end def post_entry(title,content,categories=[],draft_flag=false) #エントリをAtomのXMLで作成 xml = entry(title, content,draft_flag,categories) #委譲 #エントリポストする。 #puts xml;exit http = Net::HTTP.start(@server_host_name) response = http.post("/atom/blog/#{@blogid}/article", xml, {'X-WSSE' => WSSE::header(@username, @password )}) puts response.body end def entry(title, body,draft_flag=false,categories=[],body_more=nil,private_more=nil,tags=nil) #todo 引数を キーワード引数にする。 cat_name = nil draft = draft_flag ? "yes": "no" #下書き out = StringIO.new out.puts "" out.puts " #{title}" out.puts " tag:example.org,2003:3.2397" if tags out.puts " #{Time.now.iso8601}" out.puts " #{Time.now.iso8601}" out.puts " purururuh" out.puts " " while cat_name = categories.pop out.puts " " out.puts " #{body}

]]>
" out.puts "

]]>
" if body_more out.puts "

]]>
" if private_more out.puts "
" out.puts " " out.puts " #{draft}" out.puts " " out.puts "
" out.string end end # cli = LivedoorBlogAtomPub.new("blog_id","wsse_token", "blog_id") # #puts cli.service # #puts cli.atom # puts cli.post_entry("test from ruby", "hello ruby atom pp world",["test_category"])