忍者ブログ
過去の結果感想とか考察とかのまとめを「前置き」の「最初に」に置きましたので、ブログの読み込み遅い時とかはご活用をー。
* admin *
[14]  [149]  [148]  [147]  [146]  [145]  [144]  [143]  [142]  [140]  [139
     
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

アドベントカレンダーの記事からだいぶ時間も経ちましたが。
前回の続き、いきます!!

前回のPHPを動かすまでから、今回は、
どのようにしてデータを切り取って引っこ抜いていくのか?
の話になりますね。
多分。

拍手[0回]



前回、とりあえず結果ファイルを読み込ませるまでは行きました。
じゃあ次は、ソースを見ましょう!!


……ソースの見方はわかりますかね?

chromeの場合は、適当なページ内の位置を右クリックし、ページのソースを表示をクリック。
そしてこれは多分多くのブラウザで同様です。



めっちゃ文字列が並んでますね!
これを読んで、使えそうなところを使っていきましょう。
ちなみにソースの表示の仕方はCtrl+Uview-source:をhttp ://やfile ://の前につけるなどの方法もあります。
また、「その他のツール」から「デベロッパーツール」を選ぶことで複雑なソースを読みやすくなったりもしますが……まあやることは単純なのでそこまでは要らないでしょうね。





まずは……キャラクター名!!
戦闘開始時に居る「キャラクターの名前」を取得していきましょう。

さらに装備・スタイルも「キャラクターの名前」と紐付けて取得し、攻撃の際のダメージとキャラクター名を照らし合わせれば、今回の最低限の目標が完了しますね。
戦闘開始時に居ないエイドや召喚のデータはなんか取るのめんどいので、そういう意味でもそこで照らしておくのが一番楽です。


さてさてキャラクター名、どこから取るのがいいでしょうか?
うーん……


ここ!

……いや別にここに限らないのですが、まあここってことで。

さて、ソースの中でここに当たりそうなのはどの辺かな?
Ctrl+Fでページ検索機能を出して、ソースの中を検索してみましょう。

手がかりとなりそうなのはキャラクター名やEnoもありますが……ここはPT名の
破壊!破壊!破壊!
で検索を。



検索結果は二個ありますが、まあ上の方で間違いないでしょう。
なんかそれっぽいこと書いてありますしね!

じゃあPHPの構文で、ここから必要な文字列を、どうやって引っこ抜くか!
preg_match_allを使いましょう。
$pattern1 = '/<TABLE WIDTH=850 CELLPADDING=5 CELLSPACING=0 BORDER=0><TR>(.*?)<BR><BR><BR>/s';
preg_match_all($pattern1,$src,$outa0);
こう書くと、preg_match_allくんは、
・1行目にある$pattern1の条件で、
・読み込んだ結果ファイルである$srcの中からそれにあったものを抜き出して、
・特に$pattern1中の条件及び(.*?)に合っている部分を$outa0という形で
書き出してくれます。


すなわち、

この青くなってる部分を$outa0くんという名前で読んでくれるわけですね。


前回のpre1.phpの中のecho $src;を消して、その辺に上の文字列と、
print_r($outa0);を一緒に入れてみましょうか。



……さてはこれもソースを見ないとわかりにくいな?
ソースを見ましょうか。


OK。

$outa0の配列、つまりarrayの中の[0]番目の[0]番目と、[1]番目の[0]番目に、それぞれ検索結果が入っています。


$outa0は実際には、
$outa0
┣[0]━[0]━検索結果1
┗[1]━[0]━検索結果2

のような構造の配列になっていることがわかりますね。
……わかりません?
まあわからなくても大丈夫です。なぜなら、[0][0]も[1][0]も対して変わらないからですね!
もっというと[1][0]指定しておけば基本的には大丈夫です。

まあそれは見れば分かる通り、[1][0]番目の配列中には(.*?)にあたる部分、というよりは()の中の部分しか入っていません。
じゃあ.*?って何?うーん……
すべてです。

もう少しちゃんとした言い方だと、正規表現上の「最短でマッチするあらゆる文章」がこれに入るので……まあ条件1(.*?)条件2で挟むとほしい文章が入るとだけ理解すれば問題ないでしょう。
ぼくはそうとしか理解してないですし。


つまり、これ以降は$outa0[0][0]とか$outa0[1][0]とか書くと、検索結果2であり(.*?)である部分、もっというとさっき青くした部分とかを意味してくれます。




続き。
切り取った範囲で、名前にあたる部分はどういう書き方をされているか。

<B CLASS=WD1></B>や<TD NOWRAP><B></B>で囲まれていることがわかりますね。
ならば……こう!
$patte2 = '/<B CLASS=WD.>(.*?)</';
preg_match_all($patte2,$outa0[0][0],$outa1);
print_r($outa1);
echo "<br>";
echo $outa1[1][0];
echo "<br>";
echo "<br>";
$patte3 = '/<TD NOWRAP><B>(.*?)</';
preg_match_all($patte3,$outa0[0][0],$outa2);
print_r($outa2);
echo "<br>";
echo $outa2[1][0];
こうすると、



$outa1と$outa2の配列中[1][0]、つまり$outa1[1][0]$outa2[1][0]の中にキャラクター名、
今回で言えば「くるい」「ナレハテ」両名の名前を格納出来ましたね!

ここまでくればあとは本当に同じことの繰り返しです。
装備、スタイル、ダメージ、技、etc……。全部同じように取得していきます。


じゃあ記事の最後に注意点!3つ!
・preg_match_allの文字列の検索は'/と/'で囲まないと出来ないぞ!
まあこれは説明要りませんね。
全部の条件でちゃんと囲んであります。

精確には'と'が「文字列」を表しているので、文字列以外は単に/と/で囲めば大丈夫なのですが。
どうせ文字列しか検索しないので、'/と/'理解しておけばOK!

・preg_match_allでの複数行検索は'/と/s'で囲まないと出来ないぞ!
勘の良い人はもう気付いているかもしれませんが、$pattern1は$patte2や$patte3と異なり、複数行に渡る検索です。
なので、
$pattern1 = '/<TABLE WIDTH=850 CELLPADDING=5 CELLSPACING=0 BORDER=0><TR>(.*?)<BR><BR><BR>/s';
となっていますね。

・検索条件に「/」を入れるとバグるぞ!!
これも勘の良い人は気付いていそうですが、
$patte2 = '/<B CLASS=WD.>(.*?)</';

$patte2 = '/<B CLASS=WD1>(.*?)</B>/';
じゃ駄目なのか。

結論から言うと、駄目です。
Warning: preg_match_all(): Unknown modifier 'B' in C:\xampp\htdocs\ibara\pre1.php on line ~
みたいな表示になると思います。


これは二つ上で言った通り、/と/で囲まれた部分を検索条件としているので、これだと</B>のBの手前時点で検索条件になってしまっていて。
要は、Bの後ろが謎のなにかと判断されてエラーコードが出ている状態になります。

ちなみに、
$patte2 = "/<B CLASS=WD1>(.*?)<\/B>/";
と/と/を囲うものを'と'から"と"に変えて、
先にバックスラッシュ、「\」を/の前に入れるとエラーは回避でき、問題なく検索することもできます。

あるいは、正規表現で任意の一文字を表す「.」を用いて、
$patte2 = "/<B CLASS=WD1>(.*?)<.B>/";
としても大丈夫。

さらにぼくの場合は、「WD1」ってことは1以外のなにかもあるんじゃないか……?
と思ってWD1からWD.に変えてありますね。これでカバーも問題なし。




次の記事はアドベントカレンダーのときのスタート地点まで行きたいですね。
ではでは~。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
管理人のみ閲覧可     
BACK HOME NEXT
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
プロフィール
HN:
甲殻類
性別:
男性
自己紹介:
定期更新型ネットゲーム「SoulDrops」参加者(黒鉄遥[417]PL)。他も色々。
最新コメント
[05/16 CloneFBAgish]
[09/03 アカシ]
[04/17 玄武門 影久(1)]
[03/21 甲殻類(ブログ書いてる奴)]
[03/20 玄武門 影久(1)]
ブログ内検索
フリーエリア
忍者ブログ // [PR]

template ゆきぱんだ  //  Copyright: 旅の恥は書き捨て。 All Rights Reserved