Twitterのrssをフィードする

ご無沙汰してます。
エジプト行ったり諸々してたら前回のエントリーより1か月も経ってた;
月日が流れるの早っ!予定では自分のサイトを発表する予定が、デザインだけやりつつもそっから手つかずorz何故かやたらと忙しかった。まぁ気を取り直して、またしても自分のメモ兼用ブログなので、ぼちぼち書いて行けたらええなぁと。

というわけで、作ったけどお蔵入りしたrssを読むphpで引っかかったところ。twitterで、発言ページの右下にある「michinokoのつぶやきのRSSフィード」をphpで読みたかった。

躓いたところは2つ。
・文字化け問題
・タグの重複

めちゃ基本的なとこで躓く。解決として文字化けは、

xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,"UTF-8");

を記述。タグ問題は、phpのパーサ関数では子要素のタグも親要素のタグも同じに扱ってしまったので(日付のcreated_atとリンク先のlink)、単純に2回に1回(奇数回のときだけ)表示するようにする。例えば、$data['created_at'][$j*2-1]感じで呼び出してあげる。リンクはtrimをしてhttp://twitter.com/michinoko/statuses/をつけるのも忘れずに。

全然大した事のないコードですが、自分用ということで晒しておきます;余計なとこは無視してください。ちなみに「michinokoのつぶやきのRSSフィード」をクリックすると.rssのページに飛ぶけどそれを.xmlにするとスタイルが関連づけられてない単純なxmlが見えます。

mb_internal_encoding("UTF-8");
function CharacterHandler($parser,$text)
{
	global $buffer;
	$buffer.=$text;
}
function StartHandler($parser,$name,$attrib)
{
	global $itemcnt,$idFlag;
	if($name=="status"){$itemcnt++;}
}
function EndHandler($parser, $name)
{
	global $buffer,$itemcnt,$data,$idNum,$created_atNum;
	mb_detect_encoding($buffer, "UTF-8");
	switch($name){
    case "created_at":
			$created_atNum++;
			$data['created_at'][$created_atNum]=$buffer;
			break;
    case "text":$data['text'][$itemcnt]=$buffer;break;
    case "id":
			$idNum++;
			$data['link'][$idNum]="http://twitter.com/michinoko/statuses/".trim($buffer);
			break;
    default :
      	break;
	}
  	$buffer="";
}
$parser=xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false);
xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,"UTF-8");
xml_set_element_handler($parser,"StartHandler","EndHandler");
xml_set_character_data_handler($parser,"CharacterHandler");
$fp = fopen("http://twitter.com/statuses/user_timeline/16305324.xml",'r');
while($strbuf=fread($fp,3000)){
	xml_parse($parser,$strbuf,feof($fp));
}
fclose($fp);
xml_parser_free($parser);
for($j=1;$j<=$itemcnt;$j++){
	echo "<hr>{$data['created_at'][$j*2-1]}<br>";
	echo "<hr>{$data['text'][$j]}<br>";
	echo "<hr>{$data['link'][$j*2-1]}<br><br>";
}

次回こそFLASHネタを書くか。

AS2.0からAS3.0へ移行したいヒトへ

この前、大阪でCSS Nite in OSAKA, Vol.16があったみたいで、それにいつもお世話になっている宇都宮ウエブ制作所の正宗さんが「これから始めるFlashActionScriptツボのツボ」と言うセッションをしていて、そのスライドやサンプルをアップしてくれている。

セッションの内容は、
■ActionScriptのあらまし
■AS3、こう書けば動く
■デザインに必要なXY座標と幅と高さ
という具合にわかれていて、AS2しか触ったことないヒトがAS3を最初に触るにはとってもわかりやすい内容となってる。ダウンロードしたzipを解凍して、swfファイルを実行して、右矢印キーで次ページへ。ちなみに、去年のFPSでの乾杯している僕の後ろ姿も小さく載っているw。サンプルのflaファイルとかもアップしてくれているので、オススメです。

僕自身も、AS3で制作を始めたのが半年くらい前で、今はAS3でないとやりづらくてしょうがないんやけど、最初はAS2と全然違っていてよくわからない状態やったなぁと思いだした。去年行ったF-site「ActionScript最前線」での森さんの「強引にやさしいAS3入門」が衝撃やったのを思い出す。「に」祭り!

思い出したがてらにおさらいをしておくと、
・addEventListenerを「に」と置き換えるということ!

実際に、onEnterFrameの処理の場合で例を出すと、
■定義
●任意な名前(たとえば)
「動かしたいムービークリップ」:test_mc
「何かを」:doAction
「処理を受け取るハコ」:hako
「毎フレーム行わせる内容」:trace(“毎フレームの処理”);
とする。

●決まり文句は、
「に」:addEventListener
「毎フレーム行わせる」:Event.ENTER_FRAME

ようは、上記のように定義したなら、こう書いてってこと。
■Ex

test_mc.addEventListener(Event.ENTER_FRAME, doAction);
function doAction(hako:Event):void {
	trace("毎フレームの処理");
}

「動かしたいムービークリップ」.「に」(「毎フレーム行わせる」, 「何かを」
);
function 「何かを」(「処理を受け取るハコ」:Event):void {
「毎フレーム行わせる内容」
}
という意味。

FlashDevelop 3.0.0 RC5が出てた

この前遅ばせながらFlashDevelop 3.0.0 RC2を入れたばっかと思ってたら、あっちゅうまにRC5;ちょっと家におらん間に。。。

一応、アップデートみたくアンインストールしなくても出来るみたいやねんけど、上手く行かなかったという話や、FlashDevelopを複数立ち上げる方法もあるっちゅうことで、セッティングは残してアンインストールしてインストールすることに。まず、ここからダウンロード。ダウンロードしたファイルを実行して、インストールする。そんときにMulti Instance Modeのチェックを忘れずに!

あとは、プラグインやらテンプレートやらを入れる。
前に何かうまくいかなかった、Duplicate Pluginも今回は無事追加。前回もちゃんとC:\Users\michinoko\AppData\Local\FlashDevelop\PluginsにコピーしてC:\Users\michinoko\AppData\Local\FlashDevelop\Data\Duplicateを削除して立ち上げたのに、何故が不定期に落ちてしまったり、Ctl+Alt+sが効かなかったりしてた。vistaのせい?あと僕が使っているのはTraceプラグインくらいか。

設定しそびれていたxingxxさんのFlashDevelopで補完されないFlashCS4のクラスも補完するやり方もやっておこ。それにしても複数開けるのはかなり嬉しい。

webカメラ第一歩。

前々回Webカメラを買ったというエントリーを書いたので、FLASHでカメラを使う第1歩も。
単純にwebカメラの画像を出すだけ。

swfArea

ソースのカメラ部分は、

_camera = Camera.getCamera();
_camera.setQuality(0, 80);
if (_camera != null) {
  _video = new Video(480, 360);
  _video.attachCamera(_camera);
  addChild(_video);
}

これを応用していけば、キャプチャーしたBitmapを色々いじくったり色々出来る。

参加メンバーが豪華なJActionScriptersでの、LCDBitmapとかも面白いし凄い!

deliciousのバックアップ

いつの間にかdel.icio.usからdeliciousに名前が変わってた。
僕はdeliciousのバックアップをとるとき、マイページの右下”Private RSS feed ”ってとこから、XMLを表示件数を変えてローカルに保存してたんやけど、どうやらExcelに出力も出来るみたい。

使い方は、ダウンロードしたdeliciousbackup.zipファイルを解凍して出来たExcelをマクロを開く→マクロを有効に→Back Up Del.icio.usのボタンを押す→deliciousのUserNameとPasswordを入れる。と、新しいシートにバックアップが出来るのでそのExcelを保存して終了。

他にも、PHP使ったりコマンドプロンプト使ったりでも出来るみたいやけど、これも手間がかからんで良いかも。あくまでバックアップやし。

webカメラ

ネットブックにはついてんやけど、イチイチネットブックを立ち上げるのが面倒なんで、webカメラ買っちゃいました。

上は何の画像かよくわからんと思うけど;
何か今のwebカメラって、ビデオエフェクトと称しアバターとかついているみたい。
自分の顔をトレースして、その動きにあわせて様々な顔を動かしてくれる。
ほとんど使わないやろうけど、ちょっと面白い。
自分で画像とかもセット出来ればええんに!

ちにみに僕の買ったwebカメラは、Logicoolの「Qcam® S 7500」。

flashでサーバーの日付時間を取得

ちょっとここんとこjsのエントリーが続いたけど、あくまで僕の本分はflashだと思っているので、flash関連のおさらいネタを。

「サーバーの日付時間を取得」って書いたけど、要はphpのdate関数を用いてサーバーの時間を取得しましょ。ってこと。

サーバーの時間を取ってこれば、PCのローカル時間にかかわらず正確な時間を取得できるし(サーバーの時間がくるってないこと前提やけど)、世界対応の時計ブログパーツなども制作可能となる。

実際問題としては、至って単純で、

//メインタイムライン1フレームに記述
var phpFile:String = "phpファイルへのURLパス";

function callPHP():void{
	var urlRequest:URLRequest = new URLRequest(phpFile);
	var loader:URLLoader = new URLLoader();
	loader.addEventListener(Event.COMPLETE, serverResponseHandler);
	loader.load(urlRequest);
}

function serverResponseHandler(e:Event):void{
	var loader:URLLoader = URLLoader(e.target);
	var urlVariables:URLVariables = new URLVariables(loader.data);
	trace(urlVariables.returnValue);		//date is: 2009/05/12 11:33:13
}
callPHP();

phpファイルの中身は、

<?php
print "returnValue=date is: " . date("Y/m/d H:i:s");
?>

たったこんだけ。

[js]イベントの設定

HTML内のボタンとかにイベントを設定するには、ライブラリを使用しないとき、DOM(Document Object Model)に準拠したブラウザは、

if(window.addEventListener){
	window.addEventListener( "load", addEventHandler, false );
}

としてあげて、さらにIEの場合用に、

if(window.attachEvent){
	window.attachEvent( "onload", addEventHandler );
}

も書かないとダメ。
JavaScriptはやっぱりブラウザの対応が大変。
IE8ではどうか調べてへんけど;
まぁライブラリを使えばええか。

[js]ライブラリ

ブックマークしてんやけど、FF3のブックマークが調子わるめなんで一応こちらにも。
prototype.jp:拡張機能
jQuery:コンパクト、拡張機能
Adobe Spry:アドビのフレームワーク
script.aculo.us:エフェクト、コントロール処理
Yahoo UI Library:名前空間の設定など
Lightbox
ThickBox
LightWindow
Lightview
SyntaxHighlighter

とりあえずメモ。

Tweensyでのフレーム移動

flaファイル内にシェイプアニメーションやら、小さなflvを埋め込んだとき。
そのアニメーションをTweensyで制御するときは、どうするか?

Tweenerやったら、

Tweener.addTween(mc, { _frame:30, time:1 } );

みたいに書けばよいが、それをTweensyにすると、

Tweensy.to( mc, { currentFrame:30 }, 1 );

でよさげ。
ただ気をつけなあかんのは、Tweenerの場合は、指定フレームで停止するけど、Tweensyではそのフレームにthis.stop();がないとplayされる。(gotoAndPlay扱い)

そういえば、Blurとかのフィルターも、filterToメソッドを使ってたけど、

Tweesny.to( new BlurFilter(), { blurX:10, blurY:5 }, 1.5, null, 0, mc);

でもいけるっぽい。