とりあえずbotを作ってみる

プログラミングができなくても作れるTwitter botの作り方』様のソースコードを使わせて頂いて、とりあえずbotを作ってみましょう。

初っ端から他サイト様におんぶにだっこ状態で申し訳ないんですが…

ひとまず「用意した文章をランダムな順番で投稿するbot」を、手順通りに作成してみましょう。動くかどうかだけ確認取れれば大丈夫なので、台詞編集とかはしなくてもオッケーです。cronの設定もここではスルー。

…動きましたか? 動いたら次に進みましょう。

@pagesさんを使用する方で文字化けしてしまったという方は、bot用ファイル(tw.txt、post_random.php)をブラウザアップロードしてみてください。
アップロード方法は『Twitterbot作り 〜定期的にポストするソースを作ろう4〜 - 銀さんのbot 〜不完全〜』様で紹介されています。おんぶにだっこ過ぎるぞ自重せよ!


時間帯によって動作・台詞が変わるbotにする

ランダムにポストし続けるbotならば、台詞編集すれば完成です。が、もうちょっと弄ってみましょう。時間帯によって動作・台詞が変わるbotにしてみます。

さっき動くのを確認したファイルを編集しても良いんですが、ここではファイルを新規作成してみます。まず、お手元に空のtxtファイルを作成してください。Windowsだったら、右クリック→『新規作成』→『テキストドキュメント』…な感じで。ファイル名はお好きに付けてください。

作成出来たら、そのファイルを開いてください。そして、おまじないを書きます。

<?php

?>

コピペ出来ましたか? これから「<?php」と「?>」のに色々付け足して行きます。
今回参考にさせて頂くのは『キャラクタ系Twitterbotをつくってみた初心者向けまとめ そのいち - ものおき@はてな』様。

「1.メッセージの設定」の中から、3種類の台詞設定があるソースコードを使用させて頂きます。

<?php
	$mes['rand'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//通常のランダムpost
	$mes['morning'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//起床
	$mes['night'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//就寝前
?>

コピペするとこんな感じになるはず。これからはどんどん下に追加していきます。もちろん「?>」の下はダメですよ。

あと、行揃えのスペース(「$mes〜」の前とか)を入れる時は、スペースじゃなくてタブ推奨。うっかり全角スペースとか使っちゃうと、エラーの原因になります。「Tab」キーを押すとガッと空白が入るので、こちらをご利用ください。

では、次にいきましょう。「2.時間判定」のソースコードをコピペします。このソースコードだと、1〜6時は寝ていると判定されます。

	$now_g = date('G');
	$now_i = date('i');
	if (preg_match("/^[1-6]{0,1}$/",$now_g)){
		$now_g = 'sleep';
	};

そして今度は「今何時かを判定する部分」…なのですが、私の場合、どうもここがうまく動いてくれませんでした。ので、参考サイト様とは別の書き方をしています。綺麗なソースコードじゃないですが、よろしければこちらをご利用ください。

	// 時間帯別振り分け

	if($now_g == 'sleep'){				// 寝ている時間帯だったら空の配列を指定
		$plist = array();
	}else if(($now_g == '0') && ($now_i >= '30')){	//0時台かつ30分以降だったらおやすみメッセージの配列を指定
		$plist = $mes['night'];
	}else if(($now_g == '7') && ($now_i <= '30')){	// 7時台かつ30分以前だったらおやすみメッセージの配列を指定
		$plist = $mes['morning'];
	}else{							// それ以外の場合はランダムメッセージ配列を指定
		$plist = $mes['rand'];
	}

もっと細かく分けたい場合は、また別項にて説明させて頂きます。

そしていよいよ「3.投稿するメッセージを決定」。またもコピペでぺたり…の前に、一箇所修正すべき点があります。「$mes_list」を「$plist」に変更してください。面倒だったら↓をコピペで。

	if(! empty($plist)){	//演算子「!」は否定なので、「$plistが空配列じゃなかったら」という意味ですよ
		$key = array_rand($plist);
		$post = $plist[$key];
	}

最後に「4.Twitterへの投稿」なんですが… こちら、フルパス云々の記載がありますが、このページの最初でbotが動いていればフルパス指定の必要はありません。
「Services/Twitter.php」とだけ書けば大丈夫です。多分。
あと、php5版の方は一箇所修正(「$mes_list」→「$plist」に変更)…つまり、↓のソースコードコピペ&ユーザー名とパス書き換えで大丈夫なはず。

※php5の方

	//Service_Twitter設定
	require_once "Services/Twitter.php"; 
		//別にフルパスじゃなくてもいいんですが、フルパスの方が確実かと思います。
	$user = 'twitterのユーザ名';
	$pass = 'twitterのパスワード';
	$st =& new Services_Twitter($user,$pass);

	if(! empty($plist)){
		$key = array_rand($plist);
		$post = $plist[$key];

		//ここから送信。Service_TwitterのsetUpdateメソッドを使います。
		try{
			$st->setUpdate($post);
		}catch (Exception $e) { 
			die('ERROR: ' . $e->getMessage());
		}
	};

※php4の方

	//Service_Twitter設定
	require_once "Services/Twitter.php"; 
		//別にフルパスじゃなくてもいいんですが、フルパスの方が確実かと思います。
	$user = 'twitterのユーザ名';
	$pass = 'twitterのパスワード';
	$st =& new Services_Twitter($user,$pass);

	if(! $st->setUpdate($post) ){
		die('ERROR');
	}

以上で完成です! お疲れさまでした。
あとは、ファイル名を「〜.txt」から「〜.php」に変更の上アップロードして、アクセスするだけです。アップロードする場所は、さきほど設置したbot用ファイル(tw.txt、post_random.php)と同じフォルダです。@pagesの方は、今回もブラウザアップロードの方が確実かと思います。

…動きましたか? 動いたら、次はリプライの設定をしてみましょう。
どうしても動かない! という方は、紹介したコードを全て組み合わせたものを↓に置いておきますので、これをコピペしてもエラーが出てしまうかどうか確認してみてください。

※php5の方

<?php
	$mes['rand'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//通常のランダムpost
	$mes['morning'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//起床
	$mes['night'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//就寝前

	$now_g = date('G');
	$now_i = date('i');
	if (preg_match("/^[1-6]{0,1}$/",$now_g)){
		$now_g = 'sleep';
	};

	// 時間帯別振り分け

	if($now_g == 'sleep'){				// 寝ている時間帯だったら空の配列を指定
		$plist = array();
	}else if(($now_g == '0') && ($now_i >= '30')){	//0時台かつ30分以降だったらおやすみメッセージの配列を指定
		$plist = $mes['night'];
	}else if(($now_g == '7') && ($now_i <= '30')){	// 7時台かつ30分以前だったらおやすみメッセージの配列を指定
		$plist = $mes['morning'];
	}else{							// それ以外の場合はランダムメッセージ配列を指定
		$plist = $mes['rand'];
	}

	if(! empty($plist)){	//演算子「!」は否定なので、「$plistが空配列じゃなかったら」という意味ですよ
		$key = array_rand($plist);
		$post = $plist[$key];
	}


	//Service_Twitter設定
	require_once "Services/Twitter.php"; 
		//別にフルパスじゃなくてもいいんですが、フルパスの方が確実かと思います。
	$user = 'twitterのユーザ名';
	$pass = 'twitterのパスワード';
	$st =& new Services_Twitter($user,$pass);

	if(! empty($plist)){
		$key = array_rand($plist);
		$post = $plist[$key];

		//ここから送信。Service_TwitterのsetUpdateメソッドを使います。
		try{
			$st->setUpdate($post);
		}catch (Exception $e) { 
			die('ERROR: ' . $e->getMessage());
		}
	};
?>

※php4の方

<?php
	$mes['rand'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//通常のランダムpost
	$mes['morning'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//起床
	$mes['night'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//就寝前

	$now_g = date('G');
	$now_i = date('i');
	if (preg_match("/^[1-6]{0,1}$/",$now_g)){
		$now_g = 'sleep';
	};

	// 時間帯別振り分け

	if($now_g == 'sleep'){				// 寝ている時間帯だったら空の配列を指定
		$plist = array();
	}else if(($now_g == '0') && ($now_i >= '30')){	//0時台かつ30分以降だったらおやすみメッセージの配列を指定
		$plist = $mes['night'];
	}else if(($now_g == '7') && ($now_i <= '30')){	// 7時台かつ30分以前だったらおやすみメッセージの配列を指定
		$plist = $mes['morning'];
	}else{							// それ以外の場合はランダムメッセージ配列を指定
		$plist = $mes['rand'];
	}

	if(! empty($plist)){	//演算子「!」は否定なので、「$plistが空配列じゃなかったら」という意味ですよ
		$key = array_rand($plist);
		$post = $plist[$key];
	}


	//Service_Twitter設定
	require_once "Services/Twitter.php"; 
		//別にフルパスじゃなくてもいいんですが、フルパスの方が確実かと思います。
	$user = 'twitterのユーザ名';
	$pass = 'twitterのパスワード';
	$st =& new Services_Twitter($user,$pass);

	if(! $st->setUpdate($post) ){
		die('ERROR');
	}
?>

もっと細かく時間帯設定をしたい!

というわけで別項です。もっと細かく時間指定したいという方へ。

ここでもまた『キャラクタ系Twitterbotをつくってみた初心者向けまとめ そのいち - ものおき@はてな』様のソースコードをお借りします。まずは台詞設定から。

	$mes['rand'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//通常のランダムpost
	$mes['morning'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//起床
	$mes['day'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//午前中
	$mes['lunch'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//昼時
	$mes['noon'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );		//午後
	$mes['evening'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//夜
	$mes['night'] = array("台詞1" , "台詞2" , "台詞3" , "台詞4" );	//就寝前

だいぶ細かくなりましたね。というわけで、これに合わせて時間帯の判定をしていきます。またもや汚い自作コードで失礼します。

	// 時間帯別振り分け

	if($now_g == 'sleep'){				// 寝ている時間帯だったら空の配列を指定
		$plist = array();
	}else if(($now_g == '0') && ($now_i >= '30')){	//0時台かつ30分以降だったらおやすみメッセージの配列を指定
		$plist = $mes['night'];
	}else if(($now_g == '7') && ($now_i <= '30')){	// 7時台かつ30分以前だったらおやすみメッセージの配列を指定
		$plist = $mes['morning'];
	}else if(($now_g == '8') || ($now_g == '9')){	// 8〜9時台は午前中用メッセージの配列を指定
		$plist = $mes['day'];
	}else if($now_g == '12'){				// 12時台は昼時用メッセージの配列を指定
		$plist = $mes['lunch'];
	}else if(($now_g == '13') || ($now_g == '14') || ($now_g == '15')){	// 13〜15時台は午後用メッセージの配列を指定
		$plist = $mes['noon'];
	}else if(($now_g == '21') || ($now_g == '22') || ($now_g == '23')){	// 21〜23時台は夜用メッセージの配列を指定
		$plist = $mes['evening'];
	}else{							// それ以外の場合はランダムメッセージ配列を指定
		$plist = $mes['rand'];
	}

面倒なので多くは語りません。ソースを参考に、お好きな時間設定をしてください。あ、「&&」は「and条件(AかつB)」「||」は「or条件(AまたはB)」という事だけお伝えしておきますね。

貴方の健闘を祈っております。