HTTPServiceを使ってみる

FlexのHTTPServiceを使うとWebサービスの利用が簡単になりそうなのでちょっと使ってみました。
(今回のサンプルではlivedoorWeather Hacksで提供されている「お天気Webサービス(REST)」を使用してます)

さっそく、コード。これはAdobe AIRのコードです。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
  <mx:Script>
    <![CDATA[
      import mx.rpc.events.ResultEvent;
      private function init():void {
        service.send();
      }
      
      private function serviceResult(event:ResultEvent):void {
        tarea.text = event.result as String;
      }
    ]]>
  </mx:Script>
  
  <mx:HTTPService id="service" url="http://weather.livedoor.com/forecast/webservice/rest/v1"
    resultFormat="text" result="serviceResult(event)">
    <mx:request>
      <city>63</city>
      <day>tommorrow</day>
    </mx:request>
  </mx:HTTPService>
  
  <mx:TextArea id="tarea" width="100%" height="100%" editable="false" />
</mx:WindowedApplication>

※パラメータのcityで63、dayにtomorrowをしていますが、これは「東京の明日の予報」を取得することを意味しています。
 パラメータの詳細はお天気Webサービス仕様を参照。


これを実行すると、つぎのようなリクエストがとびました。

GET /forecast/webservice/rest/v1?city=63&day=tommorrow HTTP/1.1
Referer: app:/Test.swf
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, text/css, image/png, image/jpeg, image/gif;q=0.8, application/x-shockwave-flash, video/mp4;q=0.9, flv-application/octet-stream;q=0.8, video/x-flv;q=0.7, audio/mp4, application/futuresplash, */*;q=0.5
x-flash-version: 9,0,115,0
User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0
Host: weather.livedoor.com
Connection: Keep-Alive
Cookie: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Cookieは伏字にしてます。

cityとdayというパラメータがちゃんと設定されていますね。

で、実行結果はこれ。

簡単にアクセスできますね。
なお、HTTPServiceのresultFormatプロパティを"text"にしてますが、TextAreaに単純に貼り付けるためにこうしました。
本来は"e4x"などを設定して、XMLとして扱った方がいいでしょう。

ちなみに、Adobe AIRからアクセスするとUser-Agentはこうなんるんですね。

User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0