アトム-サイト
[ アトム-サイト ] - 管理人さんのページです。
feed-icon RSS2.0   feed-icon Atom
[ php ] 一覧へ
REST SOAP
管理人さんのブログ 2009-08-04 11:06:44

php REST SOAP (.jpg)
上記実験サイト( http://imgsearch.selfip.com )で、Amazon Web Services と Yahoo!検索Webサービス、Google Ajax検索API を使っているのだが、こういうWebサービスのデータのやり取りはREST方式だったりします(Google Ajax検索APIは違いますが…)。

RESTというのは、GETパラメータでURLに値を与えてやればXMLが返ってくる方式。
例えば、Amazon Web Servicesで言えば、
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&SubscriptionId=********************&AssociateTag=imgsearch-22&Operation=ItemSearch&ResponseGroup=Small,Images&Keywords=test&SearchIndex=Blended&Page=1&ContentType=text/xml
↑こんなURLでアクセスすると
結果がXMLでブラウザに表示されます(SubscriptionIdは自分で取得してください)。
最初の取っ掛かりがURLを打ち込むだけでとても簡単なので、最近のWebサービスはこのRESTがメインだったりします(Yahoo!のWebサービスもほぼREST)。
phpのプログラムはこんな感じ。
$xml = simplexml_load_file($url);
$items = ($xml->Items);
foreach($items->Item as $amazon_item) {
....
....
}
$amazon_itemに検索結果が入ってくるので、後はそれを利用するだけ。
使ってみた結論、SOAPより早い処理で結果が来るので、困らなければ(与える要素が多くなければ)REST方式で十分です。


このRESTより細かく設定できるのがSOAP。
お仕事でSOAPのサービスを使う事になったので、まずはAmazon Web Servicesで試してみました(Amazon Web ServicesはRESTとSOAP両方に対応)。
ネットで情報を探します。…が、phpでSOAPサービスにアクセスする方法ってほとんど載ってないですね。
Amazonのサイトも何処を見ればいいのか分からなかったです(しかも、英語だし…)。
多分↓この辺りです。
Amazon Web Servicesのサイトの左下。
『Developer Connection』-『Resource Center』
『Amazon Associates Web Service』
『Technical Documentation』
『Docs: Amazon E-Commerce Service (API Version: 2007-02-22)』
『Online HTML』-『View』
『API Reference』内に色々あります(WSDLの情報とかモロモロ)。

なんとかやってみました。

php5以上だと標準でSOAPが使える様です。
…が、パッケージのインストールは必要です。
# yum install php-soap
# /etc/init.d/httpd reload

phpのプログラムは以下です。
$client = new SoapClient("http://ecs.amazonaws.com/AWSECommerceService/JP/AWSECommerceService.wsdl");
$params = array(
'SubscriptionId' => '********************',
'AssociateTag' => 'imgsearch-22',
'Request' => array(
'SearchIndex' => 'Blended',
'Keywords' => 'test',
'ResponseGroup' => array('Small','Images')
)
);
$result = $client->ItemSearch($params);
$items = $result->Items;
foreach($items->Item as $amazon_item) {
....
....
}
こんな感じですね(SOAPで提供されてるItemSearchをそのまま使うやり方です)。

もっとキッチリやろうとすると、最初にXMLを作っておいて送信という感じですね。
$msg = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-enc="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Header>
<UserInfo xmlns="http://********">
<UserName>***************</UserName>
</UserInfo>
</soap:Header>
<soap:Body>
<ItemSearch xmlns="http://********">
....
....
</ItemSearch>
</soap:Body>
</soap:Envelope>';
$client = new SoapClient("http://********wsdl");
$result = $client->__doRequest($msg,"http://********","http://********",0);

結果もXMLパーサで解析したり…。
$xml_parser = xml_parser_create();
xml_set_character_data_handler($xml_parser, "getBody");
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!xml_parse($xml_parser, $result, false)) {
....
....
}
ま、この辺りはやり易い様に…。

本で勉強するならこの辺りですかね(Amazonです)。

~~~~

amazonから、以下のメールが送信されてきた。
Amazon アソシエイト Web サービスの名称を、「Product Advertising API」へ変更
Product Advertising API へのリクエストに、認証のための電子署名を含める必要がある
名称はいいんだけど、リクエストに認証を付けなければいけないらしい。
説明読んだけど、ちょっと手間がかかる、う~む。
仕方ない、やるか…。
………
………
………
やりました、RESTだけ…。
面倒&時間無しなので、SOAPのプログラムは、RESTに直して対応済み。

※ 『php』に繋がる関連物を 視覚的に探しだせるサイトを作ってみました(よろしければクリックしてみてくださいね)。

 コメント記入者:

 リンク元:
(2) : http://www.multiburst.net/ElectricBrain
(1) : http://www.google.co.jp/search?q=PHP%E3%80%80REST&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
(1) : http://www.google.co.jp/search?hl=ja&q=php+rest&btnG=%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=
(1) : http://www.google.co.jp/search?q=RESTful%E3%80%80PHP&btnG=%E6%A4%9C%E7%B4%A2&hl=ja&lr=&client=firefox-a&channel=s&rls=org.mozilla%3Aja%3Aofficial&hs=YuF&sa=2
(1) : http://www.google.co.jp/search?hl=ja&rlz=1C1CHMG_jaJP291JP307&q=SOAP+REST+API&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja&aq=f&oq=
(1) : http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4MOCJ_jaJP347JP347&q=php+rest
(1) : http://www.google.co.jp/search?hl=ja&source=hp&q=PHP+REsT&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
(1) : http://www.google.com/ie?q=PHP%E3%80%80Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%80%80REST&hl=ja
(1) : http://www.google.co.jp/search?hl=ja&q=PHP+SOAP+%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E8%AA%8D%E8%A8%BC&sourceid=navclient-ff&rlz=1B3GGGL_jaJP334JP334&ie=UTF-8
(1) : http://www.google.co.jp/search?q=php%E3%80%80rest&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP211JP216

 ページ閲覧者数:15人

[ php ] 一覧へ


<< 2009年11月
2009年11月8日(日)
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

 最近の書き込み

打ちっぱなし
  <2009-11-05 13:32:56>
T-01A
  <2009-11-04 13:53:05>
ハイキング
  <2009-11-03 07:25:18>
(*)日産キューブ インパネ
  <2009-10-31 16:44:00>
(*)日産キューブ インパネ
  <2009-10-31 12:43:26>
胃カメラ
  <2009-10-30 12:47:11>
PDA遍歴
  <2009-10-30 11:50:37>
ハゼ釣り
  <2009-10-30 11:41:37>
無線LAN アクセスポイント
  <2009-10-30 08:56:56>
腰痛
  <2009-10-28 09:24:22>


 カテゴリー

おでかけ(67)
サッカー(41)
季節(32)
食べ物(30)
旅(28)
家(28)
映画(26)
地元(25)
DIY(24)
家族(21)
学校(20)
モバイル(20)
生物(20)
健康(18)
Web(17)
風景(17)
ドラマ(17)
通勤(16)
ブログ(14)
Winアプリ(14)
家電(13)
ゲーム(12)
足技(12)
ブラウザ(11)
本(11)
ゴルフ(10)
自転車(10)
Linux(10)
php(9)
 ・ REST SOAP
 ・ ダウンロードできない
 ・ zip
 ・ 画像リサイズ
 ・ 正規表現
 ・ session廃棄
 ・ 価格にカンマ
 ・ php.ini
 ・ アップロードデータのサイズ
javascript(9)
ネットワーク(8)
PCハード(8)
飲み物(8)
会社(8)
感銘映像(6)
税金(5)
空想(5)
VMware(4)
Ruby(4)
データベース(3)
perl(1)