Twitter検索APIの結果をActionScriptで取得してパースする方法

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の出力結果を見てみましょう。

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

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

var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom");
変数「ns」にNamespaceを格納します。
trace(xml.ns::entry[0].ns::title);
パースしたい箇所の「ns::」を記述することで、Namespaceが適応され、つぶやきの内容を出力することができます。

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

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]);
	}
}

amazonで割引されたDVDだけをつぶやくbotを作りました


激安!割引DVD
http://twitter.com/dvd_discount

amazonにはたくさんの商品があって、なかには割引価格が90%ちかい激安商品もあります。特にDVDなどたくさんあり、中古をふくめると1円から購入できるものもあります。

これらはどうやってみつけるのか。リコメンドされなければ発見すらできず、こういうのは能動的に見つけるのは難しいので、Twitterのbotをつくって受動的に発見してみようと思ってみました。

なにか面白いDVDの発見にもなりますし、ましてやめちゃ安いとなると買ってみたくなりますねー!
興味があるかたは是非フォローしてやってください!

ちなみにカテゴリーは、「外国映画」「日本映画」「アニメ」「ミュージック」「テレビドラマ」「ドキュメンタリー」「お笑い・バラエティ」がランダムで、アダルト商品は出ないようにしています。これらのカテゴリーごとにわけたほうがいいのかもしれませんんけどねー。

激安!割引DVD
http://twitter.com/dvd_discount