jQueryとPHPとSQLiteを使って中途半端なチャットっぽいものを作成

原理原則を分かってない人間が作るとどうなるかという見本みたいなものなんですが、jQueryとPHPとSQLiteを使って簡素なチャットっぽいものを作りました。
Apr
17
2010
Posted on Apr 17, 2010 at 17:47

原理原則を分かってない人間が作るとどうなるかという見本みたいなものなんですが、jQueryとPHPとSQLiteを使って簡素なチャットっぽいものを作りました。
Mar
26
2010
Posted on Mar 26, 2010 at 03:14
三毛猫botに自動フォロー機能をつけました。
たくさん話しかけてくれたユーザを自動的にフォローします。
SQLiteを導入したのが先週なので、それ以前に話しかけてくれた人はすんませんが、カウントされてません。
Mar
16
2010
Posted on Mar 16, 2010 at 04:37
分からない人には何の事やらで、知ってる人には今更かと言われそうですが三毛猫botとSQLiteを連動できるようにしました。
具体的には以下の表のようにデータを保存します。
Mar
01
2010
Posted on Mar 1, 2010 at 14:48
三毛猫botに「〜またたび」やら「またたび〜」「マタタビ」、とか「〜ねこじゃらし」等々話しかけてる人がいたので簡単なワイルドカードで判別するコードを追加。
「りんご味のまたたび」とか「またたびあげる」とか「I give “ねこじゃらし” to you.」などに反応するようにしました。
Feb
07
2010
Posted on Feb 7, 2010 at 07:10
記事修正:2010年3月3日
三毛猫botが特定の言葉に反応するようになりました。
三毛猫botへのつぶやきの中に【またたび】あるいは【ねこじゃらし】を混ぜて返信すると通常とは異なる反応をします。
例.
@calico_cat_bot ねこじゃらしで遊ぼう!
@calico_cat_bot またたびあげる
等々…
Jan
29
2010
Posted on Jan 29, 2010 at 01:09
【三毛猫bot改良案】
・@〜ねこじゃらし、@〜またたび等、botに向かって返信すると単語によってつぶやき内容が変化する。
・話しかけてると「なつき度」が加算され、閾値を超えると猫botにフォローされる。
・感情パラメータが設定されており、機嫌の悪いときに@返信で話しかけると怒られる。
というような機能を最終的に実装したいのですが、いきなり全部やるのは無理なので、一番簡単そうな返信するとbotが「にゃー」とか話しかけてくる機能を実装する事にしました。
【実装手順】
「twitter bot php 返信」とかで検索するとベタのコードが掲載されているサイトがそれなりに見つかるのですが、APIとかデータの整形とか面倒くさいので、もっと簡単に楽して作れる方法は無いものかと探していたらとても素晴らしいフレームワークが見つかりました。
この素晴らしいフレームワークを使って作成したのが以下のコードです。
「be_replied.php」 ※2010/02/07修正
class BeReplied implements TuiBotter_Event_BeReplied{
public function eventBeReplied(Tuitter_Tweet $tweet, Tuitter $tuitter){
$say_num = rand(0, 5);
$say[0] = "ゴロニャーン";
$say[1] = "ニャン";
$say[2] = "ゴロゴロゴロゴロ";
$say[3] = "ニャンニャーン";
$say[4] = "ニャン!";
$say[5] = "ニャオーン";
$tweet->reply($say[$say_num]);
}
}
毎度の事ながら書き方が良く分かってないのですが、上記のコードとiniファイルやHeartBeat.phpなど、tuitter、tuibotterフレームワーク一式をアップロードして、GAEのcronでファイルを叩くと一応動作しているようです。
ただし、tuibotterのキャッシュの設定か、そもそもコード自体に記述が無いためか、今のところcronで実行される直前に話しかけたユーザーにしか@返信を行わないようになってます。(そのうち直します)
↑単なる勘違いでした。
Jan
11
2010
Posted on Jan 11, 2010 at 03:08
太陽系の「今」を知る事が出来る太陽系シミュレータみたいなものがあったら面白いんじゃないかという話があって、昨年末に友人にシミュレーションにおいて最も重要で最も面倒くさい部分である惑星の現在位置を求める関数を書いてもらって、あとはインターフェース作れば楽勝だろと思ってたら頭が錆び付いてまったく動かなくて困った。
主に比率がおかしい。何か考え違いを起こしている。あと太陽系広い、やばい。
とりあえず今の状態のものを載せておきます。
Jan
10
2010
Posted on Jan 10, 2010 at 15:41
柴犬botのフォロワーが予想外に多く付いたので、心情的にいじりにくくなってしまったため、代わりに三毛猫botを作っていじる事にしました。
三毛猫bot:http://twitter.com/calico_cat_bot
このbotもGAEのcronで動いています。(30分15分間隔)
またもや例によってランダムに鳴いてるだけなんですが、状態と感情の乱数を与えてるので、柴犬botより幾分かまとも?な感じになっています。
@返信と状態と感情制御を上手い事すると若干猫らしくなりそうな気がします。
以下何の参考にもならないソース(PHP)
//Twitter認証
$url = "http://twitter.com/statuses/update.xml?";
$username = "ユーザー名";
$password = "パスワード";
//猫の状態設定 0:寝ている 1~4:起きている
$cat_state = rand(0, 4);
//感情状態_感情状態によって鳴き声が分岐する
//感情状態は「喜:0」「怒:1」「哀:2」「楽:3」でランダムに変化
$mood = rand(0, 3);
//感情表現符
$mood_effect[0] = "♪";
$mood_effect[1] = "!";
$mood_effect[2] = "・・・";
$mood_effect[3] = "";
//鳴き声_喜・哀・楽
$mes_kiairaku[0] = "ニャーン";
$mes_kiairaku[1] = "ニャッ";
$mes_kiairaku[2] = "ニャオーン";
$mes_kiairaku[3] = "ナオーン";
$mes_kiairaku[4] = "ゴロゴロ";
$mes_kiairaku[5] = "ニャン";
//鳴き声_怒
$mes_do[0] = "ウゥー";
$mes_do[1] = "ニャーン";
$mes_do[2] = "ニャーッ";
$mes_do[3] = "フーッ";
$mes_do[4] = "シャーッ";
$mes_do[5] = "ウゥウウーウー";
//$moodによって鳴き声が変化(起きている時)
if($cat_state >= 1 ){
//$moodが喜:0の時
if( $mood == 0 ){
$voice = rand(0, 5); //鳴き声乱数
$message .= $mes_kiairaku[$voice];
$message .= $mood_effect[0];
}
//$moodが哀:2の時
if( $mood == 2 ){
$voice = rand(0, 5); //鳴き声乱数
$message .= $mes_kiairaku[$voice];
$message .= $mood_effect[2];
}
//$moodが楽:3の時
if( $mood == 3 ){
$voice = rand(0, 5); //鳴き声乱数
$message .= $mes_kiairaku[$voice];
$message .= $mood_effect[3];
}
//$moodが怒:1の時
if( $mood == 1 ){
$voice = rand(0, 5); //鳴き声乱数
$message .= $mes_do[$voice];
$message .= $mood_effect[1];
}
}
//寝ているとき(cat_state == 0 )
if($cat_state == 0 ){
$message = "Zzz...";
}
//rawurlencode() でエンコード
$params = "status=". rawurlencode($message);
//Twitterにポストする
$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));
Nov
27
2009
Posted on Nov 27, 2009 at 04:21
Google App Engineのcronスケジュールで外部のphpファイルを叩くようにしました。
10分30分に1回鳴くように設定してあります。
フォローすると狂犬のようなつぶやきが確認できます。
柴犬bot:http://twitter.com/shiba_inu_bot
cron用のアプリケーション領域を確保するためGoogle App Engine上に新たなアプリケーションを作成します。
なんでもいいのでbin直下にでもディレクトリを作成して以下のファイルを作ります。
「cron.yaml」
cron: - description: cron job name url: /.* schedule: every 10 minutes
cron.yamlにはcronのタスクスケジュールを記述します。
上記のcron.yamlには10分の間隔で設定したアプリケーションを実行するように記述しています。
cron.yamlはYAMLというxmlみたいな形式に則って記述するらしいですが、例によってまったく分かってないのでYAMLについては以下のサイトを参照して下さい。
http://jp.rubyist.net/magazine/?0009-YAML
「app.yaml」
application: example-apps version: 1 runtime: python api_version: 1 handlers: - url: /.* script: task.py login: admin
app.yamlにはアプリケーションの基本設定と、cron実行時に呼び出されるファイルの記述を行います。
最後の行のlogin:adminはセキュリティ対策らしいです。
「task.py」
import urllib2
req = urllib2.Request("ここにPHPファイルのURLが入ります")
f = urllib2.urlopen(req)
cronで実行されるファイルです。
外部のPHPファイルを呼び出すように記述されています。(多分)
Pythonの書き方はまったく分からないので、動くわけねえと思ってたのですがあっさり動きました。
参考:http://pc11.2ch.net/test/read.cgi/php/1243654802/403-408
どうやら開発サーバではcronが動作しないらしいのでとっととデプロイして確認します。
ターミナルから「appcfg.py update ディレクトリ名/」を叩き、認証に成功するとファイルがアップロードされます。
cronが上手く実行されていれば「2009/11/26 18:55:34 on time Success」といった表示がジョブ名の隣に表示されます。
たまに「 on time Failed」とか出たりしますが、ちゃんと実行されてる場合もあるので何が何やら。
書き方が何かおかしいのかも。
以上のような手順で出来た事は出来たんですけど、Google App EngineのこともPythonの事もまったく分かってません。
逆に言うとまったく分かんなくてもcronの設定は出来るので、何かの参考になれば幸いです。
参考:http://blog.livedoor.jp/chuhei1107/archives/51124710.html
Nov
26
2009
Posted on Nov 26, 2009 at 22:41
柴犬botを作りました。(推定知能指数:1)
参考サイト:
http://d.hatena.ne.jp/hirataka522/20080126/1201300282
http://blog.goo.ne.jp/wack-php/e/1f170daf1ad5149dca887127d129427c
上記サイトのコードを丸パクリしたソース(PHP)
//Twitter認証
$url = "http://twitter.com/statuses/update.xml?";
$username = "ユーザ名";
$password = "パスワード";
//鳴き声
$mes[0] = "ワン!";
$mes[1] = "ウー!";
$mes[2] = "ワオーン!!";
$mes[3] = "ウウー!";
//鳴く回数乱数の設定
$max = rand(0, 9);
//鳴く回数を$messageに代入
for( $i = 0; $i <= $max; $i++ ){
$voice = rand(0, 3); //鳴き声乱数
$message .= $mes[$voice];
}
//rawurlencode() でエンコード
$params = "status=". rawurlencode($message);
//Twitterにポストする
$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));
//リダイレクト
header('Location: http://twitter.com/shiba_inu_bot/') ;
次はcronで定期的に叩いて自動化します。