livedoorクリップのエクスポート(ファイルをパースする)

livedoorクリップのデータをエクスポートすると、RSS2.0で保存される。で、タグとして入力した内容は

SHOP

と出力される。これは、RSS1.0の拡張として利用されているDublin Coreらしい。今、RubyRSS Parseでコレが読み取れないので調べてみると、RSS 2.0 NotesにはRSS2.0は同じ意味を持つ拡張は禁止とある。*1

だからdc_subjectsのメソッドが見つからないのか…。確かにタグはcategory要素が適切だと思うのと、どうせやっつけ仕事のツールになるので元のRSSを変換してしまうことにした。

今、試している、Libedoorクリップのエクスポートデータを読み込んで表示するスクリプトです。http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+ParserのTutorialそのままです。ここまで動けば後は、Mechanizeでgoogle bookmarkに登録してしまえば、移行できると思う。

#! /usr/bin/env ruby

require 'rss/2.0'
#require 'rss/dublincore'

def print_items(feed)
  feed.items.each do |item|
    puts "#{item.title}"
    puts "#{item.link}"
    puts "#{item.description}"
    unless item.categories.empty?
      item.categories.each { |tag|
        puts "#{tag.content}"        
      }
    end
  end
end

ARGV.each do |fname|
  feed = nil
  begin
    text = File.read(fname)
    # Dublin Coreが動作しないので無理矢理変換する
    text.gsub!(/<dc:subject>/,"<category>")
    text.gsub!(/<\/dc:subject>/,"</category>")
    feed = RSS::Parser.parse(text)
  rescue RSS::Error
  end

  if feed.nil?
    puts "#{fname}はRSS 0.9x/1.0/2.0, Atom 1.0のいずれでもありません。"
  else
    print_items(feed)
  end
end

*1:RSS2.0仕様の原文を読んでみたが、そのような記述は見あたらない。