概要
htmlファイルをblogspotに投稿するrubyスクリプトを紹介する.コマンドラインから投稿できるため,ローカルマシンでの投稿記事の一元管理,投稿の自動化,emacsからの投稿など,様々な応用が効く.
blogspotへの投稿には,blogger.comでサポートされているATOM-APIを用いる.
ATOMとは
ATOMとは,XMLのフォーマットや,Web上でコンテンツを通信する際に使用するプロトコルなどの総称である.サービスの利用者は,ATOM-APIを使用して,コンテンツ配信などを実現することができる.
前準備
以下のサイトから,rubygemsのライブラリgdata-ruby-utilをダウンロードし,インストールする.これは,Google Data APIを使用するために利用する.
http://code.google.com/p/gdata-ruby-util/
コード
以下に,rubyのコードを示す.
#!/usr/bin/env ruby
$LOAD_PATH.delete(".")
# $LOAD_PATH.push('/path/to/BloggerAPI/gdata/gdata-1.0.0/lib')
require 'rubygems'
require "rexml/document"
require 'time'
require 'gdata'
class MyBlogger
def initialize(ary)
@ary = ary
@client = GData::Client::Blogger.new
end
def base(account, pass, url)
doc = txt_to_xml
# get token
@client.clientlogin(account, pass)
@client.prepare_headers
@client.post(url, doc)
end
def txt_to_xml
title = @ary[0].chomp
# content = @ary[2..@ary.size].join("").strip.gsub("\n","
# ")
t = @ary[1].chomp
if '' == t
time = Time.now.iso8601
else
t[10] = 'T'
time = t + ':00+09:00'
end
content = @ary[2..@ary.size].join("").strip
return make_doc(title, time, content)
end
def make_doc(title, n, content)
# n = Time.now.iso8601
# n = '2010-06-05T12:00:31+09:00'
doc = REXML::Document.new()
doc << REXML::XMLDecl.new(version="1.0", encoding="utf-8" )
entry = doc.add_element("entry", {"xmlns" => "http://www.w3.org/2005/Atom"})
entry.add_element("published").add_text(n.to_s)
entry.add_element("title", {'type'=>'text'}).add_text(title)
con = entry.add_element("content", {'type'=>'html'})
con.add_text(content)
return doc
end
end
txt_ary = ARGF.readlines
# この url は 自分の Blogger URL トップページソース内
# link rel='self' type='application/atom+xml' で始まる行のリンク先
url = 'http://your_blogger_name.blogspot.com/feeds/posts/default'
# Blogger のアカウントとパスワード
account = 'your_account@gmail.com'
pass = 'your_password'
m = MyBlogger.new(txt_ary)
res = m.base(account, pass, url)
if res.status_code == 201
p 'OK'
end
次の部分に,利用するbloggerのアカウント名を入力する.
url = 'http://[your_blogger_name].blogspot.com/feeds/posts/default'
次の部分に,利用するアカウント名とパスワードを入力する.
account = '[your_account]@gmail.com'
pass = '[your_password]'
スクリプトの使用法
以下では,簡単のため,上記スクリプトをblogger.rbというファイル名で保存したものとして話を進める.
htmlファイルを投稿するには,ファイルを第一引数としてスクリプトに与える.次は,test.htmlを投稿する例である.
$ blogger.rb test.html
標準入力から受け取ることも可能である.
$ blogger.rb < test.html
htmlファイルの書式を以下に示す.
blog-title
yyyy-mm-dd hh:mm
html contents ...
...
...
1行目はブログのタイトルを記述する.2行目は投稿日時を記入する.3行目以降には,投稿する文書をhtml形式で記入する.
参考資料
Blogger API から Postしてみる
gdata-ruby-util Project Hosting on Google Code