解説はこれくらいにして,実際にWeb APIを使ってみましょう。

 利用例として,楽天ウェブサービスに接続し,商品検索を行うプログラムを作成してみましょう。XAMPPを使います。XAMPPはCドライブ以下にインストールしたと仮定して説明します。

 楽天ウェブサービスを利用するには,デベロッパーIDが必要です。楽天会員のユーザーID(アカウント)があれば,すぐに取得できます。楽天ウェブサービスのWebサイト(http://webservice.rakuten.co.jp/)にアクセスし,図3の画面の左側にある「ご利用方法」から「デベロッパーIDを取得」というリンクをクリックし,パスワードを入力するだけです。

 楽天会員ではない場合は,左側にある「楽天会員登録をする」をクリックして登録を済ませてください。ユーザー登録が終わったら,「ユーザ名」と「パスワード」を入力してデベロッパーIDを入手しましょう。

 デベロッパーIDを入手したら,次はいよいよプログラミングに移ります。まず,テキスト・エディタを開いて,リスト1のコードを記述します。リスト1の文字エンコーディングには,UTF-8を指定します。それから,rakuten_soap.phpという名前を付けて,Cドライブ以下に作成されたXAMPPフォルダ内のhtdocsに保存してください。保存できたらXAMPPのコントロールパネルからApache HTTP Serverを起動します。

リスト1●楽天ウェブサービスにSOAPで接続し商品を検索するプログラム
リスト1●楽天ウェブサービスにSOAPで接続し商品を検索するプログラム
[画像のクリックで拡大表示]
図4●楽天のWebサイトにアクセスして商品を検索した結果の画面
図4●楽天のWebサイトにアクセスして商品を検索した結果の画面
[画像のクリックで拡大表示]

 Webブラウザを起動し,URLの欄に「http://localhost/rakuten_soap.php」と入力して,アクセスしてみましょう。SOAP形式のインタフェースを使い,楽天データベースから検索された商品の一覧が表示されるはずです(図4)。うまくいかない場合は,デベロッパーIDが間違っていないか,保存したコードの文字エンコーディングがUTF-8になっているか,などを確認してみてください。

PHPを利用してデータを交換する

 プログラムを解説する前に,PHPにおけるSOAPによるデータ交換について説明します。

 SOAPは,サービスを公開したり利用したりするための標準インタフェースです。PHPでは,SOAPによってデータをやり取りできる通信機能が拡張モジュールとして提供されているので,手軽に処理を記述できます。

 SOAPを使った通信では,WSDL(Web Services Description Language)が重要な役割を果たします。WSDLは,Webサービスがインターネット上のどこに存在し,データのやり取りにはどのフォーマットやどのプロトコルを使っているのか,といったWeb APIで提供されるパラメータや関数をXML形式で定義した言語です。WSDLで記述したXML文書のことをWSDL文書と呼びます。

 PHPなどの開発ツールでは,Web APIを提供する企業が用意したWSDL文書を読み込ませると,そのWeb APIに対応したスケルトン・コードが自動的に作成できたり,オブジェクトのプロパティやメソッドを生成したりします。作成するプログラムもWDSL文書を読み込み,自動生成されたメソッドを利用してWeb API(アクセスする楽天のAPI)にアクセスしています。

 詳しくリスト1のプログラムを見てきましょう。まず(1)で,楽天のWeb APIのWSDL文書を指定しています。これにより,(5)の$clientオブジェクトのoperationItemSearchというメソッドが自動生成され,利用できるようになります。(2)ではオプションとして渡す配列を定義し,(3)で(1)のWSDL文書へのURLと(2)のクライアントに渡すオプションを指定し,SOAPで通信するためのオブジェクトを生成しています。

 (4)はWeb APIに渡すパラメータの設定です。先ほど取得したデベロッパーIDを「********」の部分に代入してください。コードを見ればわかるように,「日経ソフトウエア」という文字で商品を検索しています。最後の「1.11」はAPIのバージョンです。

 (5)では,WSDLから自動的に作成されたメソッドを使って,商品の検索結果を$result変数に格納します。メソッドで呼び出した結果は,自動的にPHPのオブジェクトや配列に変換されて返されます。今回の例では,検索結果が$result変数のreturnプロパティに格納されているため,var_dump関数を使って,商品の一覧部分であるitemArrayプロパティの内容をわかりやすく表示しています。