Socialtunesからエクスポートした風のcsvをつくるrubyスクリプト
メディアマーカーにインポートしたかったので。
Nokogiriという、hpricotより早いとかいてあったHTMLパーサを使って、地道にhtmlを解析して、CSVに書き込んでいくだけの。
が、結局出来上がったCSVを眺めながらこんなのチェックしてたの!という思い出浸りが始まってきていろいろ面倒になってきて、今に至る。
というわけで、書いたのを。
メディアマーカーにインポートしたいだけなので、コメントも書かない私はASINかISBNくらいしか必要な情報はないのだけれど、インポートするときの取捨選択の参考のためにタイトル・もちぺたの有無・ラベルをとってみた。
Nokogiriさんは、CSSの書き方でタグを指定できるのが私にはとてもわかりよくて素敵。
できあがるCSVはこんなの。漫画ばっかり。
4063800180,*,書籍: ブレイザードライブ 2 (2) (ライバルコミックス),漫画
4758053588,*,書籍: 橙星 1 (1) (IDコミックス ZERO-SUMコミックス),漫画
4344812751,*,書籍: ヘタリア Axis Powers,漫画
4063145379,*,書籍: 蟲師 10 (10) (アフタヌーンKC),漫画
4088746023,*,書籍: ONE PIECE 巻52 (52) (ジャンプコミックス),漫画
4088744632,*,書籍: SKET DANCE 1 (1) (ジャンプコミックス),漫画
4088745892,*,書籍: NARUTO 巻ノ44 (44) (ジャンプコミックス),漫画
475752031X,,書籍: ニコイチ 3 (3) (ヤングガンガンコミックス),借,漫画
4575835374,,書籍: つぶらら 4 (4) (アクションコミックス),借,漫画
あとはエクセル的なので開いたり並べ替えたりしてなんとかなるような。
#! /usr/bin/ruby -Ku require 'rubygems' require 'nokogiri' require 'open-uri' class GetCSVFromSocialtunes def initialize @username = "username" @page = get_page(1) end def get_page(num) # ページ数を指定して、そのページのnokogiriさんを取得する uri = URI.parse("http://socialtunes.net/?mode=user&act=peta&uname=" + @username + "&page=" + num.to_s) @page = Nokogiri::HTML.parse(uri.read) end def get_lastpage_num # ぺた数/50の切り上げ数字をlastpageとする @page.css('li.selected').each do |li| li.content =~ /(\d+)/ @lastpage = ($1.to_f/50).ceil end return @lastpage end def get_itemlist(page) # 開いてるページから、商品リストを取り出す items = 50 itemlist = [] i = 1 items.times do item = [] page.css('div#peta' + i.to_s + '_box').each do |li| # ASINかISBNかどっちかわからないけど、どっちか (li.search('a').first.attributes['href']).to_s =~ /item\/(.*)\// asin = $1 # もちぺたがあれば*を、それ以外は""を。 peta = "" li.css('span.peta_own').each do |p| peta = "*" end # タイトルを取得 title = li.search('a').first.attributes['title'] # ラベルを。 tags = [] li.css('span.label_s > a').each do |label| tags << label.content end itemlist << [ asin, peta, title, tags ] i+=1 end end return itemlist end def make_csv # get_itemlistでつくったitemlistの配列を1行ずつ、じめじめcsvの最後に追加 f = open("socialtunes.csv", "a") get_itemlist(@page).each do |page| f.puts page.join(',') end f.close end def run i = 0 get_lastpage_num.times do @page = get_page(i) make_csv i+=1 end end end a = GetCSVFromSocialtunes.new a.run
小さい満足。