- 2008年09月04日 (木)
- Tweet
ActionScript3.0でXMLRPCを使ってはてブを取得してみる
はてなブックマークのブックマーク数カウントをFlashで取得しようとして困ったのでメモ。はてなブックマーク件数取得APIを確認するとXMLRPCとかRubyとか親しみのないキーワードが敷き詰められてました。API公開=GETパラメータとXMLレスポンスという認識の私はやや諦めの境地に。・・・苦労すると思いつつも、案外簡単にやってのけました。
XMLRPCとは
リクエストをXMLで送って、レスポンスをXMLでもらう方式。XMLの書式は決まってます。プロトコルはHTTP通信ですので特別な通信方法というわけではないようです。
ActionScriptで実装するには
AS2~3で次のライブラリがありました。私は1番目のライブラリを使用しました。
- XMLRPC for Actionscript 3.0 – Free Library
- Resources – as3-rpclib – Google Code
- SourceForge.net: XML-RPC Client for ActionScript
通信方法
難しい書式かと思いきや、単純にAPIのURLやパラメータを指定するだけでした。コードは以下のとおりシンプルなものです。
// 接続先のURLを指定 rpc = new ConnectionImpl("http://b.hatena.ne.jp/xmlrpc"); // イベントハンドラー rpc.addEventListener(Event.COMPLETE, rpcCompleteHandler); rpc.addEventListener(ErrorEvent.ERROR, rpcErrorHandler); // パラメーターの設定(値と型を指定) rpc.addParam("http://www.apple.com/", XMLRPCDataTypes.STRING); rpc.addParam("http://www.adobe.com/", XMLRPCDataTypes.STRING); rpc.addParam("http://www.google.com/", XMLRPCDataTypes.STRING); // 接続開始(命令も一緒に設定) rpc.call('bookmark.getCount');
レスポンスの取得
ライブラリが結果をObject型でパースしてくれるので、こちらはEventListenerで戻ってきた結果を取得するだけ。
private function rpcCompleteHandler(evt:Event):void { var response:Object = rpc.getResponse(); for (var param:String in response) trace(param + " -> " + response[param]); }
trace文の結果は次のとおり。簡単にはてブ数を取得することができました。
http://www.adobe.com/ -> 13 http://www.apple.com/ -> 60 http://www.google.com/ -> 86
補足
はてブは残念ながらcrossdomain.xmlが設定されていないので、クロスドメイン問題に引っかかります。私はAdobe AIRで試したので問題なかったですが、Flashでマッシュアップしようとするとひとつ障壁になりますね。。しかしFlashの通信手法のバリエーションが増えたので今後何かにいかしていけそうかもです。
2010年09月06日(月) 00:28
[…] ActionScript3.0でXMLRPCを使ってはてブを取得してみる http://clockmaker.jp/blog/2008/09/as3_xmlrpc_hatena/ […]