«前の日記(2009年 05月12日(Tue)) 最新 次の日記(2009年 05月14日(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|

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

My status ← skypeやってます。


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&amp;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

これでカードデータの取得は目処が立ちました。

本日のツッコミ(全1件) [ツッコミを入れる]
_ ひろゆ (2009年 05月14日(Thu) 03:01)

おぉスバラシス!さすがソフト屋さんw<br>公式サイトの作りが似てるからWSやサンマガなんかにも簡単に応用できそうですね。<br>これでちょっとはカオスをやろうかって気になってきたw(ぁ


Googleカスタム検索

my recommend books