アトム-サイト
[ アトム-サイト ] - 管理人さんのページです。
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.google.co.jp/search?rlz=1C1CHMV_jaJP354JP354&aq=f&sourceid=chrome&ie=UTF-8&q=PHP+rest
(1) : http://www.google.co.jp/search?hl=ja&lr=&q=rest+soap+%E9%81%95%E3%81%84&start=10&sa=N
(1) : http://www.google.co.jp/search?hl=ja&source=hp&q=web+api+rest+soap&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=
(1) : http://www.google.co.jp/search?q=%E3%82%A2%E3%83%9E%E3%82%BE%E3%83%B3%20web%20service%20REST%20PHP&hl=ja&lr=&tbo=1&output=search&tbs=qdr:y&ei=JoiYS7miKcqTkAW-jKyLAQ&sa=X&oi=tool&resnum=5&ct=tlink&ved=0CBoQpwU
(1) : http://www.google.co.jp/search?hl=ja&lr=&q=amazon+web+service+%E7%BD%B2%E5%90%8D+SOAP&start=10&sa=N
(1) : http://www.google.co.jp/hws/search?hl=ja&q=REST+PHP&client=fenrir&adsafe=off&safe=off&lr=lang_ja
(1) : http://www.google.co.jp/search?hl=ja&q=php+rest+url&lr=lang_ja&rlz=1I7ADRA_ja
(1) : http://www.google.co.jp/search?hl=ja&source=hp&q=SOAP+REST&lr=&aq=f&aqi=g4g-m1&aql=&oq=
(1) : http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla%3Aja%3Aofficial&q=php+restful%E3%81%A8%E3%81%AF&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

 ページ閲覧者数:16人

[ php ] 一覧へ


<< 2010年3月
2010年3月20日(土)
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 31

 最近の書き込み

浜松餃子
  <2010-03-19 16:14:19>
固定IPサービス
  <2010-03-19 05:49:21>
テプラ
  <2010-03-18 16:34:55>
電話/FAX
  <2010-03-18 16:14:46>
カーステ設置
  <2010-03-17 17:18:14>
このブログの使い方
  <2010-03-16 15:26:42>
ひかり電話
  <2010-03-15 08:23:06>
T-01A
  <2010-03-15 08:10:38>
S.M.A.R.T.
  <2010-03-11 10:06:59>
壁掛けテレビ
  <2010-03-11 10:01:31>


 カテゴリー

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