自作ライブラリ「YTwitterLib」はじめ

2010/04/24

あぁ、SyntaxHighlighterの弊害。 preタグを使うから、ブラウザによってズレまくりますorz これだから、HTML嫌い。。。CSS3はノータッチだけど、改善されるのかなぁ?

さて、勉強がたらAirでTwitterツール作ってるんだけど、リファクタリングついでに Twitterライブラリ「YTwitterLib.swc」も自作してみる。

残念ながら、セキュリティサンドボックス(crossdomain.xml制限)でFlashでは使えません。 (サーバサイドでPHPプロキシかませばできますが・・・) その他の手法としては、JavaScriptのJSONPと連動でいけるかなぁ?

ライブラリ作成にいたっては、Twitter API 仕様書まとめサイトでAPI調べる。 返ってくるデータはFlexのデバッガーで直接を見て調べる。

「YTwitterLib.swc」の最低限の機能として、タイムライン・フォロワー・友人取得、ツィート投稿を実装 で、「YTwitterLib.swc」使った試作アプリ(デザインそっちのけw)

AirがiPhoneにのらないのが悔やまれるなぁw

■「YTwitterLib.swc」メソッド一覧(未実装含む) まだ、命名や仕様が練れてませんが。。。

- getUserTimeline(id:String):void - tweet(message:String, handler:Function=null, isGetHomeTimeline:Boolean=true):void - deleteTweet(id:Number, handler:Function=null, isGetHomeTimeline:Boolean=true):void - getHomeTimeline():void - getFriendTimeline(id:String):void - getFriends():void - searchFriends(id:String):void - getFollowers():void - getPublicTimeline():void - searchWordTimeline(word:String):void - searchUsers(screenName:String):void - reply(id:Number, handler:Function=null, isGetHomeTimeline:Boolean=true):void - retweet(id:Number, handler:Function=null, isGetHomeTimeline:Boolean=true):void

■このライブラリ使って、タイムラインとる例 [as3] public function onCreationComplete(event:Event):void { twitter = new Twitter(); twitter.userName = userName; //Twitterのユーザ名 twitter.password = password; //Twitterのパスワード twitter.getHomeTimeline(); } [/as3]

たった、4行でObject化されたタイムラインが取得できる。シンプルじゃね?

getHomeTimeline()がvoidなのは、非同期通信だから。 getHomeTimeline()で、Basic認証してtwitter.comからリクエスト(JSON)が返ってくる。 JSONを「userTimelines:ArrayCollection」に変換して自動的にバインド。

userTimelinesは、アクセスしやすいようにUserTimeline型オブジェクトでの配列です。

■今後の宿題 ▽未実装機能の調査・着手 ・reply(返信) ・retweet(リツィート) ・個人設定 とかモロモロの機能も設計しないといけない。

▽認証系 Basic認証経由なので、将来的にはOAuth認証も対応する予定

その場合、Twitter Developerでconsumer key と consumer secretを登録・作成が必要。 Flexのサンプルだと、<a href="http://www.coderanger.com/blog/?p=59 target="_blank">OAuth Class for Flexがソースで載ってる。

▽その他API調査 TwitterのAPIにはstreaming APIってのもある。 Socket通信でストリーミングするので、超リアルタイムだけど、データをどう使うか?が難しい。

とりあえず、こんな感じでストリーミングできるが、根本的にどうしたらいいかがわからないw

■簡易PHPサンプル

$user = 'xxxx';
$password = 'xxxx';
$stream = fopen("http://{$user}:{$password}@stream.twitter.com/1/statuses/sample.json?delimited=20", "r");
while ($json = fgets($stream)) {
    $twitter= json_decode($json,true);
    if(preg_match('/[ァ-ヶーぁ-ん]/u',$twitter['text']))
        echo $twitter['user']['name'].':'.$twitter['text'] . PHP_EOL;
}

これ抽出によっては、ブラウザが死にます。。。

http://stream.twitter.com/1/statuses/firehose.json に関しては現在、法人向けで申請しないと使えないとのこと。