Simple HTML DOM Parserを使ってMac製品のセール品情報を取得してみる

Simple HTML DOM ParserはPHPでHTMLのスクレイピングjQueryライクに行うことができます。
今回はこれを使って、Macの公式サイトに掲載されている整備済みセール品情報を取得してみようと思います。

まずは以下がデモとなります。 Mac整備済み特別価格製品一覧 Bata

これはRSSなどを取得して表示しているわけではなく、
PHPApple Storeに掲載されている情報を取得しています。

利用準備

まずはこちらよりファイルをダウンロードしてきて、
中に入っているsimple_html_dom.phpをサーバーなどにアップロードしておきます。

利用方法

includeなどの関数で先程アップロードしたファイルをincludeすれば使えるようになります。

早速使ってみましょう


include('../../inc/simple_html_dom.php');

$targetUrl="http://store.apple.com/jp/browse/home/specialdeals/mac/";//情報を取得するサイト
$html=file_get_html($targetUrl);//HTMLを取得します
$cont=$html->find('.producttd.specsh3a');
//find関数に商品名が入っている要素を渡します

はい、これだけでMacのセール品情報が取得できました。
行なっていることとしては、file_get_html関数に取得したいサイトのURLまたはhtmlを渡して、
返ってきた値を変数に代入。

取得したHTML内で利用したい要素をfind関数で指定して変数contに代入しています。
findに渡している要素の値を見ていただければ分かると思うのですが、
jQueryのようなセレクタで要素を抽出できるので、
慣れている人はこちらのほうが扱いやすいのではないかと思います。

今回はクラス名product > クラス名specsのtd要素 > h3要素 > a要素を取得しました。 これをパースして表示させてみましょう。


foreach($contas$key=>$element){
print('<p>'.$element->plaintext.'</p>');
}

先程の変数contをforeachで先ほど取り出したa要素を一つ一つ取り出しています。
アロー演算子plaintextを指定することで要素のテキスト部分だけを取り出すことができます。
属性値は同じようにアロー演算子getAttribute('href')のようにすることで取得できます。

デモのコンテンツを作成してみましょう


functionsale_info_get($url){
$html=file_get_html($url);
$ele1=$html->find('.producttd.specsh3a');//商品名の部分
$ele2=$html->find('.producttd.purchase-infop.price');//価格の部分
$Content=array();

foreach($ele1as$key=>$element){
$href='http://store.apple.com/'.$element->getAttribute('href');
$plain=$element->plaintext;
$price=$ele2[$key]->plaintext;
$Content[]='<p><ahref="'.$href.'">'.$plain.'</a>'.$price.'</p>';
}
$Content=join("",$Content);
print$Content;
}

これで後は情報を載せたい箇所でURLを引数に関数を呼ぶだけで情報が取得できます。

利用法

例えばiPad製品の箇所は以下のようなコードを実行しています。


     sale_info_get("http://store.apple.com/jp/browse/home/specialdeals/ipad/");

sale_info_get("http://store.apple.com/jp/browse/home/specialdeals/◯◯/");
・〇〇の部分にはmacipadipodなどを入力します。