2010年 02月09日(Tue) [長年日記]
_ [TCG][プログラム][ruby]ブシロードTCGカードリストリーダー
以前同じものを作ったんだけど、IEが7になったせいか、文字コードのあたりでエラー吐くようになってたので、クラスっぽく書き直した。本当は1行直すだけでOKな気がしたけど。
#coding: utf-8 require 'rubygems' require 'mechanize' require 'watir' module BushiroadTCGReader class ExpansionList include Enumerable def initialize(uri) @list = [] agent = WWW::Mechanize.new page = agent.get uri (page/"div[@id='expansionList'] a").to_a.each{|link| @list << CardList.new(uri, link.inner_text.strip) } self end def [](index) @list[index] end def each @list.each{|i| yield i } end end class CardList include Enumerable attr_reader :expansion def initialize(uri, expansion) @uri = uri @expansion = expansion @list = [] end def get ie = Watir::IE.new ie.goto @uri ie.link(:text, @expansion).click sleep 2 str = '' array = [] n = 0 begin flag = false ie.document.Links.each{|i| if i.Href =~ /cardno/ array << Card.new(i.Href) end if i.InnerText == '≫' flag = true end } ie.link(:text, '≫').click if flag end while flag ie.close @list = array self end def [](index) @list[index] end def each @list.each{|i| yield i } end end class Card include Enumerable def initialize(uri) @uri = uri @array = [] end def get agent = WWW::Mechanize.new page = agent.get @uri @array = (page/'table.status td').to_a.inject([]){ |array, e| array << e.inner_html } self end def [](index) @array[index] end def each @array.each{|i| yield i } end end end
Ruby1.9っぽいけど、Nokogiriが動かないので1.8.7でのみ確認。
#coding: utf-8 require 'bushiroad' require 'kconv' e = BushiroadTCGReader::ExpansionList.new( "http://svsm.jp/jsp/cardlist") e[3].get[7].get.each{|i| puts i.tosjis }
と書くとこんな結果。
<img src="../jsp-material/img/t044.gif" alt="カード"><br> <a href="javascript:void(0);" onclick="JavaScript:showQu estion('No_T044');">≫ このカードに関するQ&A</a> 浅倉 南<br><span class="kana">アサクラミナミ - マネージ ャー</span> <a href="cardlist?cardno=No_T045">上杉 達也</a><br><spa n class="kana">ウエスギタツヤ - スタート地点</span> No_T044 U サンデー タッチ <img src="../jsp-material/img/icon_woman.gif"> 2 2500 3000 【約束して、必ず勝つって】<br>【自】〔ベンチ〕このカード がサポートした時、<font color="red">あなたのリングに<img src="../jsp-material/img/icon_man_s.gif">がいて、あなた のリタイヤが相手より多いなら、</font>そのアタックはパート ナーアタックになる。<br><img src="../jsp-material/img/ic on_hiroin_b.gif"><img src="../jsp-material/img/icon_supo tu_r.gif"> -<br> - -
要望を出した人登場wありがとです。<br>プログラム的な詳しいことは解らんけど、使いそうなカードは個人的に修正していきますので〜