PHPを利用してアマゾンの商品ランキング(アソシエイトID入り)を自動で作成させる方法を解説します。よくある簡単ツールではありませんが、100%自分のアソシエイトIDのみのリンクを作成できます。簡単ツールには他人のアソシエイトIDが混じることが多々あります。
この記事にたどり着いたということはWordPressやPHPの仕組みをある程度理解しているということを前提にして記事を書いています。
分からないところは各自調べるなり聞いたりしてください。
紹介するプログラムの概要
- PHPで目的のページのソースコードを入手する
- 入手したソースコードから必要な部分を抽出、整形する
- 整形したコードをファイルに保存する
- 保存したファイルを通常のページファイルから読み込む
- 1~3をcronにて自動実行させる
5.のcronを使った自動実行についてはザックリとだけ解説します。各自のサーバーによって操作の仕方がことなるためです。
PHPにてリンク先のソースコードを入手する方法
アマゾンのゲームの売れ筋ランキングのページを例にソースコードを取得してみます。
https://www.amazon.co.jp/gp/bestsellers/videogames
$pageSrc = file_get_contents('https://www.amazon.co.jp/gp/bestsellers/videogames');
$html = htmlspecialchars($pageSrc);
echo $html;
実行すると整形されていないソースコードが表示されたと思います。
これを整形していくのですが素の関数だけでは面倒なのでパース用のAPIを使います。
PHP Simple HTML DOM Parser
こちらよりダウンロードできます。
ダウンロード、解凍したら中にあるsimple_html_dom.phpを 任意の場所に配置します。
他のファイルは使いません。
APIを利用するときはrequire_once()で読み込みます。先ほどのゲーム売れ筋ランキングのページのランキングに載っている商品のDIV要素だけを取り出してみます。
require_once('simple_html_dom.php');
$html = file_get_html('https://www.amazon.co.jp/gp/bestsellers/videogames/');
foreach ($html->find('.zg_itemRow') as $list) {
echo $list;
}
$html->clear();
unset($html);
最後の二行はメモリ解放処理です。$html->clear(); unset($html);
3.file_get_html()
引数にURLを渡すとDOMを返してくれます。
4.find()
引数にセレクタを渡すと指定した要素を返します。このセレクタはjQueryと同じように使えるのが特徴です。
今回はclass=”zg_itemRow”を取得しています。(記事作成時点から)ページのソースが変わっていた場合は上手く取得できないので要確認。
全てのclass=”zg_itemRow”を取得するためにforeachでループさせています。ここまでの動作を確認できたら次へ進んでください。もしエラーが出た場合は
//$contents = file_get_contents($url, $use_include_path, $context, $offset);
↓
$contents = file_get_contents($url, $use_include_path, $context);
simple_html_dom.phpの75行目を変更してみてください。
PHP Simple HTML DOM Parserの使い方
APIの使い方をもう少し解説します。
ループ内でさらに細かく要素を掴む方法
先ほどのDIV要素を取得するコードに追加で書いていきます。DIV要素内のIMGタグだけ取得して表示してみます。
require_once('simple_html_dom.php');
$html = file_get_html('https://www.amazon.co.jp/gp/bestsellers/videogames/');
foreach ($html->find('.zg_itemRow') as $list) {
$img = $list->find('img',0);
echo $img;
}
$html->clear();
unset($html);
5.$img = $list->find(‘img’,0);
find()第二引数に数値を渡しています。これは要素のn番目を指定する方法です。
そのほか使いそうなセレクタ指定方法
find(‘a’, -1); | 一番最後の要素を指定 |
find(‘div[id]’); | id属性を指定 |
find(‘div[id=foo]’); | 任意のattrを指定 |
attribute、属性値を取得する方法
IMG要素のsrc属性の値を取得してみます。
require_once('simple_html_dom.php');
$html = file_get_html('https://www.amazon.co.jp/gp/bestsellers/videogames/');
foreach ($html->find('.zg_itemRow') as $list) {
$img = $list->find('img',0);
$src = $img->src;
echo $src.'<br>';
}
$html->clear();
unset($html);
画像のソースを取得できました。要素の指定と属性の取得方法が分かったので、この記事の7割は解説できたと思います。
Aタグのhrefの値を取得する場合は
$a = $html->find(‘a’);
$href = $a->href;
のようにするだけです。
アソシエイトIDが有効なリンクを作る方法
それぞれのIDXXX-22を取得したリンクと組み合わせて有効なリンクを作るには、まず商品コードを抽出するのが良いと思います。
急上昇ワードなど検索結果が表示されるページにIDを付けたい場合は、商品コードを抽出しなくて良いと思います。今回は解説しませんが&tag=あなたのIDのパラメータを付ける方法などがあります。
リンクチェッカーを使用して確認する
https://affiliate.amazon.co.jp/home/tools/linkchecker
公式に正しくリンクが作れているかをチェックするツールがあるので、そちらを利用りましょう。整形したURLを必ず確認しましょう。
画像とリンクのURLの取得方法は既に紹介したので、あとは有効なリンクへ整形するだけですので煮るなり焼くなり好きにしてください。
簡単な例を紹介しておきます。
$href = https://…01/dp/B0742J781D/ref=…
$reg = preg_match(‘/dp\/(.*)\/ref/’, $href, $match);
正規表現で商品コードを$matchへ渡しています。正しくつかめている場合は$match[1]に商品コードが入っています。
それぞれのページによってhrefの値は変わると思うので調整しましょう。
整形したコードをphpファイルに保存する方法
file_put_contents()を使います。
許可を確認せずにファイルの作成、上書き更新をするので間違えて既存のファイルを消してしまわないように注意しましょう。
$output = ""; //整形したHTMLコードが入っている(string)
$filename = 'rank.php';
file_put_contents($filename, $output);
$filenameにはディレクトリも指定します。細かい使い方はリファレンスを参照。
あとは作られたrank.phpを任意のページで読み込ませれば、自作の商品ランキングみたいなものができますね。
cronを使い自動で更新する方法
サーバーに依存するところが多いので参考にならないかもしれませんが、私の設定を書いておきます。
/usr/bin/php7.0 /home/サーバーID/ドメイン/public_html/wp-content/任意の場所/実行する.php |
/usr/bin/php7.0[スペース]
phpを実行するための命令
/home/サーバーID/ドメイン/public_html/wp-content/任意の場所/実行する.php
青い部分は環境に依存する?
オレンジの部分は任意のディレクトリを指定。WordPressではこんな感じだと分かりやすいかなと思いwp-contentに入れました。
cronの知識は初学者程度しかないので各自調べてください。
またrequire_once()やfile_put_contents()で指定するディレクトリもcronから起動したphpファイルではディレクトリの指定方法が変わる場合もあるので要調整。
cronが使えない人はwp_cronやWordPressのアクションにフックして記事を作成したときに任意のphpを実行させたり、管理画面に入ったときに実行させるなどの方法があります。
コード整形時には例外処理を入れることをおすすめします。
例外が出た場合はfile_put_contents()を行わないようにして、メールで通知させるようにしておけば表示が崩れたりするのを防げるでしょう。
終わり今回に参考にしたリンクをまとめておきます。
PHP Simple HTML DOM Parser Manual | APIリファレンス |
mb_convert_encoding | 数値参照をUTF-8に変換する方法 |
_(__つ/ ̄ ̄ ̄/
\/ /
 ̄ ̄ ̄
(´・ω・`)
_( つ ミ バタンッ
\ ̄ ̄ ̄\ミ
 ̄ ̄ ̄ ̄