はてなブックマークをダウンロードするスクリプト
はてなブックマークをダウンロードするスクリプトを書いてみました。はてなブックマークのサイトにアクセスして、各日ごとにXML形式で指定したディレクトリにブックマークを保存します。
ファイルhbl
#!/usr/bin/env ruby # -*- ruby -*- # $Id: hbl,v 1.2 2005/07/29 22:25:03 s-tanaka Exp $ require 'open-uri' require 'digest/sha1' require 'base64' require 'rexml/document' def get_wsse(user, pass) created = Time.now.iso8601 nonce = '' 20.times do nonce << rand(256).chr end passdigest = Digest::SHA1.digest(nonce + created + pass) return "UsernameToken Username=\"#{user}\", " + "PasswordDigest=\"#{Base64.encode64(passdigest).chomp}\", " + "Nonce=\"#{Base64.encode64(nonce).chomp}\", " + "Created=\"#{created}\"" end def http_get(uri, user, pass) open(uri, 'X-WSSE' => get_wsse(user, pass)) do |http| return http.read end end if ARGV.size < 3 $stderr.puts "usage: hbl [user] [pass] [dir]" exit 1 end user = ARGV[0] pass = ARGV[1] dir = ARGV[2] dir = $` if dir =~ /\/$/ date = 'latest' uri = "http://b.hatena.ne.jp/atom/feed?date=#{date}" loop do puts date feed = http_get(uri, user, pass) open("#{dir}/#{date}.xml", 'w') do |file| file.write feed end doc = REXML::Document.new(feed) isnext = false doc.elements.each('feed/link') do |elem| next if elem.attributes['rel'] != 'prev' uri = elem.attributes['href'] next if uri !~ /(\d\d\d\d\d\d\d\d)$/ date = $1 isnext = true end break unless isnext end
実行例。hblコマンドの引数として、はてなのユーザ名、はてなのパスワード、ブックマークを保存するディレクトリを指定します。
$ hbl ha-tan XXXX . latest 20050729 ...
Rubyのライブラリ万歳です。楽すぎ。