未分類 > リンクシェアWEBサービスのサンプルコード
正確には旧クロスオーバーサーチになると思うのですが、楽天関与の度合いが大きくなり、APIディベロッパーポータルに情報が統合されてしまい、余計に解釈が難しくなってしまった気がします。
https://www.linkshare.ne.jp/rakuten/ のページにある「よくある質問」の中にあるように、
旧クロスオーバーサーチWEBサービスで楽天市場商品を扱うことは出来ません。
商品画像URL、商品タイトル、説明文はレスポンスで得られますが、肝心な商品ページへのリンクは得られません。
バリューコマースのようにレスポンスから表示カウント用のイメージURLを得ることは出来ないようですので、任意で表示カウント用のイメージタグを生成しています。
ウェブサービスにおける情報が統合されたAPIディベロッパーポータルでさえ情報が薄く、リンク構造にまで言及する説明がなく、解釈が難しいのですが、とりあえず、リンクシェアでWEBサービスを介さずにリンク作成を行った際に生成される表示カウント用イメージタグのリンク構造に沿って生成するようにしました。
デモページで動作状況をご確認ください。
<?php /**********************************************************************/ // クロスオーバーサーチ Webサービス (商品検索API) トークン $token = ""; /********************************************************************** ソート時のパラメータ値 (参考) 参考価格 retailprice 商品名 productname 商品概要 shortdesp 主カテゴリ categoryname 広告主 ID(MID) mid キーワード keyword ***********************************************************************/ echo '<div style="width:80%;margin:5% auto;">'; echo '<div style="margin:0; padding:0">'; ?> 検索フォーム <div style="margin:0 0 2% 0;"> <form name="searchform" id="itemsearchform" method="get" action=""> <input type="text" name="keyword" id="itemkeyword" value="" /> <input type="submit" id="itemssubmit" value="検索" /> </form> </div> <?php $keyword = htmlspecialchars($_GET['keyword'], ENT_QUOTES); // URLエンコード $e_keyword = urlencode($keyword); $pagenumber = (empty($_GET['pagenumber'])) ? 1 : $_GET['pagenumber']; $baseurl = 'https://productsearch.linksynergy.com/productsearch'; $param = array(); // キーワードをセット if ($keyword != "") { $param['keyword'] = $keyword; // リクエストパラメーターをセット(任意) $param['exact'] = ''; // 完全一致キーワード $param['one'] = ''; // orキーワード $param['none'] = ''; // 除外キーワード(keyword exact one)とセットで使用 $param['cat'] = ''; // カテゴリ $param['mid'] = ''; // 広告主ID $param['sort'] = ''; // ソート $param['sorttype'] = ''; // 昇順(asc)か降順(dsc) $param['max'] = 10; // 1ページに表示する商品数 $param['pagenumber'] = $pagenumber; // 表示する検索結果のページ番号 // 各パラメーターデータを'&'でつないでいく $base_request = ""; foreach ($param as $key => $value) { if($value) { $base_request .= "&" . $key . "=" . rawurlencode($value); } } $url = $baseurl . "?token={$token}&" . substr($base_request, 1); // レスポンスデータを取得 $xml = simplexml_load_file($url); } // 商品数を取得 $TotalMatches = $xml->TotalMatches; // 総ページ数を取得 $TotalPages = $xml->TotalPages; // レスポンス商品数が1000を超えるようなら1000に制限 if($TotalMatches > 1000){ $TotalMatches = 1000; } // 総ページ数が100を超えるようなら100に制限 if($TotalPages > 100){ $TotalPages = 100; } // 次ページ、前ページをセット $nextpagenumber = $pagenumber+1; $prevpagenumber = $pagenumber-1; if($xml) { // レスポンス表示部分 foreach ($xml->item as $item) { // 表示カウント用イメージタグ生成 $url = $item->linkurl; $url = urldecode($url); $url = parse_url($url); $query = $url['query']; parse_str($query,$impcount); $id = $impcount['id']; $bids = $impcount['offerid']; $type = $impcount['type']; ?> <div style="width:128px;float:left;"><a target='new' href="<?php echo $item->linkurl; ?>" ><IMG border=0 src="<?php echo $item->imageurl; ?>" width="120" ></a><IMG border=0 width=1 height=1 src="httpss://ad.linksynergy.com/fs-bin/show?id=<?php echo $id; ?>&bids=<?php echo $bids; ?>&type=<?php echo $type; ?>&subid=0" ></div> <div style="font-weight:bold;margin-left:128px;"><a target='new' href="<?php echo $item->linkurl; ?>" ><?php echo $item->productname; ?></a><IMG border=0 width=1 height=1 src="httpss://ad.linksynergy.com/fs-bin/show?id=<?php echo $id; ?>&bids=<?php echo $bids; ?>&type=<?php echo $type; ?>&subid=0" ></div> <div style="color:#ff0000; font-weight:bold;margin-left:128px;">価格 <?php echo number_format((int)$item->price); ?> 円</div> <div style="margin-left:128px;"><?php echo $item->description->short; ?></div> <div style="clear:both; visibility:hidden; width:100%; height:10px;">クリア</div> <hr style="width:100%;border:1px dotted #bbb;" /> <?php } // foreach end echo "全 ".number_format((int)$xml->TotalMatches). " 数"; } // ページャー echo '<div>'; $nextpagenumber= '2'; // $url_a ="<a style='background-color: #ffffff; color: #ff0000; margin: 0; padding: 0.2em 0.5em; border: solid 1px; text-decoration: none;' href=\"?keyword=$e_keyword&pagenumber="; $url_b ="\""; $html_pagenumber_Link = pagenumber_Link($TotalPages,$pagenumber,$nextpagenumber,$url_a,$url_b); echo $html_pagenumber_Link; function pagenumber_Link($TotalPages,$pagenumber,$nextpagenumber,$url_a,$url_b){ $html = ""; if($TotalPages < 1) return $html; if($pagenumber > 1) $html .= $url_a.($pagenumber-1).$url_b.' style="background-color: #ffffff; margin: 0; padding: 0.2em 0.5em; border: solid 1px; text-decoration: none;"'.">&laquo;</a>"; $prevpagenumber = $pagenumber - $nextpagenumber; while ($prevpagenumber < $pagenumber) { $prevpagenumber++; if($prevpagenumber > 1) $html .= $url_a.($prevpagenumber-1).$url_b.">".($prevpagenumber-1)."</a>"; } $html .= '<span style=" background-color: #ff0000; color: #ffffff; margin: 0; padding: 0.2em 0.5em; border: solid 1px #ff0000; text-decoration: none;">'.$pagenumber.'</span>'; if($pagenumber < $TotalPages){ $TotalPages = $TotalPages - $pagenumber; if($TotalPages > $nextpagenumber) $TotalPages=$nextpagenumber; $plus=0; while ($plus < $TotalPages) { $nextpagenumber=$pagenumber+$plus+1; $html .= $url_a.$nextpagenumber.$url_b.">".$nextpagenumber."</a>"; $plus++; } $html .= $url_a.($pagenumber+1).$url_b.' style="background-color: #ffffff; color: #ff0000; margin: 0; padding: 0.2em 0.4em; border: solid 1px; text-decoration: none;"'.">&raquo;</a>"; } return $html; } echo '</div>'; echo '</div>'; echo '</div>'; ?>