ジジのマイナーカードを救うの会

アクセスカウンタ

zoom RSS 広島フェスタで学んだこと(前編)

<<   作成日時 : 2013/10/21 22:01   >>

ブログ気持玉 0 / トラックバック 0 / コメント 1

こんばんは、ジジです。
広島フェスタでは8月が猛威をふるいましたね。
そんな中、優勝したあおいさん(・・・でいいんだよね)は本当におめでとうございます
とても丁寧なプレイングをニコ生で見ながら、色々と勉強させてもらいました。


さて、広島フェスタで忘れられない事件が一つありました。
そう、こいつです。

画像


相手依存ではありますが、一度発動さえしてしまえばループ待ったなしのカード。
もちろんストーカー等でループして、クドあたりがイグニッションして1shotを決めます。

実は私、このカードの効果を知りませんでした。
とはいうのも、カードを検索するとき、ALR様を利用させていただいているのですが、そこにあるテキストが本来のものと違っていたのですね。
もちろん、大量にカードデータのあるlyceeにおいて、あそこまで秀逸な検索エンジンを提供していただいているALR様には感謝なのですが、ここである考えが沸いてきました。

「カードは公式のが一番あてになるんだけれど、検索機能がないのがなぁ」

公式は恐らく、印字しているカードテキストそのものがDBに格納されています。
それは、誤字エラッタ等もそのまま格納されていることからもその信頼度はある意味高いです。
しかし、公式HPのカードリストはカード名や一部の機能でしか検索できません。
たとえば、「ターン1制限ないカードってどれかなー」と思った時にマイナス表記を使って除外する、と言ったことが出来ないのです。
また、「2コストの特殊能力ないかなぁ」とかを正規表現を使って検索することもできません。(\w\wとかで)
カードが持つパラメータをそれぞれ正規表現で検索することが出来れば、ほぼ最強のlyceeカードDBが出来るのではないかと思いました。



そんなわけで、個人的に使用するためのカードDB作成の道のりです。
全く以て面白コンボとは関係ないので、興味無い人は回れ右ですね。




@DBを入手する。
と言っても、lycee公式HPを参照すればいいだけですけれど。
しかし、カードテキストは前述したとおりに膨大です。
そこで、不要な情報を削除した状態で抽出する必要があります。
今回は
画像

↑のような、画像の一覧よりも

画像

↑のような、テキストだけの一覧表示の方が好まれますね。


で、後者のソースを覗いてみます。
画像

必要そうな情報は揃っていますね。

それでは、全ページのダウンロードをします。
そもそも、普通のブラウザでのアクセス以外での用途に使っていいのか、利用規約を読んでみましょう。
法律上は問題ないはずですが、後でもめるのもつまらないですしね。
画像


クリックしてみます。

画像


スタッフの溢れるやる気が感じられました。
しかも、HTTPサーバのバージョンまで見えます。「どこからでもかかってこい」という自信の表れでしょうか。
これ、apachekillerとかに対応しているんでしょうかね?
知的好奇心がそそられますが、それをやったら本気でお縄につくので、我慢します。


さて、とりあえずよくわからないけれど利用規約がないので
「常識的なアクセスなら問題ないだろう」
と判断しました。

今度はURLから、どのように情報制御をしているかを見ます。

↓が、リスト表示のカードリストのURLです。
http://www.lycee-tcg.com/card_list/index.cgi?page_sort=2&page_list=2&page_out=16&page_now=0

URLから判断するに、どうやら4つのパラメータを使用して、ユーザのアクセス制御をしているようですね。
page_sort
page_list
page_out
page_now

色々確認した結果、以下のようなパラメータと推察できます。
page_sort・・・ページのソート順。詳細不明
page_list…「1」が画像リスト、「2」がテキストだけのリスト
page_out…1ページに表示するカードの枚数
page_now…表示しているページ


つまり、「page_out」と「page_now」を書き変えれば、全件取得は出来そうです。
とはいえ、いきなりpage_outを9999とかにすると、サーバにあり得ない負荷が(おそらく)かかって
サイバー攻撃扱いになる可能性があるので絶対にやめましょう
なので、以下な感じでソフトにアクセスします。
ベタなC#ですけれど。
=====================
Int32 now = 0;
string url = "http://www.lycee-tcg.com/card_list/index.cgi?page_sort=2&page_list=2&page_out=20&page_now=";
WebClient wc = new WebClient();


StreamWriter sw = new StreamWriter(@"C:\work\lycee.txt", false,System.Text.Encoding.GetEncoding("shift_jis"));
for (int i = 0; i < 490; i++)
{
Console.WriteLine(now);
Stream st = wc.OpenRead(url + now.ToString());
StreamReader sr = new StreamReader(st,
Encoding.GetEncoding("euc-jp"));
sw.WriteLine(sr.ReadToEnd());

sr.Close();
st.Close();
now++;
System.Threading.Thread.Sleep(60000);
=====================
60秒に一回、20枚のカードテキストをリストのHTMLをC:\work\lycee.txtに書き込みます。
変数nowを変化させて、ページ番号を毎回加算していっています。
非常に良心的なアクセス頻度です。
ぶっちゃけ、手でやった方が早いレベルです。

あと、見て分かると思いますが、何故か公式HPの文字コードはEUCです。
すこぶる使いにくいので、SJISに変換しています。
そんなわけで、これでデータを取得しました。


AHTML → XMLに変換する。
さて、HTMLは取得しましたが、それだけでは検索ツールは作れません。
きちんとしたラベルを作成する必要があるのですね。

この辺は、前のようにあまり詳しく書けないので、ざっくりと書きます。
公式HPのソースを読んだ方ならわかると思いますが、それぞれのカードは各テーブルで記載されています。
なので、そのテーブルごとにタグを付けてあげれば、パースしやすいXMLの作成が可能です。
めっちゃ置換しまくって、出来たのが以下のような感じのもの。

画像


それぞれのパラメータがタグ化されています。
閉じタグが未変換ですが、そこは現在鋭意置換中です。


そんなわけで、XMLファイルができました。
あとはこいつをパーサー(XML解析するアプリケーション)に噛ませれば出来上がりです。
折角なのでパーサーも作ってみましょう。

……3rd決勝までに……(次回に続く・・・かも)

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(1件)

内 容 ニックネーム/日時
新米ブロガーみほみほです(○*´⌒`Pq)★。+゚べりーぐっと!゚.:。+゚ジジさんのブログって本当に面白いですよね(´∀`*)ジジさんのようなブログが書きたいと思ってる女の子です*。・+(人*´∀`)ウットリ+・。*よければ、みほのアメブロも見てくれませんか??あっ!わけありでコメント止めちゃってて、メアドに直メほしいです(◎>U<◎)ブログ友になってください(*#′∀`艸)
mihomihohappy@docomo...
2013/10/31 02:50

コメントする help

ニックネーム
本 文
広島フェスタで学んだこと(前編) ジジのマイナーカードを救うの会/BIGLOBEウェブリブログ
文字サイズ:       閉じる