はてブをgoogleブックマークへ引越し

post2gbookmarks.rb

以上を参考にして はてブgoogleブックマークへ引っ越すスクリプトを書いてみた。

http://b.hatena.ne.jp/n9d/config?mode=exportにある。
http://b.hatena.ne.jp/dump を 以下のスクリプトと同じディレクトリのhateb.atomとして保存して実行するだけでOK
googleのレスポンスが遅いのかスクリプトのスピードが遅いのか、それともはてブがあまりにも巨大なのかわからないが結構時間がかかる。
まあ、一度引っ越せば問題ないからいいんだけど。
でもgoogleブックマークにはexport無いんだよな…ガメるだけってMSと同じスタイルじゃん。

追記:メモリを食いすぎて遅くなるためブックマークを登録するたびにログインしなおすように書き直した。

#!/usr/bin/ruby -Ku

require 'rubygems'
require 'mechanize'         # gem install mechanize
require 'nkf'
require 'rexml/document'

def setbmk(title,bkmk,labels,annotation)
  agent = WWW::Mechanize.new

  nkfopt = '-s -m0'   # Shift JIS に変換する。偶然のMIME文字列をデコードしない。


  # Google にログイン
  page = agent.get('http://www.google.com/bookmarks/?hl=ja')
  form = page.forms.first
  form.Email  = USERNAME     # Googleユーザ名
  form.Passwd = PASSWORD     # パスワード
  res = agent.submit(form)

  # Google Bookmarks にブックマークを投稿
  page = agent.get('http://www.google.com/bookmarks/mark?op=add&hl=ja')
  form = page.form('add_bkmk_form')

  form.title=NKF.nkf(nkfopt,title)
  form.bkmk=NKF.nkf(nkfopt,bkmk)
  form.labels=NKF.nkf(nkfopt,labels)
  form.annotation=NKF.nkf(nkfopt, annotation)
  res = agent.submit(form)
  puts res.code == '200' ? 'OK': 'NG'
end

i=0

doc = REXML::Document.new(open('./hateb.atom'))
doc.root.each_element('/feed/entry'){|entry|
  title,bkmk,labels,annotation='','','',''
  entry.each_element('title'){|t| title=t.texts.join.strip}
  entry.each_element('link'){|c| bkmk=c.attributes.get_attribute('href').value if c.attributes.get_attribute('rel').value=='related'}
  tag=[]
  entry.each_element('dc:subject'){|t| tag.push(t.texts.join.strip)}
  labels=tag.join(',')
  entry.each_element('summary'){|t| annotation= t.texts.join.strip}
  print i+=1
  setbmk(title,bkmk,labels,annotation)
}