?Bのエントリを日ごとにTypoに登録するスクリプト

NGワード: それPla(ry

$ 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一度整理しないと><