Flare を使ってみる
Flare という Mac OSX でも使える Flash のデコンパイラーがあることを知ったので、早速試してみる。
手始めに先日のエントリーで使った twitter.swf をでコンパイルしてみたところ、なんと 7000 行以上もある。が、ほとんどは MovieClip 関連で、プログラムっぽいものは frame1 という名前の関数のあたりと、適宜スクロールバーを表示するためのスクリプトとおぼしき部分。
Twitter との絡みの部分だけを抜き出すとこんな感じっぽい。
frame 1 { var msg = _root.msg; var name = _root.name; var posttime = _root.posttime; var my_styles = new TextField.StyleSheet(); my_styles.setStyle('a', {'color': '#0000FF', 'textDecoration': 'underline'}); my_styles.setStyle('.s1', {'color': '#666666', 'fontSize': '11px'}); msg.__set__styleSheet(my_styles); msg.setStyle('borderStyle', 'none'); msg.setStyle('fontSize', '11'); name.__set__styleSheet(my_styles); posttime.__set__styleSheet(my_styles); var timeStr = _root.twitterTime; trace(timeStr); timeStr = timeStr.substr(0, timeStr.indexOf('+')); trace(timeStr); msg.__set__text('<span class="s1">' + _root.twitterText + '</span>'); posttime.__set__text('<span class="s1">Posted at ' + timeStr + '</span>'); name.__set__text('<span class="s1">by <a href="http://twitter.com/' + _root.twitterName + '" target="_blank">' + _root.twitterName + '</a></span>'); } instance name of movieClip 130 Label { onClipEvent (construct) { autoSize = 'right'; html = true; text = 'by'; visible = true; minHeight = 0; minWidth = 0; } } instance msg of movieClip 99 TextArea { onClipEvent (construct) { editable = true; html = true; text = ''; wordWrap = true; maxChars = null; restrict = ''; enabled = true; password = false; visible = true; minHeight = 0; minWidth = 0; } } instance posttime of movieClip 130 Label { onClipEvent (construct) { autoSize = 'right'; html = true; text = 'posted at'; visible = true; minHeight = 0; minWidth = 0; } }
これを見ると、ルートのタイムラインから twitterText, twitterName, twitterTime の3つを拾って来て、それぞれ対応するテキストフィールド(msg, name, posttime かな)に表示させているみたいに見える。が、以前のエントリーで見たように、Twitter JSON API を使って取得したものから最新のつぶやきを取り出して FlashVars の形でフラッシュに渡す JavaScript が twitterText と twitterName しか渡していないので、posttime は表示されない。
そこで、試しに twitterTime も渡すように JavaScript を改造してみたが、FlashVarsで半角スペース入った文字列がうまくわたらないそうなので、これは無理かも。