Twitterの検索APIで、主に使われるのはハッシュタグで検索したつぶやきを使うときだと思います。たとえば、「#CS5_jp」のハッシュタグを検索APIで取得したいとします。

ATOM形式:http://search.twitter.com/search.atom?q=%23CS5_jp
JSON形式:http://search.twitter.com/search.json?q=%23CS5_jp

まぁFlashなんで、わざわざjsonじゃなくてatomでいいやー!と思いきや、ATOM形式はXMLを扱うように、ActionScriptでパースすることができませんでした。

ATOM形式はRSSリーダーに登録できるように設計されているもので、XML文章フォーマットでありながら閉じタグが省略されているのが、ActionScriptでうまくパースできない原因でした。ここで使うのがAS3のNamespaceクラスです。XMLをloadしたあと、格納された変数にnode名を入力してパースしていくと思います。その、noed名の手前に、このNamespaceを入力していく必要があるみたいです。Twitterの出力結果を見てみましょう。

xml
1
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="<b>http://www.w3.org/2005/Atom</b>" xmlns:twitter="http://api.twitter.com/">

feedの要素の中に、Namespaceが記述されています。「http://www.w3.org/2005/Atom」というのがNamespaceにあたる内容です。

ActionScript3
1
var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom");

変数「ns」にNamespaceを格納します。

ActionScript3
1
trace(xml.ns::entry[0].ns::title);

パースしたい箇所の「ns::」を記述することで、Namespaceが適応され、つぶやきの内容を出力することができます。

まとめるとこんなかんじです。

ActionScript3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom");
var loader:URLLoader = new URLLoader();
var xml:XML = new XML();
var request:URLRequest = new URLRequest("http://search.twitter.com/search.atom?q=%23CS5_jp");
loader.load(request);
loader.addEventListener(Event.COMPLETE, loadComplete);
function loadComplete(e:Event):void {
    xml = new XML(e.target.data);
    //つぶやきをパース
    for(var i:int = 0; i<xml.ns::entry.length(); i++){
        //つぶやき文章
        trace(xml.ns::entry[i].ns::title);
        //投稿者のアイコン写真
        trace(xml.ns::entry[i].ns::link.@href[1]);
    }
}