AddThis + AS3, AddThis モジュール化
2009年07月13日 00:45
まずは関係ない話ですが、ようやくワークビザが政府に正式に認可されて4年間は合法的に働ける様になりました。今世界的な不況でビザの認可が相当厳しいらしく日本人に対しては永住権もなかなか下りないみたいだし、ワークビザ取得は相当ラッキーみたいです。
自分はオーストラリアの首都シドニーにいるんですが、ウェブ業界は日本より遅れているだろうとか考えていたんだけれど、一定の分野だといやいや自分が相当遅れている事に気づいて、最近必死に遅れたものを取り返そうともがいてる毎日を送っています。ただし働き方や考え方や制作スタイルも違うから日本の考えを捨てるのに苦労してるけど、大変だけど毎日それなりに充実な毎日を送っています。日本人の技術者ってみんな技術があるから海外でも十分通用するというのが実感だけど、それ以上に語学力が凄い重要だな!って思います。何をするにも技術的なことを説明するのがとにかく難しい。「ここはこういう技術の解決策で、こういう風にしたい。」とか「こんなシュッシュって動くモーションに仕上げたい。」とかアイディア出しのミーティングそのものとか。日本語でも説明が難しいし、カナダに4年間留学してたからそれなりに英語に自信はあったけど、オーストラリア訛りと専門的な話はまだまだだなあとか感じます。こうしたらもっと良くなるのにっていうことを意図を伝えれないばっかりに諦めざる得ない部分もあるし、ウェブに限らず海外で仕事している人達ってこういう歯がゆさを感じてるんだろうなって思います。それにしてもビール飲んで話している時はあんなに英語の調子いいのに。。とにかくこのままでは日本に帰れないので、4年はオーストラリアには居ないと思うけど、毎日頑張ってそれなりのものを克服していかないとと思う日々です。一度日本を離れると身軽に色んな国で働いてみたいと思えるし、もうちょっと自信がついたらオーストラリアを離れて他の国に移りたいとか思ってます。
で、話を技術に戻して Flickr, Google ぐらい(日本の時は Amazon, Rakuten も)のサービスしかメインで使っていない自分は、ウェブサービスの動向への感覚が物凄い鈍いんですが、海外のウェブ制作会社に依頼がくる Flash コンテンツにウェブサービスへの導線を求められる時、AddThis っていうサービスを経由して登録するのが結構主流みたいです。自分は AddThis 自体全く知らなかったんですが、Flash コンテンツに複数のウェブサービスへの導線を加えたいという要望が多々あるので調べてみました。日本でもこのサービスを使ってるのかな!?
AddThis は Twitter, Facebook, WordPress, Myspace, Tumblr やその他多数のウェブサービス(詳しくはここを参照)への投稿を一括にルーティング(swap out)してくれるサービスで、基本は AddThis 内で HTML 用に Javascript を generate して、Javascript/html で好きな様にカスタマイズしてブログの各エントリーとかに適用すればウェブサービス一覧を表示して投稿が簡単に出来るサービスです。ただし Flash は AddThis ではオフィシャル的にはサポートしていないみたいなんですが、Flash 内で各サービスのロゴ画像をビジュアル要素として組み込んで、各画像に対しクリック時に AddThis 指定フォーマットで QueryString を追加したアドレスに対し GET アクセスすれば普通に完了できます。機能自体は物凄く簡単です。

指定フォーマットは下記の通り。
http://addthis.com/bookmark.php?pub=ユーザー名&url=エントリーURL&title=エントリーのタイトル&s=指定サービス名
でも直接画像を組み込んだ MovieClip に対し、毎回毎回プロジェクト毎にいちいち記述をしたくは無いのと、モジュール化して必要な時だけ呼び出す様にしたいので、スーパークラスである View クラスの参照が dispatch して、Controller が listen して処理するということを AddThisEvent と AddThisController と AddThisServiceを作成し MVC の一般的な流れが個人的には好きです。
メインクラス内
var _m:CFModel = new CFModel(); var _v:CFView = new CFView(); var _c:CFController = new CFController(); this.addChild(_v)
各 View クラスがスーパークラスの View クラスの参照を持っている前提で、AddThisEvent を dispatch
private var _projectUrl:String = "http://www.test.com/test.html"; private var _projectTitle:String = "test content"; var params:Object = new Object(); params["url"] = this._projectUrl; params["title"] = this._projectTitle; params["s"] = AddThisService.TWITTER; this._view.dispatchEvent(new AddThisEvent(AddThisEvent.OPEN_SERVICE_WINDOW, params);
CFController 内にView の親クラスの参照をもつ AddThisController をモジュールとして登録。
package com.convexstyle.controllers
{
class CFController
{
private var _addThisController:AddThisController;
public function CFController {
this.init();
}
private function init():void
{
this._addThisController = new AddThisController("AddThis のユーザー名");
}
}
}
AddThisController が AddThisEvent を Listen し AddThis へアクセス。
package com.convexstyle.controllers.components
{
class AddThisController
{
private static var _addThisUrl:String = "http://addthis.com/bookmark.php?";
private var _username:String;
public function AddThisController(username:String)
{
this._username = username;
this.init();
}
private function init():void
{
this._view.addEventListener(AddThisEvent.OPEN_SERVICE_WINDOW, onOpenServiceWindowHandler, false, 0, true);
}
private function onOpenServiceWindowHandler(evt:AddThisEvent):void
{
var obj:Object = evt.data;
var queryString = "pub=" + this._username + "&";
for(var index:String in obj)
{
queryString += index + "=" + obj[index] + "&";
}
var urlRequest:URLRequest = new URLRequest();
urlRequest.url = AddThisController._addThisUrl + queryString;
navigateToURL(urlRequest, "_blank");
}
}
}
一般的な MVC の流れですが、二度手間したくないしモジュール仕様なので追加・削除が楽です。

