同村チェッカーについて技術的な話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を取得しているのでした。
あとはそれを配列の形でデータがっちゅんそろえて準備するだけです。
何も難しくない。
次が多分長くなるのでここでいったん打ち止めにします。