今まではPHPのcURLで、
取得→ローカル保存→整形して出力
の形式をとっていたけど、最近は「スクレイピング」って立派な名前がついて(知らないだけ?)
便利なライブラリが出てるとのこと。
中身はfile_get_contentsらしいってーから悩んだけど、
使いやすそうだったから試してみることに。
細かいとこは加齢にスルーですよ。
わかりやすい参考サイトがあるのでそちらドゾ。
要件
- 情報は外部取得(http
- リアルタイムではなく、cronで数時間おきに取得→サーバーにファイルで保存
- 複数ページで呼ぶので、php配列とかだとイトオカシ
実践
<?php require_once './simple_html_dom.php';//読み込む $html = file_get_html('http://example.com');//ここスクレイピングするよ foreach($html->find('.hoge tr') as $article) {//table.hogeのtrをクルクル $item['a'] = $article->find('td', 0)->plaintext;//td内だけ(タグ抜き)を$item配列に $item['b'] = $article->find('td', 1)->plaintext; $item['c'] = $article->find('td', 2)->plaintext; $item['d'] = $article->find('td', 3)->plaintext; $item['e'] = $article->find('td', 4)->plaintext; $item['f'] = $article->find('td', 5)->plaintext; $item['g'] = $article->find('td', 6)->innertext; $articles[] = $item;//多次元(連想?)配列に } file_put_contents("hoge.txt", serialize($articles));//hoge.txtにシリアライズして保存 $html->clear;//おまじない(メモリ解放。お約束の模様)
こんなん感じで書いておき、cronで回す。
外から叩かれてスクレイプ元に負荷かからないよう、.htaccessで制限かけたり(←心配性
配列のままファイルに置いとくには、上記みたいにfile_put_contents(serializeとすると便利とのこと。
んで、表示(展開)側
<?php $item = unserialize(file_get_contents("hoge.txt"));//保存してあるデータをアンシリアライズ function hyouji($count) {//表示用関数 global $item;//関数内側なら不要だぬ echo "<li>{$item[$count]['a']}</li><li>{$item[$count]['c']}</li><li>{$item[$count]['g']}</li><li>{$item[$count]['b']}</li>"; //表示する構造とか } ?>
後は<ul><?php hyouji(2); ?></ul>とか書いとくと、
3番目の<tr>に入ってたデータがリストで表示されちゃったりします。
嗚呼激しく便利w