Deck Builder for DM 用スクリプト

http://d.hatena.ne.jp/dmd/ さんとこのリストをCSV 化(元CSV)して,
その csv を指定して,Deck Builder for Duel Masters
http://www.tateyama.or.jp/~imachan/dm/
で使えるCSVを作成する.

#!/usr/bin/env ruby

require 'optparse'
require 'csv'

class TRDM
  def run
    @dan = 25

    ARGV.options do |o|
      o.on('-d dan_name', 'dan name [25 or 26]') {|d| @dan = d}
      o.parse!
    end

    CSV.open(ARGV[0], 'r') do |row|
      unless /\d/ === row[0]
        next
      end
      # 弾数, 弾内の通し番号,全体の通し番号,パック名,レアリティ,
      # カード名,文明,分類,種族,コスト,
      # ,パワー,能力,,,,,

      # №,カード名,文明,種別,種族,
      # コスト,パワー,テキスト,R
      no, name, color, type, cr_type, cost, power, text, r = row

      no = make_no(no)

      case @dan
      when '25'
        dan_num = '25'
        pack_name = '極神編 人造神の創造'
      when '26'
        dan_num = '26'
        pack_name = '極神編 超絶VS究極'
      else
        raise 'unknown dan ' + @dan
      end
      dan_str = "DM-#{dan_num}"

      new_t = [dan_str, no, make_id(dan_num, no), pack_name, make_rare(r),
        name, nl2sla(color), type, nl2sla(cr_type || ''), cost, 
        1, power, make_text(text),
        '4', '4', '4', '4', 'ダミー'] # デッキに入れられる枚数
      print new_t.join(",") + "\r\n"
    end
  end

  def nl2sla(str)
    str.gsub!(/\n/, "/")
    str
  end

  def make_text(text)
    text.gsub!(//, "")
    text.gsub!(/\n/, '\r\n')
  end

  def make_rare(r)
    case r
    when 'S'
      ''
    when ''
      ''
    when ''
      ''
    when ''
      ''
    when ''
      ''
    else
      raise 'error unexpected condition for ' + r
    end
  end

  def make_id(dan, local_id)
    dan + local_id
  end

  def make_no(no)
    if /^s/ === no
      no.sub!(/^s/, '')
      'S' + ('%02d' % no)
    else
      '%03d' % no
    end
  end
end

if File.basename(__FILE__) == File.basename($0)
  TRDM.new.run
end

csv を指定して,イメージをダウンロードするスクリプトを生成する.

#!/usr/bin/env ruby

require 'optparse'
require 'csv'

class TRDM
  def run
    @dan = '25'

    ARGV.options do |o|
      o.on('-d dan_name', 'dan name [24-26]') {|d| @dan = d}
      o.parse!
    end

    CSV.open(ARGV[0], 'r') do |row|
      unless /\d/ === row[0]
        next
      end
      # to
      # http://dm.takaratomy.co.jp/card/list/images/card/yami/dm23-045.jpg

      # from
      # №,カード名,文明,種別,種族,
      # コスト,パワー,テキスト,R
      no, name, color, type, cr_type, cost, power, text, r = row

      no = make_no(no)

      case @dan
      when /2[4-6]/
        dan_num = @dan
      else
        raise 'unknown dan ' + @dan
      end
      dan_str = "dm#{dan_num}"

      prefix = 'http://dm.takaratomy.co.jp/card/list/images/card'
      suffix = '.jpg'
      new_t = [prefix, make_color(color), make_fname(dan_str, no, suffix)]
      print new_t.join("/") + "\r\n"
    end
  end

  def make_color(color)
    case color
    when /\n/
      'rainbow'
    when //
      'hikari'
    when //
      'mizu'
    when //
      'yami'
    when //
      'hono'
    when /自然/
      'sizen'
    else
      raise 'unknown color ' + color
    end
  end

  def make_fname(dan, local_id, suffix)
    lid = nil
    if /^s/i === local_id
      lid = local_id
    else
      lid = ("%03d" % local_id)
    end
    dan + '-' + lid + suffix
  end

  def make_no(no)
    if /^s/ === no
      no.sub!(/^s/, '')
      's' + ('%02d' % no)
    else
      no
    end
  end
end

if File.basename(__FILE__) == File.basename($0)
  TRDM.new.run
end

DLしたファイル名を Deck Builder 用のファイル名に変更するための
スクリプトを作成する.

#!/usr/bin/env ruby

class Ren
  def run
#    from = ARGV.shift
#    to   = ARGV.shift
    from = 'dm'
    to   = 'DM-'
    ARGV.each do |ffname|
      tfname = ffname.sub(/#{from}/, to).sub(/s/, 'S')
      puts "mv #{ffname} #{tfname}"
    end
  end
end

if File.basename(__FILE__) == File.basename($0)
  Ren.new.run
end

めちゃ適当な感じ.

これはこれで良いんだけど,これだとカード足りないんだよなぁ.
構築済みのやつとか.手かhttp://www27.atwiki.jp/duel_masters/ さんとことかか?