2009年 05月13日(Wed) [長年日記]
_ [TCG][Chaos][プログラム][ruby]ChaosTCGのエクセル版カードリストを作ろう(その1)
前にウチのTCGグループで話題に挙がったんですが、ブシロードの公式ページにあるカードリストは一覧性が悪いんですよね。一度に10枚づつしか見れないし。
その点D-0は頑張っていて、エクセルのワークシートをアップロードしてくれるので好感が持てます。おかげでデータベース作るのがとても楽。
まあそんなことからふとChaosTCGのエクセル版カードリストを作ってみようと思った次第。もしかするとどこかの誰かがもうやってるかもしれないけど、とりあえず軽く探しても見つからなかったので。
もちろん手作業で1つ1つ埋めていくような事はしません。そんなことしたら新しいカードセット出る度にうんざりしてしまいます。普段からソフトウェアの仕事してるんだからソフトウェアでやらないとね。
使う言語はRubyで。Mechanize使えば何とかなるかな?
とりあえず公式のカードリストのページを見てみると、所々にJavascriptが埋め込まれててちょっと面倒そう。一応「http: //chaos-tcg.com/jsp/cardlist?cardno=xxxxx」の形式で個々のカード情報にはアクセスできるみたいなのでちょっとやってみる。
- test_get_card.rb
require 'rubygems' require 'mechanize' agent = WWW::Mechanize.new page = agent.get("http://chaos-tcg.com/jsp/cardlist?cardno=#{ARGV[0]}") (page/'table.status td').map{|e| puts e.inner_html}
こんな感じで実行
ruby test_get_card.rb AP-013
実行結果(適当に整形してます)
<img src="../cardlist/cardimages/ap_013.gif" alt="カード"><br> <a href="JavaScript:showQuestion('AP-013');">≫ このカードに関するQ&A</a> 妖精メイド「エルミン」<br> <span class="kana">ヨウセイメイド「エルミン」</span> AP-013 女 C Chara 火 2 4 +3 +2 - りんご並木の落ち葉たき〜♪ OS:アクアプラス 1.00 ティアーズ・トゥ・ティアラ 花冠の大地
それっぽいのが取得できてますね。
_ [TCG][Chaos][プログラム][ruby]ChaosTCGのエクセル版カードリストを作ろう(その2)
個々のカードはさっきの方法で取得できるとして、カードを次々と取得するにはどうしたら良いでしょう?
公式のカードリストには個々のカードデータの下にカードリストが表示してありますが、これは1ページ10枚までなうえに、ページの遷移がJavascriptで行われるようになっているのでMechanizeではアクセスできません。
いろいろ考えた結果、以下のような方法で無理やりアクセスしてみることにしました。
- test_get_card_list.rb
require 'rubygems' require 'mechanize' agent = WWW::Mechanize.new os, no = /(\w+-)(\d+)/.match(ARGV[0]).to_a.values_at(1,2) until agent.get("http://chaos-tcg.com/jsp/cardlist?cardno=# {os}#{no}").search('table.status').empty? agent.page.links_with(:href=>/cardno/).map{|link| card_page = link.click no = /cardno=\w+-(\d+)/.match(card_page.uri.to_s).to_a[1] puts card_page.uri } no = sprintf('%03d', no.to_i + 1) end
実行結果
http://chaos-tcg.com/jsp/cardlist?cardno=AP-001 http://chaos-tcg.com/jsp/cardlist?cardno=AP-002 http://chaos-tcg.com/jsp/cardlist?cardno=AP-002SP http://chaos-tcg.com/jsp/cardlist?cardno=AP-003 http://chaos-tcg.com/jsp/cardlist?cardno=AP-003SR ...(中略)... http://chaos-tcg.com/jsp/cardlist?cardno=AP-098 http://chaos-tcg.com/jsp/cardlist?cardno=AP-099 http://chaos-tcg.com/jsp/cardlist?cardno=AP-100
これでカードデータの取得は目処が立ちました。
おぉスバラシス!さすがソフト屋さんw<br>公式サイトの作りが似てるからWSやサンマガなんかにも簡単に応用できそうですね。<br>これでちょっとはカオスをやろうかって気になってきたw(ぁ