Labs

<< 最初 < 前ページ 次ページ > 最後 >>
icon 2010/04/24 自作ライブラリ「YTwitterLib」はじめ
あぁ、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



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

たった、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のサンプルだと、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
に関しては現在、法人向けで申請しないと使えないとのこと。
icon 2010/04/23 FlexBuilderでプロジェクトをSVN管理
うわー
Flash Player10.1 betaにしたら、Matrix3Dの処理が思わぬ動きにw
クロスドメイン問題と言い、色々と面倒だ。

Youtubeストリーミングは、Flashで直接できないから(プロキシかましたり、Airではできる)し、このサイトもHTML出力にするかな?と思うこのごろ。
とは言え悔しいので、先日発売になったFlex4でAirアプリ作ってます(^_^)

iPhoneじゃ動かないけど、ニュースになったWePad(Andoroid)で動いたら面白いな。
てか、iPhone、Andoroidも頑張んないといかんが、時間が皆無。。。

さてFlex4は、まだ会社でアップグレードしてもらってないので、体験版で。
SVNのリポジトリ作成は、Linuxサーバ上で手動で作ってます。
SVNリポジトリの作成

実際にFlexBuilderでSVNを利用してみる。
■subsclipseインストール
Flex4はEclipse3.6だけど、subsclipse1.4.xが入れられない。
(Graphのライブラリが必要?)

調べるのがめんどいので、1.2.x(非安定板)をとりあえずインストール。

http://subclipse.tigris.org/update_1.2.x



■初期コミット
(1) チーム>プロジェクトの共有>SVN
(2) ロケーション情報作成(ディレクトリ作成)

http://yoo-s.com/svn/YTwitter/flex4/air/trunk/

(3) 【次へ】で全て進む

(4) 作成が完了すると、コミット画面が出てくるのであれこれしてコミット

ライブラリはここにアップ
http://yoo-s.com/svn/YTwitter/flex4/swc/trunk/
icon 2010/04/23 SyntaxHighlighterテスト
HTML版用に、SyntaxHighlighterを使ってみた。

SyntaxHighlighter 2.0 -ソースコードを素敵に表示するを参考

こういうのは、Ajaxはすごい便利だ。
Flash10.0系のhtmlTextだと、できないだろうからなぁ。
てか、wonderflでソースのswf表示してるやつあるから、それを調査すればいいか。

■準備
(1) SyntaxHighlighterパッケージを任意に配置
(2) HTMLで、JavaScriptとCSSのパスを通す(shCore.js、shCore.cssは必須)
(3) SyntaxHighlighter.all();

こんだけ。

■ソースの記述
(1) ソースコードは「pre」タグで囲む

(2) 対応言語表記に沿って記述

as3, actionscript3, bash, cf, coldfusion, c-sharp,
csharp, cpp, c, css, delphi, diff, erl, erlang, groovy,
html, js, jscript, javascript, java, jfx, javafx, pas, pascal,
patch, perl, pl, php, plain, ps, powershell, py, python,
rails, ror, ruby, scala, shell, sql, text, vb, vbnet, xml,
xhtml, xslt, xhtml



例)
pre class="brush:as3;"

■ActionScript3のソースの場合
/**
 * Copyright 2010
 * Author: Yohei Yoshikawa
 **/
package com.yoos.app.controllers
{

	import com.yoos.app.views.TwitterFriendListView;
	import com.yoos.app.views.TwitterTimelineView;
	import com.yoos.app.views.TwitterView;
	import com.yoos.libs.PageController;
	import com.yoos.libs.twitter.controllers.Twitter;
	
	import flash.events.Event;
	
	import mx.collections.ArrayCollection;

	[Bindable]
	public class TwitterController extends PageController
	{
		private static var instance:TwitterController;
		
		public static function getInstance():TwitterController {
			if (instance == null) {
				new TwitterController();
			}
			return instance;
		}

		public function TwitterController()
		{
			if (instance == null) {
				instance = this;
			}
		}
		
        override public function initialized(document:Object, id:String):void
        {
            view = document as TwitterView;
        }

		
		//view 
		public var view:TwitterView;
		public var twitterTimelineView:TwitterTimelineView;
		public var twitterFriendListView:TwitterFriendListView;

		private var currentFuncion:Function;
		
		public var twitter:Twitter;

		private var topMargin:Number = 0;

		private var delay:uint = 15000;

		public var userName:String = 'xxxxxx';
		public var password:String = 'xxxxxx';
		
        public function onCreationComplete(event:Event):void
		{
			twitter = new Twitter();
			twitter.userName = userName;
			twitter.password = password;
			
        	generatePages();
			pageTwitterTimeline();
		}

		public function onTimelineCreationComplete(event:Event):void
		{

		}
		
		private function autoLoad():void
		{
			var timer:Timer = new Timer(delay);
			timer.addEventListener(TimerEvent.TIMER, onTimer);
			timer.start();
			
			function onTimer(event:TimerEvent):void
			{
				if (currentFuncion != null) {
					//currentFuncion(currentParams);
				}
			}			
		}
		
		private function generatePages():void
		{
			baseView = view;
			baseGroup = view.container;

			twitterTimelineView = new TwitterTimelineView();
			twitterFriendListView = new TwitterFriendListView();
			
			addPage(twitterTimelineView);
			addPage(twitterFriendListView);
		}

		public function tweet(message:String):void
		{
			twitter.tweet(message, onComplete);
			
			function onComplete(event:Event):void
			{
				view.messageField.text = '';
			}
		}
	
		public function deleteTweet(id:Number):void
		{
			var handler:Function = onComplete;
			twitter.deleteTweet(id, onComplete);
			
			function onComplete(event:Event):void
			{

			}
		}
		
		public function retweet(id:Number):void
		{
			var handler:Function = onComplete;
			twitter.retweet(id, onComplete);
			
			function onComplete(event:Event):void
			{
				
			}
		}
		
		public function reply(id:Number):void
		{
			var handler:Function = onComplete;
			twitter.reply(id, onComplete);
			
			function onComplete(event:Event):void
			{
				
			}
		}
		
		public function pageTwitterTimeline():void
		{
			page(twitterTimelineView);
			twitter.getHomeTimeline();
		}

		public function pageTwitterFridnedList():void
		{
			page(twitterFriendListView);
			twitter.getFriends();
		}

	}
}
<< 最初 < 前ページ 次ページ > 最後 >>

このサイトについて

HTML5 & CSS3化しつつあるので、現在IEには対応してません。
できれば、Google Chromeやら Apple SafariのWebKit系をお勧めします。

DBからプログラムまで一応全て自作なので、バグってたらすいません。
実験でFlash版(Flex版)を先に作りましたが、ちょっと停止してます。

プロフィール

新宿近辺でSE & プログラマーしてます。
Webアプリの開発・設計とか、最近はiPhoneとか奮闘してます。
デザインはさっぱりです。

音楽は、昔からCubase打ち込み人間で、そっちの方が経歴は長いですが、最近はやる暇がないです。。。

今は、Gon's Privates ってバンドのキーボードやってます。
単発的に、なんちゃってジャズ系のライブもやってます。

名古屋生まれなのでドラゴンズ好きです。

Info && SNS

Gmail

 yohei.yoshikawa@gmail.com

Twitter

 http://twitter.com/yoo_yoo_yoo

あんまつぶやきませんが、一応技術系メインで使ってます。情報交換はこちらへ

FaceBook

 http://www.facebook.com/#!/profile.php?id=1439130626

海外の知り合いがいないので閑散としてます。

mixi

 http://mixi.jp/show_profile.pl?id=230072

音楽仲間とかはこっちメインでやってます。興味があればこちらへ