ニセコSIM住人つながりで誘っていただいた、北海道開発オフ部の第1回。
twitterなんて登録したのも登場してからずいぶんたってからだったし、
@ってなにさ? っていうくらいの初心者だったけど
約1週間、参加者の方々とやり取りをさせていただいてようやく慣れてきた感じで。
お題
twitter API を使ったbotを作成しよう
目標
twitter最新の投稿をLSLでSL内のオブジェクトの上に表示する
作業内容
環境構築
- eclipse
- Pleiades http://mergedoc.sourceforge.jp/
- esftp plugin
- Netscape9
- poderosa
などなど。しかし結局は持参したMacbookで作業してた。
なんだかんだと午前中は環境構築で時間が過ぎてしまったのが残念といえば残念。
開発
Service_twitter
pearコマンドで簡単にインストールできる、、、、らしいんだけども、
いつもroot権限でなんでもかんでもやっちゃってたので
自分のホームディレクトリ以下にインストール、ってのがわからず苦戦。
tarを解凍して設置した。
アカウントとパスワードを引数に渡してインスタンス作成まではわかったんだけども
その後の処理がどうも期待通りではない。
データは取得できてるようなんだけども
どうもphpのシリアライズとかjson系のエンコードがかかっている感じで、
なかなかphpの配列に変換できなくて挫折した。
lastRSS
今回の目的は投稿されたものを読めれば良いのでAPI経由はステにして
RSSをパースして再利用することにした。
lastRSSというphpのライブラリを使用。
紹介されているサイトのサンプルを見てコピペして変数名の調整くらいで、
簡単にデータ取得成功(と思い込んでいただけのことだったことが後に判明)。
それをbase64_encode()かけてechoすればphp側の処理は終わり。
あとはLSLで受信して表示するだけ・・・のはずだったんだが。
LSL HTTPRequest
httpで外部鯖からテキストを読み込んで表示ってのは
前にテストでやったことがあったので大丈夫、と思っていたのが甘かった。
スクリプト上で $str = "てすとです";とか書いて(エンコードなりの処理をして)
LSLでデコード&表示すると、あまり見たこと無い感じの文字化け。
何をやってもうまくいかなくてへこんだ。
LSL llGetNextEmail
オブジェクト宛に送ったメールを受信する関数があるのでそれを使ってみた
表示したい文字を本文に入れてローカルのメーラーから送信する
タイムラグのタイミングがいまいちつかめなくて、
だめだったのか、まだ読み込まれていないのか・・・というジレンマ
最終的にはHTTPRequestのときと同じような文字化け?に行き着いた
LSL HTTPRequest(再
どっちでも一緒ならよりデバッグしやすいほうで、ということで戻り。
結局オフ会終了まで悩んだまま。
オフ会その後
家でその続きをば。
base64_encode()前の(読めるはずのデータを)echoしたものをブラウザで見ると
普通に見れるが、実際にはブラウザで文字置換されて見えている、ということが判明。
twitterのRSS自体がそうなっていた。
LSLではそんな難しいことできないだろうということでPHPでコンバートする方法を検索
文字数値参照の記事を文字に変換するConveyorプラグイン
この方もtwitter用に、と作られていたようで、
実際にコンバートしている部分を参考にphpのbase64_encode()前にこれを入れてみた。
$str = mb_decode_numericentity($str, array(0, 0xffff, 0, 0xffff), 'utf-8');
で、ようやく日本語があたりまえに表示されるようになりました、とさ。
今後の課題
環境構築(開発着手まで)が時間かかりすぎた。
MyMacbook持参するならそれにある程度用意していって、
すぐ開発に取り掛かれるようにしないと時間がもったいない
”なにをやるか(作るか)”
自分自身の目標設定という意味と、ほかの人が何やってるのか気になるので
朝イチで自己紹介+目標宣言、してみるのもいいかな。
成果品
HTTPRequest版のほう。これをオブジェクトを小さくするなり透明にするなりして
"着る"もしくは頭かどっかに添付すれば、
メッセンジャーやskypeのムードメッセージ的につかえるのではないかと。
次はぜひとも商品化までもっていきたい。