PHPで今日の天気を吐くBOTを簡単に(←重要)作るよ!!

ちょっとした知識と環境があれば簡単に作れるよ!!多分。
本物のプログラマPHPなんか使わないし!!!!

構築環境

因みに僕の環境は

となっております。定時にPOSTするためにcronを使っています。windowsは知らないけど、多分変わりに動くソフトがあると思うので、適当に探せばいいと思うな!!

PHPtwitterに投稿する

まずここからですね。関数化しておくと、いろいろとよいよいです。というわけで、任意の文字列$messageを受け取ってtwitterにpostする、post関数を作ります。
こちらを参考にしました!!ありがとうございま!す!!!!
PHPでTwitterに投稿 - ひらっち's diary

<?php

function post($message){
	$url="http://twitter.com/statuses/update.xml?";
	$username="ユーザ名";	#任意のユーザ名
	$password="**********";	#パスワード

	$params="status=".rawurlencode($message);

	$result=file_get_contents($url.$params ,false, stream_context_create(array(
		"http"=>array(
			"method"=>"POST",
			"header"=>"Authorization:Basic".base64_encode($username. ":". $password)
		)
	)));
}

?>

できたら、早速実行してみましょう。パーミッションの変更も忘れずに!!うんことか適当な文字列を引数に与えて投稿できてればおk
因みに僕は妹bot*1を作って、ひたすら「おにいちゃん!」と叫ぶようにしました。妹いないなら作ればいいんだよ!!!

XMLを読み込んで出力する

投稿できたら、あとはどんな文字列を出力するかということを考えます。決められた文字列のみを出力するのも良いですが、何かしらの機能も欲しいですからね!!
今回は、ライブドアのお天気ウェッブサービスを用いて、天気を出力してみます。簡単に構築するためにSimpleXMLを使うよ!
こちらを参考にしました!!ありがとうございます!!!!!!!!!!!!!
http://www.phppro.jp/school/mashup/vol3/1

<?php

function weath($city, $day){
	$req="http://weather.livedoor.com/forecast/webservice/rest/v1";
	$req.="?city=".$city."&day=".$day;

	$xml=simplexml_load_file($req);

	if($xml!=FALSE){
		$result="今日の埼玉県の天気は、";
		$result.=$xml->telop."だよ!";
		$result.="今日の最高気温は、";
		$result.=$xml->temperature->max->celsius."度だよ!暑いね!!";
	}else{
		$result="なんかわかんないけど、しっぱいした";
	}

	return $result;
}

?>

引数$cityに地域のID,$dayは日付を文字列で渡します。
例えば僕の場合は、今日のさいたまの天気が欲しいので、

$city=60;
$day="today";

となります。
他の地域に関しては知らないんで、お天気Webサービスの仕様を確認してくださいな。
お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報


読み込んだ値は、ライブドアお天気WebサービスのベースのURLと結合するよ!結果、$reqには"http://weather.livedoor.com/forecast/webservice/rest/v1?city=60&day=today"という文字列が格納されるわけです!このアドレスにアクセスするとxmlが表示されますね!ここで、Simplexml_load_file関数を使ってxmlファイルのデータを読み込みます。読み込めなかった場合はFALSEが返されます。


これをさっき作ったpost関数と組み合わせて、

$message=weath(60, "today");
post($message);

実行して投稿されてれば完了だ!!!!やったあああああああああああああ

cronで動かす

さて一応動いたけどこれをいちいちPHPプログラムを走らせるのも面倒ですね!!\めんどい!/
crontabを使って、毎朝投稿させるようにします。これを使うと予め指定したコマンドが指定した時刻に実行できるよ!!\すごい!/

% crontab -e

でスケジュールを設定するよ!
毎晩22時に投稿させる場合は以下のように設定します。

0 20 * * * /home/rdcs/twitter/imouto.php

作成したPHPプログラムを設置しておけばおk
設定方法に関してはググれば結構出るけど、ざっと見た感じcrontab - Wikipediaがやたら詳しかったです。

発展

replyとか進んだ機能はあとから付けていけばいいと思うな!オッスオッス!僕もまだ勉強中の身ですが。
良いtwitterBOTライフを!!アディオス!!