This movie requires Flash Player 9

※APIの仕様が変わったのか、2010/10時点で上記のFLASH動きません。未調査状態です
→気のせいでしたw

TwitterとFLASHの連携について調べてみたのでメモ。
別ドメイン間(クロスドメイン)でtwitterのつぶやきを取得は
FLASHだけではできないので一度FLASHと同じドメインにあるPHPでつぶやきのXMLファイルを取得してきてから、FLASHで読み込ませる。

FLASH本体のソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var xmlLoader:URLLoader;
var bodyArray:Array;
var userArray:Array;
var iXML:XML;
var NowTwit:int = 0;
 
init();
 
function init():void {
	var n:int = Math.floor(Math.random()*1000000);
	var xmlURL:String = "http://yourdomein.com/proxy.php?url=http://twitter.com/statuses/public_timeline.xml?cache="+n;
	xmlLoader = new URLLoader();
	xmlLoader.addEventListener(Event.COMPLETE, traceComplete);
	xmlLoader.addEventListener(ProgressEvent.PROGRESS, xProgress);
	xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, XmlErrorHandler);
	xmlLoader.load(new URLRequest(xmlURL));
}
 
function xTimerEventHandler(evt:TimerEvent):void {
	user_txt.text =userArray[NowTwit];
	twit_txt.text = bodyArray[NowTwit];
	NowTwit++;
	if(NowTwit >= bodyArray.length ) {
		NowTwit = 0;
	}
 
}
 
function xProgress(evt:ProgressEvent):void {
 
twit_txt.text = "つぶやきロード中";
 
}
 
function traceComplete(evt:Event):void {
 
		iXML = new XML(xmlLoader.data);
		bodyArray = new Array;
		userArray = new Array;
 
		for(var t:int = 1; t <= 10; t++) {
 
			var body:String = String(iXML.status[t-1].text);
			var user:String = String(iXML.status[t-1].user.name);
			userArray.push(user);
			bodyArray.push(body);
		}
 
	var timerObj:Timer = new Timer(3000);
	timerObj.addEventListener(TimerEvent.TIMER, xTimerEventHandler);
	timerObj.start();
}
 
function XmlErrorHandler(evt:Event):void {
	trace("xmlError");
}

alt alt-scape weblog
こちらのブログの記事とソースを参考にさせていただきました。

ここにメモ書きしたソースは間違い等ある可能性があるので参考にする場合はご注意を。

proxy.php
1
2
3
4
5
6
<?php
    if(isset($_GET["url"])) {
		$file = readfile($_GET["url"]);
	return $file;
	}
?>

XML読み込むPHP。今回PHPは動けばよしということでスルー。
このスクリプト試してた時にtwitterのAPIにアクセスしまくってたら
Rate limit exceeded. Clients may not make more than 150 requests per hour.
っていうXMLが返ってきた。1時間に150リクエスト以上すると制限がかかるんだねー。