今までは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