前回では商品検索の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の取得(楽天会員登録もこちらから)
今回は楽天商品検索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になげてみます!