全面的にTwitterBotPHP掲示板の天気予報機能を参考にしています……いたと思います。
EasyBotter.phpの改造ですが、改造箇所が複数に亘るのでご注意ください。
また、Yahoo!デベロッパーズネットワークの電気予報APIを使用しますので、前もってアプリケーションIDを取得しておいてください。
class EasyBotter {
// 途中省略
// まるっと関数を新造
function makePowerForecastTweet($text){
$api_key_yahoo = '取得したアプリケーションID';
// いつの?
$today = date("Ymd", time());
$tomorrow = date("Ymd", time()+(24*3600));
$dayaftertomorrow = date("Ymd", time()+24*3600*2);
$w_day = array(
"今日"=> $today, "きょう"=> $today,
"明日"=> $tomorrow, "あす"=> $tomorrow, "あした"=> $tomorrow,
"明後日"=> $dayaftertomorrow, "あさって"=> $dayaftertomorrow
);
foreach( $w_day as $w_time => $w_timeNo){
if(preg_match( "/".$w_time."/u", $text)) {
$timeName = $w_time;
break;
}
}
if(empty($timeName)) {
$timeName = $today;
}
$day = $w_day["$timeName"];
// どこの?
$w_city = array(
"東北"=>"tohoku",
"東京"=>"tokyo", "関東"=>"tokyo", "東電"=>"tokyo",
"中部"=>"chubu", "名古屋"=>"chubu",
"大阪"=>"kansai", "関西"=>"kansai", "関電"=>"kansai",
"九州"=>"kyushu", "福岡"=>"kyushu"
);
foreach( $w_city as $w_area => $w_areaNo){
if(preg_match( "/".$w_area."/u", $text)) {
$cityName = $w_area;
break;
}
}
if( empty($cityName) ){
$w_flg = FALSE;
$cityName = "東京";
}
$where = $w_city["$cityName"];
// Yahoo!電力予報APIからPHP切片を取得
$powerforecast_url
= "http://setsuden.yahooapis.jp/v1/Setsuden/electricPowerForecast?appid="
.$api_key_yahoo."&area=tokyo&date=".$day;
$forecastxml = simplexml_load_file($powerforecast_url);
// 配列に押し込む
$i = 0;
$powers = array();
foreach($forecastxml->Forecast as $forecast){
if(!is_array($forecast)) {
$hour[$i] = intval($forecast->Hour);
$percent[$i] = round((intval($forecast->Usage)/intval($forecast->Capacity))*100);
$i++;
}
}
// 最大値検出
array_multisort($percent, SORT_DESC, $hour, SORT_ASC);
// メッセージ整形
$maxs = array();
$times = "";
for($i = 0; $i < count($hour); $i++) {
if($percent[$i] === $percent[0]) {
array_push($maxs, $hour[$i]."時");
} else {
break;
}
}
if($day === $today) {
$timeName .= "のこれから";
}
if($i > 1) {
$times = "のだいたい".$i."回";
}
$status = $timeName."の電力最大使用率は".$percent[0]."%で、ピークは"
.join($maxs, "、").$times."だってさ。";
return $status;
}
// 途中省略
//リプライを作る
function makeReplyTweets($replies, $replyFile, $replyPatternFile){
if(empty($this->_replyPatternData[$replyPatternFile]) && !empty($replyPatternFile)){
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}
$replyTweets = array();
foreach($replies as $reply){
$status = "";
// ここから追加
if(strpos((string)$reply->text, "電力") !== FALSE) {
$status = $this->makePowerForecastTweet((string)$reply->text);
}
// ここまで追加
// リプライパターンと照合
if(empty($status) && !empty($this->_replyPatternData[$replyPatternFile])){
// 以降省略
}