Amazonの商品を文字列検索と切り取りでスクレイピングする
概要
Slackで商品名を投稿するとAmazonの商品を返すBotを作るために作成。 面倒だったので、APIもXMLパースライブラリも、正規表現も使わずに文字列検索と切り取りのみでのスクレイピング。
DOMの構造が変わったらこのプログラムは終わり。 商品によっては発生するバグは修正予定。
ソースコード
<?php if(!isset($_GET['keyword'])){ echo 'URL?keyword=検索キーワード'; die(); } //ソースの取得 $source = file_get_contents('https://www.amazon.co.jp/s/?url=search-alias%3Daps&field-keywords=' . urlencode($_GET['keyword'])); $item = subStrHtml($source, 'id="result_1"', 'id="result_2"'); //各項目の抜き出し $title = subStrHtml($item, 's-access-title a-text-normal">', '</h2>'); $link = subStrHtml(subStrHtml($item, 'a-text-normal" target="_blank"', '</a>'), 'href="', '"><img '); $image = subStrHtml($item, '<img src="', '" width="160"'); $price = subStrHtml($item, 'a-color-price s-price a-text-bold">', '</span>'); $star = subStrHtml($item, '<span class="a-icon-alt">5つ星のうち ', '</span>'); $prime = subStrHtml($item, '<span class="a-icon-alt">', '</span>'); //出力 echo '<img src="' . $image . '">' . '<br>'; echo '<a href="' . $link . '">' . $title. '</a>' . '<br>'; echo '価格: ' . $price . '<br>'; echo '★' . $star . '<br>'; echo $prime . '<br>'; function subStrHtml($data, $startStr, $endStr){ $start = mb_strpos($data, $startStr) + mb_strlen($startStr); $end = mb_strpos($data, $endStr, $start); $result = mb_substr($data, $start, $end - $start); return $result; }