ひこぱっちのメモ

読者です 読者をやめる 読者になる 読者になる

ひこぱっちのメモ

特撮系、プログラミング、好きなもの、カラオケなど普段の気になったこと等をメモするブログです。

Rubyのスクレイピングで遊戯王カードbot作って神のカードを当ててみた

◆その他ワイワイ ◆その他ワイワイ-好きなもの ◆テクノロジー ◆テクノロジー-プログラミング

以前Rubyクローラー作成、スクレイピング制作を少ししたので、今回はRubyで何か興味あるものをスクレイピングすることにしました。
そして、遊戯王カードを様々なところからスクレイピング、編集してツイートするTwitter botを作りました。

遊戯王カードをドローし続ける遊戯bot

1時間毎に、約6000枚の遊戯王カードの中からランダムに1枚引いて、そのカード画像をツイートするだけのbotを昔作りました。
そろそろ6000回目のドローに達しそうなので記録として残しておきます。
こんな感じのbot


他、主な仕様としては以下の通り

  • 属性、レベル(ランク)、種族をハッシュタグにして同じ数値、種族のカードを調べやすくする
  • 融合・儀式・シンクロ・エクシーズなど特殊な召喚方法のモンスターも召喚方法をハッシュタグ
  • ペンデュラムモンスターはペンデュラムスケールもハッシュタグにする
  • カードの効果はカード画像とは別に、読みやすく編集して大きく記載しておく


コトの始まり

小学生の頃は遊戯王が流行ってましたが、ちょっとだけ手を付けて離れた自分。
(どっちかっていうとこのブログでもよくアクセスのあるガッシュカードにハマってました。)
大学でたまたま先輩が遊戯王をしているところを見て、結構変わってることに驚き、少し興味が。

で、スマートフォンアプリ『遊戯王デュエルリンクス』の事前登録が発表された時に「せっかくだし、今までの遊戯王カードをおさらいしておきたい」と思い、作ることに。
※この時はデュエルリンクスのカード環境が現行のものとは変更されて配信されると知りませんでした(汗)


遊戯王 デュエルリンクス
開発元:KONAMI
価格:無料(アプリ内購入あり)
平均評価:4.6(合計608,813件)
ダウンロード:1,000万回以上
(2017年2月8日時点)

今までドローしたカードを幾つかピックアップ

遊戯王そんなに詳しくない自分が選んでるので、決闘者の人から見たらおなじみのカードかもしれないけど、そこはお許しを。

青眼の白龍


言わずと知れた遊戯王を代表するカードのひとつ。
初期イラストも人気ですが、自分はこっちのイラストが好きです。

クリフォート・アセンブラ

https://pbs.twimg.com/media/CsXs6DaVMAATqVL.jpg
機械族のペンデュラムモンスター。
なによりもエラー出力&文字化け風のフレーバーテキストに驚きました。
遊戯王の数少ないお遊びが見れて面白いです。
(しかもこれ、ちゃんと解読できるんですね

究極幻神 アルティミトル・ビシバールキン

https://pbs.twimg.com/media/CzX8-XDVQAExbwp.jpg
シンクロモンスターで、まさかのレベル0。
名前とイラスト枠の間に見事に何もありません。

No.95 ギャラクシーアイズ・ダークマター・ドラゴン

https://pbs.twimg.com/media/Cy6IFWwUQAAno-t.jpg
(左詰めの)ランク9のエクシーズモンスター。
このbotを作るに関して、一番長い名前、効果、ペンデュラム効果は調べて、それがちゃんと枠内に収まるように設計したのですが、このモンスターは収まってませんでした(汗)
最長の名前と思われる『No.92 偽骸神龍 Heart-eartH Dragon』は半角英語だから収まってたけど、油断した~(汗)
https://pbs.twimg.com/media/Cy56WteUoAAQgKG.jpg

ウィジャ盤

https://pbs.twimg.com/media/CwbIAPVUAAAhj6I.jpg
フィールド上に「DEATH(海外版はFINAL)」の文字が揃えばデュエルに勝利できるカード。
このbotは既に「E」「H」も引いてるのであと少しです。

ラーの翼神竜


4277回目のドローで見事引き当てた神のカード。
botでただ引いただけなのにこの時はめちゃくちゃ嬉しかったです。


bot制作においてしたこと

カード画像のスクレイピング

nokogiriを用いて行いました。
同じカードでレアリティが異なるカードは低い?レアリティの方を選択。

カードの効果のスクレイピング、編集

nokogiriを用いてカードのテキストを取得。
そのままではリミットレギュレーションや余計な情報が載ってる場合があるので編集。
カードの召喚方法の分類、効果文に適切に改行入れて読みやすくしたり、ペンデュラムカードのペンデュラム効果とモンスター効果を分けたり細々とした作業をします。
カード画像とは別にスクレイピングしてるので、合ってるか簡単に照合も。

カード画像とテキストを枠に収めて1枚の画像にまとめる

RMagickを使用。
モンスター用の枠、魔法・罠用の枠、ペンデュラム用の枠にカード画像と、編集したテキストをはみ出さないように載せます。

カードの相場を調べる

カードってたまにとんでもない値段がつくのをご存知でしょうか?
カードの相場が知りたかったのでAPIでカードを検索してリンク掲載。

Twitterに投稿

Ruby Twitter Gem使用。

以上のことを全自動で毎時動作させています。
あと、今回のテキスト編集に当たって、一応大まかな遊戯王のテキストの仕様の勉強(?)。
今の遊戯王の細かな種類が思ってたより多かった…(汗)

まとめ

遊戯王カードに関しては知識が10年ぐらい前で止まっていたので、色んな知らないカードがいっぱいで、驚きの連続でした。

まだ残りの神のカード『オシリスの天空竜』と『オベリスク巨神兵』が引けてませんが、気長にこのbotの引くカードを見守っていきたいと思います。

ついでに、5枚揃った時に効果が出る『封印されしエクゾディア』や『ウィジャ盤』が揃うのも心待ちにしてます(果たして揃うのだろうか。

Rubyによるクローラー開発技法

Rubyによるクローラー開発技法

リンク召喚、リンクモンスターについて

2月17日、フラゲ情報から新しくリンク召喚という召喚方法が追加されることが判明しました。
詳しいリンクモンスターのカード画像などは他サイトに任せるとして、このリンクモンスターの登場で新しくbotの仕様も変えることに。

リンクモンスターの特徴

  • レベルを持たない
  • 守備力を持たない(LINK数が記載されてる)
  • 8方向に向いたマーカーが付いた

これを現状のbotに適用すると、恐らくハッシュタグでLINK数、レベルや守備力の表記を無くす等の変更ですかね…。
マーカーの方向は未定です。

それにしても、リンクモンスター置かないとEXデッキのモンスターが展開できないとはなかなかな縛りを入れてきましたねKONAMIさん…。

今までならシンクロやエクシーズ、ペンデュラムを追加するだけで良かったのに、過去作のキャラクターもリンクモンスターを使わざるを得ない状況にしてしまいました。

これがどう影響するのか、若干不安ですが、続報を待っておきます。