【Twitter bot 開発】三毛猫botを改良 その1

【三毛猫bot改良案】

・@〜ねこじゃらし、@〜またたび等、botに向かって返信すると単語によってつぶやき内容が変化する。

・話しかけてると「なつき度」が加算され、閾値を超えると猫botにフォローされる。

・感情パラメータが設定されており、機嫌の悪いときに@返信で話しかけると怒られる。

 

というような機能を最終的に実装したいのですが、いきなり全部やるのは無理なので、一番簡単そうな返信するとbotが「にゃー」とか話しかけてくる機能を実装する事にしました。

 

【実装手順】

「twitter bot php 返信」とかで検索するとベタのコードが掲載されているサイトがそれなりに見つかるのですが、APIとかデータの整形とか面倒くさいので、もっと簡単に楽して作れる方法は無いものかと探していたらとても素晴らしいフレームワークが見つかりました。

 

Tuitter / Tuibotter

 

この素晴らしいフレームワークを使って作成したのが以下のコードです。

「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で実行される直前に話しかけたユーザーにしか@返信を行わないようになってます。(そのうち直します)

↑単なる勘違いでした。

何かがおかしい太陽系シミュレータ(作成途中)

太陽系の「今」を知る事が出来る太陽系シミュレータみたいなものがあったら面白いんじゃないかという話があって、昨年末に友人にシミュレーションにおいて最も重要で最も面倒くさい部分である惑星の現在位置を求める関数を書いてもらって、あとはインターフェース作れば楽勝だろと思ってたら頭が錆び付いてまったく動かなくて困った。

主に比率がおかしい。何か考え違いを起こしている。あと太陽系広い、やばい。

とりあえず今の状態のものを載せておきます。

http://www.proto-star.com/solar/index.html

【Twitter bot 開発】三毛猫botを作成

柴犬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)
	)
)));

曖昧な言葉リスト(2009年度版)

  • ・本質、本質的
  • ・理解、分かる
  • ・優秀、頭が良い
  • ・よろしくお願いします
  • ・検討する
  • ・クラウド
  • ・ホームページ・Webサイト
  • ・ポータルサイト
  • ・コミュニティ
  • ・質感
  • ・グローバル
  • ・一般的・常識・みんな
  • ・色々
  • ・コミュニケーション
  • ・ブランディング

【Twitter bot 開発】柴犬botを作成(自動でつぶやく版)

適当にやったらGoogle App Engineのcronで動くようになった

Google App Engineのcronスケジュールで外部のphpファイルを叩くようにしました。

10分30分に1回鳴くように設定してあります。

フォローすると狂犬のようなつぶやきが確認できます。

柴犬bot:http://twitter.com/shiba_inu_bot

 

 

やった事のまとめ

1.Google App Engineでアプリケーションの登録を行う

cron用のアプリケーション領域を確保するためGoogle App Engine上に新たなアプリケーションを作成します。

このへんを参考にしてください。

 

 

2.ローカルで適当なディレクトリを作成し、cron用のファイルを作成

なんでもいいので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

 

 

3.Google App Engineにデプロイを行う

どうやら開発サーバではcronが動作しないらしいのでとっととデプロイして確認します。

ターミナルから「appcfg.py update ディレクトリ名/」を叩き、認証に成功するとファイルがアップロードされます。

 

 

4.Google App EngineのCron JobsからCronの実行状態を確認

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

 

 

 

【Twitter bot 開発】柴犬botを作成(自動でつぶやかない版)

柴犬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で定期的に叩いて自動化します。

独自ドメイン取得

ムームードメインで独自ドメインを安売りしてたので取得しました。

380円/年。

 

このサイトのドメインはこれから「http://www.proto-star.com/」になります。引き続きよろしくお願いします。

【Twitter bot 開発】Google App Engine に登録して Hello, Google! を表示するまで

twitterのアカウントを取得したので簡単なbotを作ってみようと思う。

考えているのは定期的になにかをつぶやくbotなので、cronでスクリプトを実行させようと思うが、あいにくロリポップはcronが制限されてるので何か別の手段を考える必要があった。

 

調べてみるといい感じにまとめられたサイトがあったのでメモ。

プログラミングができなくても作れるTwitter botの作り方

 

どうやらGoogle App Engineでcronが実行できるらしいので、

こことかこことかこことかこことかここなんかを参考にGoogle App Engineを使えるように設定。

 

App Engineの仕組みが良く分かってないが、どうも単純にファイルをアップロードできるわけじゃなく、コマンドラインから叩いてやる必要があるようなのでターミナルを起動。

Mac買って1年以上経つが、ターミナルに触ったのはこれが初めてじゃなかろうか。

 

そんなこんなで IT Pro に載ってたものと同じ奴が動くようになった。

http://t-okubo.appspot.com/

 

次はcronの設定ファイルを作成して定期的にスクリプトが走る環境を作る…と思ったが先に無茶苦茶単純なbotを作ることに。

 

 

 

【DMSGuestbookカスタマイズメモ】URLをハイパーリンクに変換

DMSGuestbookというWordPressの掲示板プラグインを使用していますが、

標準ではコメント投稿時にURLがハイパーリンクに変換されないようなので以下の方法で対処しました。

 

1.ハイパーリンクの識別

まず、ハイパーリンクを識別する方法ですが、これは以下のサイトにそのものずばりなコードが載っているのでそのまま流用します。

参考:URLを自動的にハイパーリンク設定 – 教えて!goo:

$proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","\\1\\2",$proto);

 

2.DMSGuestbookプラグインのテンプレートファイルを編集

次にDMSGuestbookプラグインのディレクトリ内の[dmsguestbook/template/post/deafault.tpl]ファイルをコピーして適当に[deafault2.tpl]とでもリネームします。

リネームした deafault2.tpl を開き、33行目あたりに以下のコードを記述します。

$message_text = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","\\1\\2",$message_text);

 

3.編集したファイルをサーバにアップロード後適用する

編集したテンプレートファイルは上書き保存後、サーバにアップロードします。アップロード後、WordPress管理画面からDMSGuestbookのオプション画面を開き、[Guestbook settings]-[Extended]の「Post template」項目にアップロードした deafault2.tpl を指定し、保存します。

 

上手く行けばDMSGuestbookに投稿したURL(原則http://から始まる)がハイパーリンクになります。

また、DMSGuestbookとは直接関係ないですが、以下のサイトも参考にしました。

 

参考:WordPressコメント欄URLを自動的にハイパーリンクにする。 | 煤式自動連結器:

 

最初はちょっと勘違いしていて、上記のサイトを参考にcomment_postをhookとするプラグインを作ってたのですが、よく考えたらDMSGuestbookはプラグインで、コメントを投稿してもcomment_postが働くわけないことに気付きました。

しょうがないので、テーマファイルをいじって掲示板を作り直そうかとも考えましたが、DMSGuestbookのファイルを除いてみたら簡単に修正できるようになってたので助かりました。

プラグインの作り方もなんとなくわかったので、近いうちに何か作ってみたいですね。

ゲストブックを設置

左上のメニュー一覧に「Guestbook」を追加しておきました。

勝手に使って下さい。

 

使ったプラグインはこれ。

DMSGuestbook

 

使い方はこちらのサイトさんに詳しく載ってます。

WordPressにゲストブックを設置 – DMSGuestbook >> 病的溺愛シンドローム

 

最初、場当たり的に適当に設置したらDatabase not Available!となって、

よくよく設定を確認してみたら、手動でテーブルを構築する必要があったので、

適当に設定したら適当に動くようになった。

 

CSSも日付表示も何もいじってないので、見栄え悪いです。

また、返信とか出来る仕様になってないようです???

 

あと掲示板とは直接関係無いですが、

表示が遅いのでそろそろ速度対策をしようかと思います。

 

Pages: Prev 1 2 3 4 5 6 7 8 9 10 11 Next
IT起業アカデミア