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

Portal:siro

ダイレクトマーケティングブログ

同村チェッカーについて技術的な話2

昨日の続きをば。

<?php
}else{
		echo "その他<br>";
		foreach($html->find('table.vindex tr.i_active') as $element){
			// 加工(edit_hoge)--------------------------------------
			$edit_character =  trim_convert($element->children(0)->plaintext);
			$edit_id = trim_convert($element->children(1)->plaintext);

			$data[] = array(
			'number' => $edit_i,
			'character' => $edit_character,
			'id' => $edit_id);
			$edit_i++;
		}
	}
?>

標準鯖とRPAdは若干HTMLの枠組みが違うくらいなので、もう最初からこちらで説明します。
その他ってありますが、実際現行のbraid系とか陰謀は全部これで解析可能です。

順番にいきましょう。

<?php
		foreach($html->find('table.vindex tr.i_active') as $element){
?>

この部分で、vindexクラスが設定されたtableタグ内にあるi_activeクラスが設定されたtrタグを抽出しています。
具体的にはー。このページのソースで言うと、

<tr class="i_active">
<td>病人 キャサリン
<td><a href="http://giji.check.jp/users?user=master">master</a>
<td class="victim calc">2日
<td class="victim">襲撃死
<th class="victim">参加
<td>村人陣営:村人<i><br>  村人を希望
<br></i>
</tr>

<tr class="i_active">
<td>踊り手 フランシスカ
<td><a href="http://giji.check.jp/users?user=anbito">anbito</a>
<td class="executed calc">3日
<td class="executed">処刑死
<th class="executed">参加
<td>村人陣営:村人<i><br>  村人を希望
<br></i>
</tr>

<!-- 中略 -->

<tr class="i_active">
<td>墓守 ヨーランダ
<td><a href="http://giji.check.jp/users?user=%82%B5%82%D3%82%A7%82%F1">しふぉん</a>
<td class="executed calc">9日
<td class="executed">処刑死
<th class="executed">参加
<td>村人陣営:村人<i><br>  村人を希望
<br></i>
</tr>

この部分のtrタグを取得してきます。
これをforeach文で1こずつ処理していきます。

<?php
			$edit_character =  trim_convert($element->children(0)->plaintext);
?>

つっても特に難しいことはしていなくて、
ここでキャラクター名を取得しているんですけどこれは、

<tr class="i_active">
<td>病人 キャサリン
<td><a href="http://giji.check.jp/users?user=master">master</a>
<td class="victim calc">2日
<td class="victim">襲撃死
<th class="victim">参加
<td>村人陣営:村人<i><br>  村人を希望
<br></i>
</tr>

このキャサリンを例にすると、$elementに格納しているtrタグの0番目の子のplaintextを取ってきてるだけです。
くどいようですが0 basedなので、0番目の子は「病人 キャサリン」となるわけです。ね、簡単でしょ?

			$edit_id = trim_convert($element->children(1)->plaintext);

こちらも同様に、1番目の子のplaintext「master」を取得しています。

plaintext、innertextの違いはもうSimple HTML Dom Parserのヘルプ読んでって感じなんですが、

 // Example
 $html = str_get_html("<div>foo <b>bar</b></div>"); 
 $e = $html->find("div", 0);
 
 echo $e->tag; // Returns: " div"
 echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
 echo $e->innertext; // Returns: " foo <b>bar</b>"
 echo $e->plaintext; // Returns: " foo bar"

ずばり引用で。
innertextをここで使ってしまうと、aタグも一緒に抽出してしまうので、ここではplaintextを取得しているのでした。


あとはそれを配列の形でデータがっちゅんそろえて準備するだけです。
何も難しくない。


次が多分長くなるのでここでいったん打ち止めにします。