241817 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

楽天ウェブサービスセンターブログ

楽天ウェブサービスセンターブログ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

Category

Calendar

Archives

2024.04
2024.03
2024.02
2024.01
2023.12

Freepage List

2007.04.12
XML
前回では商品検索のHTMLフォームを表示させました。
今度はこのフォームに実際にキーワードと価格を入力して
「商品検索ボタン」を押してみます。

商品検索結果一覧が表示されます。

今回は入力された内容が
楽天商品検索APIにどういった形で投げられているのかをみていきます

■商品検索APIへのURL生成

サンプルコード全文はこちら


 1: #!/usr/bin/perl
 2: #---------------------------------------------------------------
 3: # 楽天1商品検索API の利用サンプルコード (Perl)
 4: #---------------------------------------------------------------
 5: # 以下を変更してPerlの実行環境におくだけでOK
 6: # 詳細な仕様は以下を参照
 7: # - 楽天ウェブサービス- http://webservice.rakuten.co.jp/
 8: 
 9: #---------------- 以下、変更部分 ------------------------------#
 10: # 自分のディベロッパーID
 11: 
 12: $DEVELOPER_ID = "自分のディベロッパーID";
 13: 
 14: # 自分のアフィリエイトID
 15: 
 16: $AFFILIATE_ID = "自分のアフィリエイトID";
 17: 
 18: #---------------- 以上、変更部分 ------------------------------#


上記ですが楽天ウェブサービスで取得したディベロッパID,アフィリエイトIDを
入れるようにしてください。IDは楽天会員に登録すれば誰でも無料で取得できます。

デベロッパーIDの取得(楽天会員登録もこちらから)


   19: use LWP::Simple;
   20: 


今回は楽天商品検索APIへの接続通信にlibwww-perlライブラリ(通称LWP)を利用します。
LWPはPerlでHTTP通信を行うためのライブラリ群で、今回はLWP::Simeleモジュールを
利用しますので、ここでそのモジュールの利用宣言をします。

ここでuse strict;等を宣言しておくと変数のタイプミスや不要な宣言を防ぐことが
出来ますが今回は省略しています。


 21: #---------------------------------
 22: # 定数
 23: #---------------------------------
 24: # API名
 25: $API_NAME       = "楽天商品検索API";
 26: 
 27: # APIのURL
 28: $API_BASE_URL   = "http://api.rakuten.co.jp/rws/1.4/rest";
 29: 
 30: # APIのタイプ
 31: $OPERATION      = "ItemSearch";
 32: 
 33: # APIのバージョン
 34: $API_VERSION    = "2007-03-22";


上記は特に変更の必要はありません。
楽天APIはバージョン毎に半永久的に利用できるようになっていますが
最新のバージョンについてはこちらをご確認ください。


 36: #---------------------------------
 37: # メイン処理
 38: #---------------------------------
 39: # APIステータス
 40: $status  = "";
 41: 
 42: # APIからのメッセージ
 43: $statusmsg  = "";
 44: 
 45: # 取得件数
 46: $count = 0;
 47: 
 48: # 商品リスト
 49: @items = ();
 50: 
 51: # APIへのパラメタの連想配列
 52: %api_params       = (
 53:   "keyword"     => "",
 54:   "version"     => $API_VERSION,
 55:   "shopCode"    => "",
 56:   "genreId"     => "",
 57:   "catalogCode" => "",
 58:   "hits"        => "",
 59:   "page"        => "",
 60:   "sort"        => "",
 61:   "minPrice"    => "",
 62:   "maxPrice"    => "",
 63:   "availability"=> "",
 64:   "field"       => "",
 65:   "carrier"     => "",
 66:   "imageFlag"   => ""
 67: );
 68: 


まずはこのPerlスクリプトで利用する変数の宣言から行います。
39行目は楽天商品検索APIからの出力共通パラメタのステータス、
42行目は出力共通パラメタのステータスメッセージ、
46行目は出力サービス固有パラメタのヒット件数、
が入ります。

48行目には後ほど解説しますが、各商品のXML文字列の配列がはいります。
52行目の連想配列は楽天商品検索APIになげることができる入力パラメタ名のキーになります。
値はバージョン以外は今は空文字列になっています。


 69: #---------------------------------
 70: # フォーム値からのパラメタ取得
 71: #---------------------------------
 72: 
 73: # リクエストURL生成
 74: $api_url = sprintf("%s?developerId=%s&affiliateId=%s&operation=%s",$API_BASE_URL,$DEVELOPER_ID,$AFFILIATE_ID,$OON);
 75: 
 76: # GETメソッドの場合
 77: if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
 78:  $buffer = $ENV{'QUERY_STRING'};
 79: # POSTメソッドの場合
 80: } else {
 81:   read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
 82: }
 83: 
 84: # リクエストパラメタを連想配列に入れる
 85: my %req_params = map { /([^=]+)=(.+)/ } split /&/, $buffer;
 86: 
 87: 
 88: # APIのクエリ生成
 89: while ( ( $key, $value ) = each ( %api_params ) ) {
 90:     if($req_params{$key} ne ""){
 91:         $api_url = sprintf("%s&%s=%s",$api_url, $key, $req_pakey});
 92:     }elsif($api_params{$key} ne ""){
 93:         $api_url = sprintf("%s&%s=%s",$api_url, $key, $api_pakey});
 94:     }
 95: }


69行目からはフォームに入力された値を取得しています。

74行目ではまず楽天商品検索APIに投げるURLになるベースの文字列を生成しています。
sprintfは文字列を第2引数以降で与えられた変数でフォーマットする関数です。

76行目からは実際のフォーム値の取得、GETの場合とPOSTの場合ではやり方が違います。
GETの場合は78行目でクエリパラメタを環境変数($ENV)から取得しています。
POSTの場合は81行目でリクエストの内容を標準入力から取得しています。

CGIモジュールが利用できるのであればそれぞれのパラメタ毎に
  $cgi = new CGI;
  $keyword = $cgi->param->('keyword');

みたいにしてもいいかもしれません。

それぞれ受け取った内容を84行目でリクエストのパラメタのキーと値毎に
連想配列にいれています。

88行目からは52行目で定義したAPIのパラメタ毎に
フォームからのリクエストパラメタ値(90行目)
もしくはAPIのデフォルトのパラメタ値(92行目)で有効な値があれば
74行目で生成した楽天商品検索のURLに追加していくようにしています。

これで楽天商品検索APIへのURL生成は完了です。
次回は実際に上記をLWPを利用して楽天商品検索APIになげてみます!





お気に入りの記事を「いいね!」で応援しよう

Last updated  2007.04.12 19:09:03
[サンプルソース紹介] カテゴリの最新記事



© Rakuten Group, Inc.