Hatena::Grouprubyist

たばさの RSSフィード

05/05(火) 2009

はてブ,エクスポートでhtmlからrssに

| はてブ,エクスポートでhtmlからrssに - たばさの を含むブックマーク はてなブックマーク - はてブ,エクスポートでhtmlからrssに - たばさの

調子が悪くてrss版が落とせなかった。atomも。htmlはダウンロードできた。

atomは一度成功と思ったらリンクがブクマ元のほうがなくてはてブのアドレスになってる気が。

まあhtmlのを変換すればいいか、と思いどうにか変換してyahooにインポート!したがどうも失敗。

仕方ないので分割してみた。

#!ruby
# -*- encoding: "UTF-8" -*-
require 'rss'
require 'time'

rss_feeds = []
rss_urls = []
title="" 

if ARGV[1]==nil
  puts "usage:%0 infile outfile [maxItemNumPerFile]\n hateb_backup_html to rss"
  puts opt.to_s
  exit
end

rsslist=[]

ary=[]
n=0
data=(File.readlines(ARGV[0])*"").gsub(/\n/){""}.gsub(/<\/A>/i){"</A>\n"}.gsub(/<DT>/){"\n<DT>"}.split("\n")
data.each{|i|
  i.scan( /<DT><A HREF="(.*)" ADD_DATE="(\d+)".*>(.*)<\/A>/i){|u,d,t|
    #break if $debug && n>5 
    ary<<[u,d,t]
    n+=1
  }
}
$stderr.puts ary.size
n=0

# cf. http://homepage2.nifty.com/takaaki024/tips/programs/ruby/ruby.html
onePercent=ary.size/100
onePercent=1 if onePercent==0
max=ary.size
max=ARGV[2].to_i if ARGV[2]
h=[]
num=0
0.step(ary.size, max){|i| h<<i}

h.each{|start|
  num+=1
  iary=ary[start,max]

  rss = RSS::Maker.make('1.0') do |maker|
    # RSSファイル1つに対して1回だけ設定する項目
    maker.channel.about       = ''
    maker.channel.title       = 'はてぶ'
    maker.channel.description = 'サイトの説明'
    maker.channel.link        = 'http://b.hatena.ne.jp/hatecha/'
    maker.channel.date        = Time.now

    maker.image.title         = ''
    maker.image.url           = ''

    # 更新日の新しい順に並べ替えるオプション
    maker.items.do_sort = true

    iary.each_with_index{|a,n|
      url,date,title=a
      maker.items.new_item do |item|
        item.link            = url
        item.title           = title
        item.description     = ''
        item.dc_subject      = ''
        item.content_encoded = ''
        item.date= Time.at(date.to_i)
      end
      #$stderr.print"." if n%onePercent==0
    }
  end
# 書き出す
  open("#{ARGV[1]}_#{num}.rss","w"){|f|
     f.puts rss.to_s
  }
  print num,","

}

1000フィードずつにしたらインポートできた。数が少ない気がするけどまあいいや。あとで調べようか。

そうこうしてるうちにRSS版が落とせた。んー。


メモ:

unix timeをあーでもないこーでもないと変換したら一時間ずれた。などとやったあとTime.at発見。まああるよね。

nkfutf-8オプションwをずっとuに間違ってた。エラーにはならないから。

・もっと読みやすく書けないものか



あーでもないっていうのは

irb(main):009:0> Time.parse("1970-01-02")
=> Fri Jan 02 00:00:00 +0900 1970
irb(main):010:0> Time.parse("1970-01-01")
ArgumentError: time out of range

localだから?

irb(main):001:0> Time.at 0
=> Thu Jan 01 09:00:00 +0900 1970
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090505
カレンダー
<< 2009/05 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
archive Error : RSSが取得できませんでした。