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で半角スペース入った文字列がうまくわたらないそうなので、これは無理かも。

投稿日時を表示するなら、Twitter_API_AS2 バージョンの方をちょこっと改造した方が早そうだ。