WordPressプラグイン CS ShopでYahooショッピング商品検索APIを使う方法

WordPressプラグイン CS ShopでYahooショッピング商品検索APIを使う方法

CS Shop は、楽天・Amazon・バリューコマース・リンクシェアのWebサービス(商品検索APIなど)を利用して、ショートコードを書くだけでキーワードなどで商品を検索、簡単にアフィリエイトリンク付きの商品ページや投稿記事に検索に基づいた商品一覧をアフィリエイトリンクで埋め込むことができるWordPressプラグイン。

CS ShopはWordPressプラグインディレクトリーに登録されているのだが、長い間更新もなく忘れていたところ突然5日前ほどに更新されて通知がきて思い出した次第。

Yahooショッピングでアフィリエイトするにはバリューコマースに登録する

以前は(以前といってもかなり以前)YahooショッピングアフィリエイトはYahooショッピング独自にアフィリエイトASPがあってYahooショッピング商品検索APIなど簡単に使えていたのだが、現在ではYahooショッピングでアフィリエイトしたいのなら、バリューコマース にアフィリエイト登録するしかなくなった。

CS Shop でも以前は(以前といってもかなり以前)Yahooショッピング独自にアフィリエイトASPがあったので簡単に商品検索APIをつかえていた関係上、Yahooショッピング商品検索ページを作成することができていた。

まあ現在では、バリューコマース にアフィリエイト登録すればバリューコマースのWebサービス商品検索APIを使って、バリューコマースでYahooショッピングと提携すれば商品検索はできる。商品検索対象をYahooショッピングだけにすればYahooショッピング内だけの検索が可能になる。

ただし、バリューコマースのWebサービス商品検索APIよりYahooショッピングのWebサービスの商品検索APIを使った方が、データの反映が速い、カテゴリー別ランキングAPIなど他のAPIも使えるなどメリットがある。

ということで、Yahooショッピングでアフィリエイトをしたい私としては、CS Shop で、バリューコマースアフィリエイトYahoo Webサービスの商品検索API を使ってアフィリエイトする方法はないのかと探した結果、結構簡単にできる方法があったという話。

現在ではWebサービスを使ってアフィリエイトリンク付きの商品一覧だけを表示している自動生成しているページなどは、検索エンジンの評価は0に等しい、いや逆にスパム扱いでインデックスされない、ペナルティーを科される模様。そのようなページにリンクしているページも同様のようでございます。

CS ShopでYahoo Webサービス商品検索APIを使ってアフィリエイトする方法

毎度いらぬ前置きが長くなりました。CS Shop のインストールや設定はCS Shopで検索して調べるべし。楽天・Amazon・バリューコマース・リンクシェアのWebサービス(API)のアフィリエイトID・デベロッパーID・アクセスキーID・アプリケーションID・トークンなどの取得方法も検索して調べるべし。

バリューコマース登録 Yahoo!ショッピング提携 MyLink広告タグ取得

バリューコマース登録 Yahoo!ショッピング提携
バリューコマース登録 Yahoo!ショッピング提携

とりあえずは、バリューコマース にアフィリエイト登録しないと始まらないので登録、サイトを登録してYahoo!ショッピングと提携する。サイト審査とかで結構日にちがかかるので気長にまつわ。無事登録・提携が終了したら広告作成へ。

MyLink広告タグ取得
MyLink広告タグ取得

広告主Yahoo!ショッピングの広告作成のページのMyLinkてのを選択して、とりあえずはURLにYahoo!ショッピングのトップページのURLを入力、テキスト欄にYahoo!ショッピングと入力する。まあURLはYahoo!ショッピング内であれば適当でいいんではテキストとかも適当。要はタグがほしいだけなので。

MyLinkコード
MyLinkコード

MyLinkコード というのが取得できるのでコピペしておく。このコードから一部分を切り出しして使う。その中でも「ここ」と赤青で囲んだところの数字が重要。

MyLinkコードからリンクURL部分を抜き出しURLエンコード

上のように取得したMyLinkコードから下の部分を抜き出す。

抜き出した部分をURLエンコードする。

IMGタグの部分は、バリューコマースの表示回数カウント用ビーコンをセットで使うのでおいておく。

抜き出してURLエンコードした部分をYahoo!ショッピングアフィリエイトIDに設定

Yahoo!ショッピングアフィリエイトID
Yahoo!ショッピングアフィリエイトID

MyLinkコードからリンクURL部分を抜き出しURLエンコードした部分を、設定 → CS Shop から入った CS Shop設定ページYahoo!ショッピング アフィリエイトID 入力ウォームに入力(コピペ)する。要するにMyLinkコードからリンクURL部分を抜き出しURLエンコードした部分がアフィリエイトIDになるということ。

CS Shop プラグインファイルを編集する

ここからちょっとややこしい。CS Shop プラグインファイルを編集することになるので、できればPCにダウンロードして作業する方が無難かもしれない。WordPress上でプラグイン編集画面で編集するならCS Shop プラグインを停止してから編集した方がいいかもしれない。いずれにせよ編集前のファイルのバックアップはとっておく。

カテゴリ検索・商品検索クエリ生成部分を書き換える

    /**
     * カテゴリ検索クエリ生成
     * @link http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/categorysearch.html
     * @param string $category 対象カテゴリ
     * @return string RESTクエリ文字列
     */
    private function queryCategories($category)
    {
        if (empty($category)) {
            $category = 1;
        }
        $baseurl = "https://shopping.yahooapis.jp/ShoppingWebService/V1/categorySearch";
        $params = array();
        $params["appid"] = $this->account["appid"];
        $params["affiliate_type"] = "vc";
        $params["affiliate_id"] = $this->account["affiliate_id"];
        $params["category_id"] = $category;
        ksort($params);
        return $baseurl . "?" . http_build_query($params);
    }

    /**
     * 商品検索クエリ生成
     * @link http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
     * @return string RESTクエリ文字列
     */
    private function queryItems()
    {
        $baseurl = "https://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch";
        $params = array();
        $params["appid"] = $this->account["appid"];
        $params["affiliate_type"] = "vc";
        $params["affiliate_id"] = $this->account["affiliate_id"];
        if (!empty($this->requests["keyword"])) {
            $params["query"] = $this->requests["keyword"];
        }
        if (!empty($this->requests["shop"])) {
            $params["store_id"] = $this->requests["shop"];
        }
        $params["type"] = "all";
        $params["category_id"] = empty($this->requests["category"]) ? "1" : $this->requests["category"];
        $params["hits"] = $this->requests["pagesize"];
        $params["offset"] = $this->requests["pagesize"] * ($this->requests["pagenum"] - 1);
        if (!empty($this->requests["sort"]) && array_key_exists($this->requests["sort"], $this->sortTypes)) {
            $params["sort"] = $this->sortTypes[$this->requests["sort"]];
        }
        $params["availability"] = "1";
        ksort($params);
        return $baseurl . "?" . http_build_query($params);
    }

CS Shopプラグインフォルダの service-yahoo.phpというファイルを開いて色の変っている部分を書き換える。12行目と29行目は、httpからhttpsに書き換え。このURLはAPIにクエリを生成してリクエストするURL。httpsの方が速くね?ということで変更。

15行目と32行目は $params["affiliate_type"] = "vc"; とする。書き換える前、元々は、 $params["affiliate_type"] = "yid";となっていると思うが、以前Yahoo!ショッピング独自のアフィリエイトがあった時は、affiliate_type=yid としていたが現在は バリューコマース しかアフィリエイトできないので、affiliate_type=vc とする。

バリューコマースの表示回数カウント用ビーコンを追加

/**
* 商品検索
* @link http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
* @return array 商品情報の連想配列
*/
public function getItems() {
// RESTクエリ情報を取得
$query = $this->queryItems();
 // RESTクエリ実行
$strxml = $this->download($query, $query);
$objxml = simplexml_load_string($strxml);
$hash = array();
$itemcount = intval((string)$objxml->attributes()->totalResultsAvailable);
 if (0 < $itemcount) {
            $this->pages = ceil(min(1000, $itemcount) / $this->requests["pagesize"]);
            foreach ($objxml->Result->Hit as $node) {
                array_push($hash, array(
                        "name" => (string)$node->Name,
                        "price" => $this->formatPrice((string)$node->Price, (string)$node->Price->attributes()->currency, (string)$node->PriceLabel->attributes()->taxIncluded, (string)$node->Shipping->Code),
                        "desc" => (string)$node->Description,
                        "shop" => (string)$node->Store->Name,
                        "score" => floatval((string)$node->Review->Rate),
                        "aurl" => (string)$node->Url,
                        "iurl" => empty($this->requests["mobile"]) ? (string)$node->Image->Medium : (string)$node->Image->Small,
                        "trak" => '<img src="//ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=■■■■■■■&pid=●●●●●●●●" height="1" width="0" border="0">',				    
                        "surl" => (string)$node->Store->Url
                    )
                );
            }

同じく service-yahoo.php* 商品検索と言う上のような部分を探す。

バリューコマース側が表示回数取得するためのビーコン?トラッキングタグ?なんというのかわからないが、それをアフィリエイトリンクと併載する必要があるので上の25行目のように “trak” => と追加する。MyLinkコードからリンクURL部分を抜き出しURLエンコード のIMGタブをそのまま貼り付ければOK。

取得した商品情報にトラッキングタグを追加し表示させる

/**
 * 商品一覧
 * @param array $params 要求パラメタ
 * @param array $items 商品情報の連想配列を格納した配列
 * @return string 出力コンテンツ
 */
function showItems(&$params, &$items)
{
    // 出力コンテンツ
    $output = "";
    // PC・携帯電話の判定
    if (empty($params["mobile"])) {
        // PCの場合
        foreach ($items as $item) {
            $item_escaped["name"] = o_escape(mb_strimwidth($item["name"], 0, 128, "..", "UTF-8"));
            $item_escaped["desc"] = o_escape(mb_strimwidth($item["desc"], 0, 256, "..", "UTF-8"), true);
            if (!empty($item["surl"])) {
                $shopicon = "<img src=\"https://favicon.hatena.ne.jp/?url=" . urlencode($item["surl"]) . "\" /> ";
            } else {
                $shopicon = "";
            }
            $imageurl = empty($item['iurl']) ? CS_SHOP_URL . "/no-image.gif" : $item['iurl'];
            $shopname = empty($item['shop']) ? "詳細" : $item['shop'];
            $scorelevel = empty($item['score']) ? "" : getScoreLevel($item['score']) . " 評価 " . $item['score'];
            $trak = empty($item['trak']) ? "" : $item['trak'];
            $output .= <<< EOT
<div class="csshop-item">
<h3>{$item_escaped['name']}</h3>
<div class="image"><a href="{$item['aurl']}" target="_blank"><img src="{$imageurl}" alt="{$item_escaped['name']}" width="128" />{$trak}</a></div>
<div class="price">{$item['price']}</div>
<div class="shop">{$shopicon}<a href="{$item['aurl']}" target="_blank">{$shopname}{$trak}</a></div>
<div class="score">{$scorelevel}</div>
<div class="description">{$item_escaped['desc']}</div>
</div>\n
EOT;
        }

CS Shopプラグインフォルダの function-view.phpというファイルを開き、上のような* 商品一覧という部分を探す。APIに対してのリクエストのレスポンス(商品情報)を成型してブラウザに表示させる処理をしている部分になる。

25行目に上のように追加。これは何をしてるのか説明すると長くなるので割愛。要はYahooショッピングのアフィリエイトリンクにだけバリューコマースの表示回数カウント用ビーコンを併載したいのでこうしておく。

29、31行目、商品画像、ショップ名にアフィリエイトリンクを貼っている部分にあたるのだが、そこに {$trak} と追加することでトラッキングタグ(ビーコン)が併載されるようになる。

CS Shop 便利だけどアフィリエイトとしては

以上がCS ShopでYahooショッピング商品検索APIを使う方法。CS Shopはキャッシュ機能もあって結構便利ですばらしいプラグインだけど、アフィリエイトとしては一昔前なら神プラグインだったかもしれないて感じ。現在ではコンテンツの一部として使う分にはいいかもしれないけど、これだけでページを生成してもほとんど見向きもされないと思う。