楽天ウェブサービスの API を使ってシンプルな商品リンクを作る

楽天ウェブサービスの API を使ってシンプルな商品リンクを作る

商品リンクを貼り付けるときに楽天のサイトを開いて検索してカスタマイズして、という手順が面倒だったので楽天ウェブサービスの API を使って商品リンクを作成できる仕組みを実装してみた。

と言っても PHP 向けの SDK が提供されているので簡単。

準備

はじめに Rakuten Developers でアプリ ID (デベロッパー ID) を発行してもらう必要がある。

[アプリ ID 発行] をクリックして [アプリ名] と [アプリ URL]、その他必要な項目に記入して ID を発行してもらえば準備完了。

使用

適当な場所に SDK を配置する。今回は vendor/rws-php-sdk/ というディレクトリに配置した。

PHP
$keywords = isset($keywords) ? $keywords : '';
$rakuten = array();
if ($keywords != '') {
	require_once('vendor/rws-php-sdk/autoload.php');
	$client = new RakutenRws_Client();
	$client->setApplicationId($rakuten_application_id);
	$client->setAffiliateId($rakuten_affiliate_id);
	$response = $client->execute('IchibaItemSearch', array(
		'keyword' => $keywords,
		'sort' => '-affiliateRate',
		'imageFlag' => 1,
	));
	if ($response->isOk()) {
		foreach ($response as $i) {
			$s = getimagesize($i['mediumImageUrls'][0]['imageUrl']);
			if ($s) {
				$w = $s[0];
				$h = $s[1];
			} else {
				$w = 128;
				$h = 128;
			}
			$rakuten[] = array(
				'affiliateUrl' => $i['affiliateUrl'],
				'imageUrl' => $i['mediumImageUrls'][0]['imageUrl'],
				'imageHeight' => $h,
				'imageWidth' => $w,
				'shopName' => $i['shopName'],
				'itemName' => $i['itemName'],
			);
		}
	}
}

$keywords に検索する文字列、$rakuten_application_id にアプリ ID (デベロッパー ID)、$rakuten_affiliate_id にアフィリエイト ID が入っているものとする。

これでアフィリエイト料率順 (降順) で商品画像のあるものだけが $rakuten という配列に検索結果が返ってくるので、その中から適当な商品を選んで装飾してブログに掲載すればオッケーかと思いきや、なぜか affiliateUrl や imageUrl が https ではなく http となっている。

対策

SDK のソースや API の仕様を調べた結果、どうやら SDK が最新の API に対応していない模様。

rws-php-sdk\lib\RakutenRws\Api\Definition\IchibaItemSearch.php の 23 行目付近で versionMap を指定する箇所があり、そこに現時点での最新バージョン (version:2017-07-06) を追記してやることで対応できた。

PHP
class RakutenRws_Api_Definition_IchibaItemSearch extends RakutenRws_Api_AppRakutenApi
{
    protected
        $autoSetIterator = true,
        $isRequiredAccessToken = false,
        $versionMap = array(
            '2017-07-06' => '20170706', // 追記
            '2014-02-22' => '20140222',
            '2013-08-05' => '20130805',
            '2013-04-24' => '20130424',
            '2012-07-23' => '20120723'
        );

    public function getService()
    {
        return 'IchibaItem';
    }

    public function getOperation()
    {
        return 'Search';
    }
}

これが正しい対策なのかは分からないが、動けば何でもいいや。

備考

楽天ウェブサービスの API を使って掲載した商品リンクに楽天のロゴを表示する必要があるかどうかという点が気になったので調べてみたところ、楽天ウェブサービスの規約では API を使うアプリには楽天ウェブサービスのクレジットを表示することになっていた。

しかし、某有名 WordPress テーマの楽天商品リンク機能ではロゴの表示・非表示は選択できるものの、楽天ウェブサービスのクレジットは表示されていないし、カエレバのような類似のサービスでも同様だ。

「API を使うアプリ」という表現は曖昧で、API を使うことをメインとしたアプリ、つまりアプリから直接 API を呼ぶものについてはクレジットの表示が必要とも読める。

「個人的に API を使って取得した商品リンク」をブログの記事として掲載する場合は、そのサイトや記事が API を呼び出しているわけではないのでクレジットの表示は必要ないと言うことなのだろうか。

疑問は残るものの、ひとまずシンプルな商品リンクを作成できる仕組みの実装が完了した。

プロマリン(PRO MARINE) PG わくわくチョイ投げセットDX 300 (TRS-30GS)

プロマリン(PRO MARINE) PG わくわくチョイ投げセットDX 300 (TRS-30GS)
プロマリン(PRO MARINE)
手軽に釣りを始められる、入門セット。

結論

怒られたら修正すれば良いかー。

関連する記事

フォローする