«前の日記(2009年 05月26日(Tue)) 最新 次の日記(2009年 05月28日(Thu))» 編集

日記のような何か

2002|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|08|09|10|11|12|
2020|01|02|03|04|06|07|08|09|10|11|12|
2021|01|02|03|04|05|07|08|10|11|12|
2022|01|02|03|04|05|06|07|08|10|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

ようこそいらっしゃいました。
あなたは今日人目、合計人目のお客様です(ちなみに昨日は人のお客様がいらっしゃいました)。
よろしければツッコミに足跡等を残していって下さいな。

My status ← skypeやってます。


2009年 05月27日(Wed) [長年日記]

_ [TCG][ruby][プログラム]ブシロードTCGカードリストダウンローダー

ヴァイスシュヴァルツやChaosといったブシロードのTCGのカードデータを公式ページのカードリストから取得するスクリプト。

過去に作ったChaos用スクリプトの改良版といった位置付け。

とはいっても取得できるデータはテーブル内のHTMLなので実際に使う際には各々のTCGに合わせたパーサを書かないといけませんが。

 require 'rubygems'
 require 'mechanize'
 require 'watir'
 require 'kconv'

 def getExpansionList(uri)
   agent = WWW::Mechanize.new
   page = agent.get uri
   (page/"div[@id='expansionList'] a").to_a.inject
([]){|array, link|
     array << link.inner_text
   }
 end

 def getCardList(uri, expansion)
   ie = Watir::IE.new
   ie.goto uri
   ie.link(:text, expansion.kconv(Kconv::SJIS, Kco
nv::UTF8)).click
   str = ''
   array = []
   n = 0
   begin
     flag = false
     ie.document.Links.each{|i|
       if i.Href =~ /cardno/
         array << i.Href
       end
       if i.InnerText == '≫'
         flag = true
       end
     }
     ie.link(:text, '≫').click if flag
   end while flag
   ie.close
   array
 end

 def getCard(uri)
   agent = WWW::Mechanize.new
   page = agent.get uri
   (page/'table.status td').to_a.inject([]){|array
, e| array << e.inner_html}
 end

例えばChaosのカードをYAMLにしたい場合はこんな感じで。

 require 'Ya2YAML'

 $KCODE = 'u'

 CHAOS_LIST_URI = 'http://chaos-tcg.com/jsp/cardli
st'

 list = {}

 getExpansionList(CHAOS_LIST_URI).each{|expansion|
   list[expansion] = []
   getCardList(CHAOS_LIST_URI, expansion).each{|ca
rduri|
     array = getCard(carduri)
     sleep 1
     card = {}
     name, kana = /(.+)<br><span class=\"kana\">(.
+)<\/span>/.match(array[1]).to_a.values_at(1,2)
     card['カード名'] = name
     card['カナ'] = kana
     card['カードNo.'] = array[2]
     card['性別'] = array[3]
     card['レアリティ'] = array[4]
     card['種類'] = array[5]
     card['属性'] = array[6]
     card['攻撃力'] = array[7]
     card['耐久力'] = array[8]
     card['攻撃力(補正)'] = array[9]
     card['耐久力(補正)'] = array[10]
     card['テキスト'] = array[11]
     card['フレーバー'] = array[12]
     card['エクスパンション'] = array[13]
     card['参加作品'] = array[14]

     list[expansion] << card
   }
 }
 puts list.ya2yaml

Googleカスタム検索

my recommend books