以前にTwitterのrssをフィードするという、普通のrssをphpで読むエントリーを書いたんやけど、今回は会社のサイトにtwitter apiを反映してみました。 まずやりたいこととして、 1.つぶやきの中のURLはやっぱりそのままリンクさせたい。 2.何件かデフォルト表示させて、moreボタンでそのあと何件か表示。 3.フォローしてくれている人の一覧を見せたい。 4.可能ならばそのままフォローできるようにしたい。 結論からいうと、4はペンディング。出来ないことはなさそうやけど、エンドユーザーがログイン中?ログインしてるなら、フォローしている人?してない人?などと、ちょっと大がかりになりそう。ログインしていない人には、ログインして下さいってしなきゃいかんだろうし。。。apiもどんどん進化しているっぽいので、そんときにまた考えるとします。 で、 1.→つぶやきのリンク付きってどっかにありそうなんに探しきれずなんで、rssでも同じ処理すればいけるやん!って言われそうやけど、今回はつぶやきの文字列を取ってきて正規表現を用いてURLを置き換えることに。ただURLはいくつ入ってくるかわからないので、その分無くなるまでループが必要。 2.→最初の10件までとその後の10件とでわけてあげて、単純にjQueryでアニメーション表示。 3.→つぶやきは、「user_timeline」のapiから取ってきたんやけど、こっちは「friends」のapiから取得して並べるだけ。 概要はこんな感じですかね。ソースは晒すほどというか、参考サイトがぎょうさんあるのでそちらでお願いします(整理/解説するのが面倒なだけ)。見たいヒトは言ってもらえればw ほかにもサイトから投稿できたり、自分のfriendの発言とか自分に対する返信だけとかmentionsとか色々できそうなので、お試しあれ。僕は次はやっぱりFLASH案件で使いたいすねw ちなみに今日現在(2009.11.19)のtwitter apiの日本語訳最新版はコチラ。
ご無沙汰してます。 エジプト行ったり諸々してたら前回のエントリーより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); [...]
ちょっとここんとこ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”); ?> たったこんだけ。
ちょっとAS2の質問をされ、久々に触ったんで一応書いておこ。 やりたいことは、 ・カウンターみたく現在の番号を取得してボタンを押せば次の番号を取得。 ・ボタンは2回目のアクセスからは押せない。一度のみ。 とのこと。 まぁ色々とやり方はあるのだろうけど時間も無かったことで、とりあえずカウンターみたく数を数えるのはLoadVarsを使ってテキストを読み込み→phpでカウントアップ→番号更新として。アクセスの回数はSharedObjectでやってみた。 あんまりリクエストが無い限りソースを晒すのは恥ずかしいんやけど、ソースコードを表示するJS「dp.SyntaxHighlighter」を今更ながら入れてみたので晒してみます。 //メインタイムライン:ステージ上には、 //cnt_txtとclick_btn //Shift-jisを使う System.useCodepage = true; nowNum=0; //SharedObjectを使う mySOcookie = SharedObject.getLocal(“CookieData”); mySOtime_before = SharedObject.getLocal(“CookieTime”); //現在時間 TheDateObj = new Date(); nowtime = TheDateObj.getTime(); // 前回時間+600000ミリ秒 beforeTime = mySOtime_before.data.count + 600000; sa = nowtime – beforeTime; //一定時間がすぎていたら、リセット if (sa > 0) { mySOcookie.data.count = 1; } //現在の番号用LoadVarsオブジェクト text_lv=new LoadVars(); text_lv.onLoad=function(success){ [...]
今日も家PCのセットアップを行う ローカルでphpをテストできるように、xamppを入れる。ダウンロードしたexeファイルを実行して、インストール完了。 さっそくコントロールパネルを立ち上げてApacheを開始させる。。。が、一瞬だけ起動がちらつくもすぐに開始ボタンに戻ってしまう。下のステータスではApache起動と出ているが。 ?? 調べてみると、どうやら悪さをしているのはSkypeのよう。 Skypeのメニュー、ツール→設定→詳細→接続で、「上記のポートに代わり、ポート80を使用」のチェックを外してok。 無事Apacheを起動できた。http://localhost/で確認ok!