第2回 楽天商品検索API Perlサンプルコード解説 ~ APIへのURL生成 (2/4回)
前回では商品検索の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になげてみます!