?Bのエントリを日ごとにTypoに登録するスクリプト
$ ruby atom2entry.rb "http://b.hatena.ne.jp/holysugar/atomfeed?date=20060719" 20060719
cronで次の日になってから回す.
Typo用なので書式はmarkdown決め打ち.
atom2entry.rb
#!/usr/local/bin/ruby -Ku require 'rexml/document' require 'open-uri' require 'blog/client' require 'cgi' @file = ARGV[0] or exit @date = ARGV[1] or exit @date = Time.parse(@date) @date = Time.local(@date.year, @date.mon, @date.day, 14, 59, 0) # 09:00 @url = 'http://hostname/backend/xmlrpc' @apikey = '' @user = 'USERNAME' @pass = '********' def main open(@file, 'r') {|f| doc = REXML::Document.new(f) entries = doc.get_elements('//entry') puts entries.size entries.each{|e| title = e.get_elements('title')[0].text rescue '' url = e.get_elements('link[@rel="related"]')[0].attributes['href'] tags = e.get_elements('dc:subject').map{|t| t.text } rescue [] text = e.get_elements('summary').empty? ? '' : e.get_elements('summary')[0].text yield(title, url, tags, text) } } end def process has_contents = false output = '' main {|title, url, tags, text| has_contents = true tag = "\[#{tags.join(',')}\]" output << %|- [「#{title}」](#{url})#{tag} #{text}\n| } yield output if has_contents end def put_weblog(text, datetime = Time.now) client = Blog::Client.new(@url, @apikey, @user, @pass) client.metaWeblog_newPost(1, { 'title' => 'bookmark', 'description' => text, 'dateCreated' => datetime, 'mt_keywords' => 'bookmark', }) end process do |output| puts @date puts output put_weblog(output, @date) end
ていうかPlagger一度整理しないと><