28. 10月 2009 · 2 comments · Categories: Joomla

楽天アフェリエイトはAPIを使うことができます。そのためやり方によってはかなり大規模なSHOPを作ることも可能。

APIをどのように使うかはhttp://plaza.rakuten.co.jp/webservice/diaryall/を見てください。紹介されているコードを使うだけでも商品検索サイトを作ることが可能です。

ただし、オリジナリティーを出そうとするならある程度使い方を見極める必要があります。この辺は各自勉強してみてください。

さてJoomlaで使うためにはこちらのサイトですでに紹介したプラグイン入れておく必要があります。確認はPHPなどでHello worldを表示させてみてください。

APIを使うプログラム言語はいろいろありますが、私はPHPを使っています。他でもいいのですがこのところPHPを使うことが多いので。

さて実際のコードですがまずデータを検索するコードはこんな感じです。

<?php
// —————————————————————
// 楽天商品検索API の利用サンプルコード (PHP)
// —————————————————————

 
// 自分のディベロッパーID

$DEVELOPER_ID = “xxxxxxxx”;

//自分のアフィリエイトID

$AFFILIATE_ID = “zzzzzzzz”;

/* —————- 以上、変更部分 —————————— */

//——— API毎の固定値
// API名
$API_NAME       = “楽天商品検索API”;

// APIのURL
$API_BASE_URL   = “http://api.rakuten.co.jp/rws/2.0/rest“;

//オペレーション名
$OPERATION      = “ItemSearch”;

//バージョン
$API_VERSION    = “2009-04-15″;

//——— リクエストパラメタの取得とAPIへのリクエストURL生成

// リクエストURL生成
$api_url = sprintf(“%s?developerId=%s&affiliateId=%s&operation=%s”,$API_BASE_URL,$DEVELOPER_ID,$AFFILIATE_ID,$OPERATION);

$pt = $_GET['nowpage'];    //
//APIへのパラメタの連想配列
$api_params          = array(
    “keyword”        => “”,
    “version”        => $API_VERSION,
    “shopCode”       => “”,
    “genreId”        => “207796″,
    “catalogCode”    => “”,
    “hits”           => “”,
    “page”           => “$pt”,
    “sort”           => “-reviewCount”,
    “minPrice”       => “”,
    “maxPrice”       => “”,
    “availability”   => “”,
    “field”          => “”,
    “carrier”        => “”,
    “imageFlag”      => “”,
    “hits”    => “20″,
    “orFlag”         => “0″
);

// リクエストパラメタ取得
reset($api_params);
while(list ($key, $val) = each($api_params) ){
    if(isset($_REQUEST[$key]) && $_REQUEST[$key] != “”){
        // リクエストパラメタにあれば、APIへのURLに追加
        $api_url = sprintf(“%s&%s=%s”,$api_url, $key, urlencode($_REQUEST[$key]));
        $api_params[$key] = $_REQUEST[$key];
    }else if(isset($api_params[$key]) && $api_params[$key] != “”){
        // パラメタにあれば、APIへのURLに追加
        $api_url = sprintf(“%s&%s=%s”,$api_url, $key, urlencode($api_params[$key]));
    }
}

// ——— API取得処理
// API結果ステータス
$status     = null;

// API結果メッセージ
$statusmsg  = null;

// 商品情報の配列
$item_array = array();

// 結果件数
$count      = 0;

// 商品検索ボタンを押された時、APIにリクエストを投げる
//if( isset($_REQUEST['submit']) && $_REQUEST['submit'] == “商品検索” ){
   
    $contents = file_get_contents($api_url);
   
    // XMLをパースして構造体(values)に入れる
    $parser = xml_parser_create(‘UTF-8′);
    xml_parse_into_struct($parser,$contents,$values);
    xml_parser_free($parser);
   
    // 連想配列から値を取得
    if($values){
        $item_temp  = null;
        foreach ($values as $data) {
            if(isset($data['tag'])){
                // タグ名のよって分岐
                switch ($data['tag']) {
                    case ‘STATUS’:                          //共通パラメータ:Status
                        if(isset($data['value'])){
                            $status  = $data['value'];
                        }
                        break;
                    case ‘STATUSMSG’:                       //共通パラメータ:Statusに特化したメッセージ
                        if(isset($data['value'])){
                            $statusmsg  = $data['value'];
                        }
                        break;
                    case ‘COUNT’:                           //全体情報:検索数
                        if(isset($data['value'])){
                            $count  = $data['value'];
                        }
                        break;
                    case ‘PAGE’:                           //全体情報:現在のページ番号
                        if(isset($data['value'])){
                            $page  = $data['value'];
                        }
                        if (empty($page)){
                         $page = $pt;
                        }
                        break;
                    case ‘PAGECOUNT’:                      //全体情報:総ページ数
                        if(isset($data['value'])){
                            $tpage  = $data['value'];
                           
                        }
                        break;
                    case ‘ITEM’:                            //商品情報:ITEMタグ開始
                        if($data['type'] == ‘open’){
                            $item_temp = array();
                        }else if($data['type'] == ‘close’){ //商品情報:ITEMタグ終了
                            array_push($item_array,$item_temp);
                            $item_temp = null;
                        }
                        break;
                    default:
                        if(is_array($item_temp)){           //商品情報:ITEMタグ終了
                            if(isset($data['value'])){
                                $item_temp[$data['tag']] = $data['value'];
                            }
                        }
                        break;
                }
            }
        }
    }
    // 以下からHTML表示部分
//}
?>

<?php

if (!(empty($page))){
echo ‘<font color = green>’.'現在は’.$page.’/10ページです’.'</font>’.'<br>’;

}
// 以下はエラー処理、うまく取得できない時の対応
else {
    $pu = $_GET['fupage'];  
    echo ‘\’pu\’=’.$pu.’<br>’;
    switch ($pu){
     case 0:
      echo(“<META HTTP-EQUIV=Refresh CONTENT=0;URL=’http://hoge.hoge.com/1.html’>​\n”);
     break;
     case 2:
      echo(“<META HTTP-EQUIV=Refresh CONTENT=0;URL=’http://hoge.hoge.com/2.html’>​\n”);
     break;
     case 3:
      echo(“<META HTTP-EQUIV=Refresh CONTENT=0;URL=’hoge.hoge.com/3.html’>​\n”);
     break;
    }

}

?>

<!– API検索結果表示 –>
<font style=”font-size:14px;”>
<!–
<?php echo “api_urlの表示: “.$api_url.”<br>”;?>
<?php if($status    != “”){ ?>取得結果: <?=$status?><br><? } ?>
<?php if($statusmsg != “”){ ?>取得内容: <?=$statusmsg?><br><? } ?>
<?php if($count > 0){       ?>取得件数: <?=$count?><br>
–>
<style>
  a.A1:link{ color:#000000 }
  a.A1:visited{ color:#000000 }
  a.A1:hover{ color:#666666 }
</style>

<p><a class=A1 href=”hoge.hoge.com/1.html”><b><次のページ> </b><A1></a>
<a class=A1 href=”hoge.hoge.com/2.html”><b> <前のページ></b></A1></a></p>

 
<table width=”700px” border=”0″ cellspacing=”0″ cellpadding=”0″ style=”margin: 5px 0pt 0pt 0px;”>
<tr><td bgcolor=”#afafaf”>
<table width=”100%” border=0 cellspacing=1 cellpadding=5 style=”font-size:12px;”>
<tr align=”center” style=”background-color: #eeeeee;”>
<td width=”10%” >商品写真</td>
<td width=”40%”>商品説明</td>
<td width=”15%”>価格(税込)</td>
<td width=”25%”>ショップ名</td>
<td width=”10%”>レビュー数</td>
</tr>
<?php foreach ($item_array as $item){ ?>
<tr style=”background-color: #ffffff;”>
<td width=”10%”  align=”center”><a href=”<?=$item['AFFILIATEURL']?>” target=”_top”><img src=”<?=$item['SMALLIMAGEURL'] ?>” border=0 alt=”<?=$item['ITEMNAME']?>” /></a></td>
<td width=”40%” align=”left”><a href=”<?=$item['AFFILIATEURL']?>” target=”_top”><font size=”-1″><font color = blue><?=$item['ITEMNAME']?></font></a></td>
<td width=”15%” align=”right” nowrap><font size=”+1″ color =red><?=number_format($item['ITEMPRICE'])?> 円</font></td>
<td width=”25%” align=”left”><a href=”http://pt.afl.rakuten.co.jp/c/xxxxxxx/?url=<?=urlencode($item['SHOPURL'])?>” target=”_top”><font size=”-1″><font color = blue><?=$item['SHOPNAME']?></font></a></td>
<td width=”10%” align=”center”>
<a href=”<?=$item['AFFILIATEURL']?>” target=”_top”><font size=”-1″><font color = green><?=$item['REVIEWCOUNT']?></font></a></td>
</tr>
<?php } ?>
</table>
</td></tr></table>
<?php } ?>
</font>
<!– /API検索結果表示 –>

実際にページを取得し、表示させる部分がこちらです。

<?php

$pnum=$jumi[0];
//echo ‘$pnum=’.$pnum.’<br>’;

$pg = $_COOKIE['cdata'];

switch ($pnum) {
 case 1:                         
   $pg = 1;
   //echo ‘$pg_setcookie_mae1st’.$pg.’<br>’;     
      break;
 case 2:                         
   if (!($pg == 10)){
//    $pnum =0;
    $pg = $pg + 1;
       //echo ‘に’.'<br>’;    
   }
      break;
 case 3:                         
   if (!($pg == 1)){
//    $pnum =0;
    $pg = $pg – 1;
       //echo ‘さん’.'<br>’;    
   }
      break;
}

setcookie(“cdata”,$pg, time()+3600);

/

$htms =”http://hoge.hoge.com/php/item.php?nowpage=$pg&fupage=$pnum“;

$html = file_get_contents(“$htms”);

$to_encoding = mb_internal_encoding();

$html = mb_convert_encoding($html, $to_encoding, “auto”);

// テンプレートの出力
print $html;

?>

こちらのプログラムではクッキーも設定し、現在何ページを表示しているかを読み、保存するようにしています。

この2つのプログラムが実際にPHPプログラムです。Joomlaの方ではメインメニューを作り、さらにカテゴリーを作ります。カテゴリーからPHPファイルを実行させて、それを表示させます。そしてページを切りかえる時ですがJoomlaで記事をあらかじめ用意しておきます。私の場合は前のページと次のページというタイトルで作っておき、これらの記事からPHPを実行させます。PHPを実行させる時、区別する仕組みが必要なのですがhttp://program.shinyblue.org/2009/09/18/jumi%e3%81%a7%e5%bc%95%e6%95%b0%e5%bc%95%e6%b8%a1%e3%81%97/で書いたように引数の引渡しを利用します。

だいたいの流れはこんな感じです。これだけで理解できたというならかなりスキルの高い方でしょう。たいていの人はよくわからないかもしれません。実際には自分でやりながら覚えていくことになるかと思います。スクリーンショットはこんな感じです。

http://proxy.f2.ymdb.yahoofs.jp/users/3d632998/bc/58f1/__hr_/448f.jpg?BCDdrXLBSm_sr9nP