こうなってしまう訳ですね。


プログラミング、断念です。

何でって、齧る程度にも勉強していない私がプログラミングなぞ出来る訳もないと言う訳です。

甘ったるい思考してるからこうなるんですね、分かりまs(((


と言う事で、素直にキャラボットの鯖立ち上げてキャラボットでただいま製作中で御座います。

どんなキャラかって、そりゃあ脳内乙女系一色ですからそれに沿ったテーマと言うものでしてはい。

自分の理想をまんま形にしている最中で御座います。

「三次元にこんな奴絶対居ねぇwwwwうぇwwwwwうぜぇwwwww」って感じの。

そこは二次元、しっかり住み分けが出来ていてよろしいかと。


他にも「ぼっとマジちゃんぼっと」なんてものもあったんですけど良く分からないのでパス。

何かの機会があれば触れるやもしれません。


さて、そう言えば、私今年、年女というもので御座いまして。

えぇそうです兎年なんです私。

年齢がモロバレるヤバいオワタなんですけどとりあえずそう言う事で御座います。

一回りか二回りか三回りか四回りか……御想像にお任せしますとして。

飛躍の年と言われておりますが、当方飛躍の前兆も御座いません。

のらりくらりと日常を満喫しております。

テレビと言う名の娯楽にはあまり興味御座いませんが、いやはや物騒なニュースが多く…。

いえ見てはいないんですが人づてにお聞きしましたので小耳に挟んだ、といった具合であります。


さて、先日父親の誕生日でした。

最近流行りと巷で噂の「半熟カステラ」なるものを早速作って献上致しました所、好評……なのでしょうか…?

ぶっつけ本番でしたので良く分かりませんが、来年も、との事でしたのでそこそこ美味しかったのでしょう…恐らく…。

次はバレンタインをどうするか、なんですが作るものはもう決めてしまいましたので迷いは今の所御座いません。

異性に贈り物、なぞ浪漫溢れる想いは私の中では氷の如く冷めきったものでは御座いますが、家族に振る舞う菓子、と言うものは暖かな思いやり(笑)、があるものですね。

現実問題、金が足りないのが唯一の悩みの種ではありますが……。


近況報告と致しましては、この位でしょうか。

変な文章になりましたがそんな気分でしたので御勘弁願いたく存じ上げます。

はい、前回に引き続きいろんなサイトを見て回りました。

んでたどり着いたのは、EasyBotterのBBS。

初心者スレ2にて

銀さんのbotさんや、プログラミングを始める10の理由さんで紹介されているソースを利用したいんですが…

と言う質問に対し

それらの方のスクリプトは、 Easybotter とは違うスクリプトです。
確かに EasyBotter.php を改造し、機能を追加することもできます。
しかしこれには、十分な php プログラムの知識が必要です。
って書いてあったとか……。

(´・ω・`)…しょ、ショボーンなんてしてない。

見落としに気付いただけでも良かったじゃない!

したらばEasyBotterじゃない違うファイル使えば良いじゃない!

って言う事で、もっかいチャレンジして今日中に何とか時間別でリプを動かせる様に頑張りたいと思います。

時間別に動かせないなんて私の目的と理想にはかけ離れている!

……さ、作業頑張る……(´・ω・`)

あ、ええと、まずは年明けましたのでおめでとうございました。

このたび休暇を30日から3日までの5日間頂きましたので全ての時間をEasyBotter、つまりはツイッターの自動bot作成に充てております。

頭ん中メルヘンな2次元なので腐った方向…にはまだまだ乙女すぎるだろこいつ、みたいな感じです。


さて、まずは『プログラミングができなくても作れるTwitter botの作り方 』様の、バージョンを最新で。(現在2.05)

参考にしているのは…沢山。

EasyBotter非公式wiki  様

銀さんのbot~不完全~  様

プログラミングを始める10の理由  様

サルにも分かる正規表現入門  様

この他にも分からない事はググって探してるんですが今お気に入り登録できてるのはこの位です。

利用しているHPはSiteMix(サイトミックス)様

利用しているcronはGAE-cron様

自分で開設して取得するも自分以外の人が登録出来ていないと言う…まだほったらかしにしてます。

今はまだ出番なし。


…で。

今現在進んでぶち当たっている壁は、時間別にリプライパターン、TLポストを変えていく。(TLリプは時間に関係なくするのでそのままで。)

まぁ要するに、朝おはようって言ったら『おはよう』夜おはようって言ったら『はぁ?おはよう?』な感じで返事してくれる式。TLだったら朝昼晩。

EasyBotter自体の記述でそのまま手動で叩いて動いたので、if分岐とかswitch分岐をリプライファイルとかTLポストファイルにぶち込んで使ってみよう!

って事でここでプログラミングを始める10の理由様からソースを丸ごとコピペ!

まずリプライ反応からってんで書いてある通りボット名とパスワードとdata.txtのフルパスと、stristrからpreg_matchに変更と、//nで反応語句囲ってぽん、と特に他は変更しないままbot.phpをブラウザ実行。

TL上に反応する語句がないよ!だけが表示。

あるぇ?

@が付くものがなくなったら、@に反応する語句がないよ!ってだけが表示。

正常に動いてる事には動いている、らしい?

エラーが出ないんだから、そうだよね…コードが間違ってたらサーバーエラーになりましたし。

もしかして、これOAuth認証系が関係してる…のか?

それとも$***=array();は$data=array();でしか反応しない様になっているのか…?

そういう記述がないか調べるも、プログラムなんて中途半端にしか分からない!と言うより齧った程度なんでほとんど知らないが正しい。

分からないからググるけど、ググってこのざまだよ。

EasyBotterをOAuthな記述に…?いやでもこれ最新のだし。

―――ここからコピペ―――

$username = "botの名前";
$password = "****";
$filename = "/home/member/…/data.txt";//フルパス。

//ここ重要!コピペミスってました!すみません!以前のコピペで動かない人はこの1行をこの場所に入れて下さい!
$host = "http://twitter.com/statuses/mentions.xml "; //返信一覧

$fp = @fopen($filename,'rb') or die("ファイルが開けません");
flock($fp, LOCK_EX);
$line = fgets($fp, 64);
fclose($fp);


//保存しておいたステータスid取得。このid以降の返信を読み込む。なかったり読み込めなかったら最新1件

if(!empty($line)){
$last_id=$line;
$host .="?since_id=".$last_id;
}
else{
$host .="?count=1";
}


//cURLセッションを初期化する…ここらへんはおなじみ
$ch = curl_init();
////オプションを設定する
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
//
////cURLセッションを実行する
$result = curl_exec($ch);
//
////cURLリソースを閉じ、システムリソースを解放する
curl_close($ch);

//XML文字列をオブジェクトに代入する
$XML = simplexml_load_string($result);


//ここからが変わったところ。以前保存したid以降、複数リプライある場合whileで処理。
//新しい程配列のキーが若いので、減算子を使う(for文でもできるんじゃ…)
$i = count($XML)-1;
$j = 0;
while($i >= $j) {
$var = $XML->status[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;

//ゴチャゴチャするので、返信のセリフ組み合わせはユーザー定義関数で。
$message = serif($reply_name,$name,$com);
//そのままポストの関数へ…
tweet($message ,$username,$password);
$i--;
}

//最終発言リプライのidを保存してる部分。先頭を調べて…
$string = $XML->status[0]->id;
//空じゃなかったら書き込み
if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}
//これでメインの処理は終わり


//セリフ生成のユーザー定義関数
function serif($reply_name,$name,$com){
//配列を用意して…
$uranai=array("大吉","中吉","小吉","末吉","吉","凶",);←他にもいくつか追加してはいるんだけど…。
$janken=array("ぐー","ちょき","ぱー");
//スクリーンネームに@を付ける
$reply_name = "@$reply_name";
//特定語句に反応する部分
if(preg_match ($com, "/占い|占って|うらな/u")){
$key = array_rand($uranai);
$post = $uranai[$key];
$return = $reply_name." ".$name."さんの運勢…".$post;
}
else if(preg_match ($com, "/じゃんけん|じゃーんけーん/u")){
$key = array_rand($janken);
$post = $janken[$key];
$return = $reply_name." ".$name."さん、勝負だ!じゃんけん…".$post;
}
else{
//このままだと鸚鵡返し。色々工夫してみて下さい
$return = $reply_name." ".$com;
}
//戻り値
return $return;
}

//ポスト部分の関数
function tweet($message ,$username,$password)
{
$message =urlencode($message);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$message ");
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($ch);
curl_close($ch);
}

―――終了―――

とまぁ記述はしてみたんだ。丸々コピーだから記述間違いはない。

何がいけないのかさっぱりだ。

気になる所としたら、これを入れずに$data = arrary( って記述のファイルでは動いたという部分と、それが無かったらう動かねーよって言ってる人がいた、現にこのソースにはどこにも見当たらないからそれなのかなぁ…でもでもそれで動いてる人いるんだよね。

でもそれって一から記述を書いてってることだから私みたいにただ単にぶち込めば良いってもんじゃないということだろうか。

勉強もせずにいきなりハイレベルな記述書こうなんてお門違いだ諦めろって?

と言うかこれEasyBotter用じゃねーよってやつなんだろうか。

用意するプログラムとか違ったもんなあ。

でもこれ入れてる人はちらほら見かけるのだけど…。

form.phpも良い感じで設置出来たしちゃんと手動で動くし…。

色々仮説を立てて試すも何ともまぁ勉強不足が祟って…。

一応EasyBotter.phpの中をじっくり観察してると$data = arrary(ってあるから、そこから関連付け出来てるのかな?

ならこっちのファイルからEasyBotter.phpに接触できるように何らかの記述を足さなければいけない、と言う事?

えーとform.phpの方はバージョン1.04から引っ張ってきたから、

if(isset($_POST["submit"])){
require_once("EasyBotter.php");
$eb = new EasyBotter();
$message = $_POST["message"];
$response = $eb->setUpdate(array("status"=>$message));
$result = $eb->showResult($response);
}

で、ずばっと15~6行位からこれに書き換えて実行できた。

require_once("EasyBotter.php");
$eb = new EasyBotter();
らへん重要?リプライファイルにこれ要るのかなぁ…一応bot.phpとは関連付け出来てるんだし、ちょっとググる。

require_onceは一回だけファイルを読み込むらしい。

全く関連付けされていないから読み込んで接触した、と言う事?

あと$が付いた単語は$aはbの事ですよーみたいに思ってる。

だから$eb は new EasyBotter();の事ですよ、みたいに解釈してる。

そこからの記述は良く分からないけど、そこをリプ用に変更したらイケるんじゃないかとか素人が思ってる。


そんな感じ。

今の所はこんな所で躓いてるけど、ここを乗り切ったらあとは簡単だと思うんだ!(((

このスイッチ分岐が成功すれば、きっと他のも大丈夫だ!

インクルードとかしてパターンファイル増やすとか改造出来ないし、ファイル増やすの面倒だし、一個ずつのファイルで全て管理した方が何かと便利だよねって私の勝手な意見だけども、その分間違ったら何処が違うのかって探すの大変そうだけど…フォルダで管理するよりはずっと楽なはず!


…さて、今日はここまでです。

EasyBotterで上の記述を試している方、いらっしゃいましたら是非その説明が載っているページとか、ググり方とか教えて欲しいものです…。私が見落としているかもなのでもう一度回ってきますが…。