Flash(AS3) から XML-RPC を利用(zoome API)
最近動画に関して少々調査を行っています。
ここで、動画共有サイト zoome で提供されている API で XML-RPC という単語を目にしました。XML-RPC とはなんぞや、と調べて見たところ、指定の形式の XML データ(request)を指定のサーバ(URL)に送信すると、指定の形式の XML データ(response)が得られるというもののようです。
そういえば、XMLをサーバに送信するような処理を書いたことはなかったな、ということで、zoome API を元に Flash(AS3) から XML-RPC をどのように利用するかのメモを以下に記述します。
例として「マイページのURLネーム(zoomeurl)」が「sample」という会員の、「zoome の会員ID(zoomeid)」を取得します。
zoome API 解説ページ
http://www.zoome.jp/help10
会員基礎情報 取得メソッド説明
http://www.zoome.jp/help10#zoome.getUserInfo
会員基礎情報 取得メソッド(zoome.getUserInfo)の説明箇所の「▼request」 に記されている XML データを、APIのURI(エンドポイント) http://up.zoome.jp/xmlrpc に送信することで、「▼response」 に記されている XML データを取得することができます。
package twm.index.analyze { import flash.events.ErrorEvent; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequestMethod; import flash.net.URLRequest; public class Sample { private var response:URLLoader; public function Sample() { } public function startRequest():void{ var requestXml:XML = <methodCall> <methodName>zoome.getUserInfo</methodName> <params> <param><value><struct> <member><name>zoomeurl</name><value><string></string></value></member> </struct></value></param> </params> </methodCall> ; var zoomeurl:String = "sample"; requestXml.params.param.value.struct.member.value.string = zoomeurl; var request:URLRequest = new URLRequest(); request.contentType = 'text/xml'; request.data = requestXml; request.method = URLRequestMethod.POST; request.url = "http://up.zoome.jp/xmlrpc"; response = new URLLoader(); response.addEventListener(Event.COMPLETE, eventComplete); response.addEventListener(ErrorEvent.ERROR, eventError); response.load(request); } private function eventError(event:ErrorEvent):void { } private function eventComplete(event:Event):void { var loader:URLLoader = URLLoader(event.target); var responseXml:XML = new XML(loader.data); var zoomeidList:XMLList = responseXml.params.param.value.struct.member.(name == "zoomeid"); var zoomeid:String = zoomeidList.value.i4; trace('zoomeid: ' + (zoomeid)); } } }
追記) zoome API はクロスドメインの関係で web 上からは直接アクセスできない事に気づきました。上記サンプルコードはローカル PC 上では動作します。