WordPressで運用しているブログに楽天市場の人気商品を自動で貼り付ける方法を、ご紹介します。
一度設定をしておけば毎日更新されるので、手間がかかりません。
サイドバーや記事の途中など、ブログの空きスペースを有効活用できますよ。
設定のおおまかな流れ
処理のおおまかな流れはこのような感じです。
- 1日に1回、ジャンル別の楽天ランキングを取得し、xml形式で自前のサーバーに保存する。
- ブログにアクセスがあるたびに、保存したxmlを読み込み、楽天アフィリエイトを表示する。
これを踏まえた設定の流れは、こうなります。
- 楽天ウェブサービスに登録する。
- 楽天ランキングの取得とxml形式での保存を行う、phpスクリプトを作成する。
- そのphpスクリプトが、自サーバーのcronで定期的に実行されるよう設定する。
- xmlファイルを読み込みアフィリエイトタグに変換するよう、WordPressのfunctions.phpを設定する。
一番のネックは、サーバー上でcronを使えるかどうかです。
私が借りているsixcoreでは問題がありませんでしたが、cron使用不可のレンタルサーバーも多いようなので、その場合はこの方法は使えません。
楽天ウェブサービスに登録する
楽天ランキングを取得する際に楽天ウェブサービスのAPIを使用するので、あらかじめ登録しておきます。
発行されたアプリIDとアフィリエイトIDは、後ほど使うのでメモしておきましょう。
楽天ランキングの取得とxml形式での保存を行う、phpスクリプトを作成する
楽天ランキングのジャンルごとの上位5つを取得するスクリプトを作成します。
コードは次のとおりです。
<?php
function my_rakuten($genreId,$genreName){
$affiliateId='楽天ウェブサービスのアフィリエイトID';
$applicationId = '楽天ウェブサービスのアプリケーションID';
$oDir = 'xmlファイルを出力するディレクトリ';
$iFile = 'https://app.rakuten.co.jp/services/api/IchibaItem/Ranking/20120927?format=xml&affiliateId=' . $affiliateId . '&genreId=' . $genreId . '&applicationId=' . $applicationId;
$oFile = $oDir . $genreName . '.xml';
$iDom = new DOMDocument('1.0', 'UTF-8');
$oDom = new DOMDocument('1.0', 'UTF-8');
$oDom->formatOutput = true;
if($iDom->load($iFile) != true){return;}
$oContent = $oDom->appendChild($oDom->createElement('content'));
$i = 0;
while($i <= 4){
$iItem = $iDom->getElementsByTagName("Item");
$oItem = $oContent->appendChild($oDom->createElement('item'));
$oItem->appendChild($oDom->createElement('name', $iItem->item($i)->getElementsByTagName("itemName")->item(0)->nodeValue));
$oItem->appendChild($oDom->createElement('link', $iItem->item($i)->getElementsByTagName("affiliateUrl")->item(0)->nodeValue));
$imageUrl = $iItem->item($i)->getElementsByTagName("mediumImageUrls")->item(0)->getElementsByTagName("imageUrl")->item(0)->nodeValue;
$imageUrl = str_replace('128×128','300×300',$imageUrl);
$oItem->appendChild($oDom->createElement('image',$imageUrl));
$i++;
}
$oDom->save($oFile);
}
my_rakuten('100227','foods');
my_rakuten('551167','sweets');
my_rakuten('100938','diet');
my_rakuten('100939','cosme');
my_rakuten('100804','interia');
my_rakuten('101070','sports');
my_rakuten('562637','kaden');
my_rakuten('215783','zakka');
my_rakuten('558944','kitchen');
?>
環境に合わせて、3つの変数の値を入力します。
- $affiliateId
楽天ウェブサービスのアフィリエイトID。 - $applicationId
楽天ウェブサービスのアプリケーションID。 - $oDir
xmlファイルを出力するディレクトリ。/home/から始まるパスです。末尾に、/(スラッシュ)を付けます。
ジャンルごとのIDは、楽天ランキングのURLのものを使用します。
例えば、食品の場合だと、URLがhttp://ranking.rakuten.co.jp/daily/100227/なので、IDは「100227」となります。
phpスクリプトが、自サーバーのcronで定期的に実行されるよう設定する
まずは、先ほど作成したphpスクリプトを、サーバー上に保存します。
まあ、場所はお好きな所に。
続いて、ファイルパーミッションの設定。
私は「700」にしています。
そして、cronの設定です。
コマンドを打つのが一般的なようですが、私が使っているsixcoreでは管理画面から設定します。
sixcoreのマニュアルはこちら。
これだけだと分かりにくいので、「みやざきのインプレッサページ」さんの、このページもあわせて読むといいと思います。
実行する頻度は1日ごとでもいいのですが、たまにエラーで取得できないこともあるので、私は複数回実行するようにしています。
アクセス数の少ない、夜中の2時から4時の間に1時間ごとに実行したいので、下記のとおり設定しています。
- 分:0
- 時:2-4
- それ以外:*
WordPressのfunctions.phpを設定する
私は2種類の方法で楽天の広告を表示させています。
ひとつは、ショートコードによる任意の場所への配置。
もうひとつは、moreタグ部分への配置です。
どちらの場合も、指定したジャンルの1位から5位までの人気商品のうち1個を、ページを開くたびランダムで表示させています。
それをまとめて設定するのが下記のコードです。
このコードをfunctions.phpに貼り付けます。ただし、functions.phpでエラーが出ると最悪WordPressが立ち上がらなくなるので、自己責任でおねがいしますね。
/********************************
楽天ランキングの人気商品を表示する
********************************/
/*————————–
共通関数
————————–*/
function rakutenranking_code($genre){
$dirname = 'xmlファイルが保存されているディレクトリ';
$filename = $dirname . $genre . '.xml';
$xml = @simplexml_load_file($filename);
$i = rand(0,4);
$code = '<div style="text-align:center;">';
$code = $code . '<a href="' . $xml->item[$i]->link . '">';
$code = $code . '<img src="' . $xml->item[$i]->image . '" title="' . $xml->item[$i]->name . '" style="border:solid dimgray 1px;">';
$code = $code . '</a></div>';
return $code;
}
/*————————–
ショートコード
————————–*/
function rakutenranking_shortcode_pc($atts){
extract(shortcode_atts(array('genre' => 'sweets'), $atts));
return rakutenranking_code($genre);
}
add_shortcode('rakutenranking_pc', 'rakutenranking_shortcode_pc');
/*————————–
moreタグ下に広告を表示
————————–*/
add_filter('the_content', 'adMoreReplace_pc');
function adMoreReplace_pc($contentData) {
$code = '<div style="font-size:small;color:black;margin-top:50px;width:336px;text-align:left;">スポンサーリンク</div>
<div style="text-align:left;padding:0 0 20px 0;width:300px;">'
. rakutenranking_code('foods')
. '</div>';
return preg_replace('/<span id="more-[0-9]+"><\/span>/', $code, $contentData);
}
?>
rakutenranking_code関数の$dirname変数の値は、各自の環境に合わせて書き換えてください。
注意していただきたいのは、/home/から始まるサーバ上のパスではなくて、http://から始まるアドレスだということです。
最後にショートコードを配置します。
例えば、サイドバーに、家電の人気商品を表示させたい場合は、sidebar.phpに次のコードを貼り付けます。
まとめ
一見すると敷居が高そうですが、レンタルサーバー上でWordPressを運用している人なら、意外とカンタンにできると思います。
広告スペースに空きがある方は、いちど試してみてはいかがでしょうか。