ヤフーの天気予報をローカルに保存して、
内容を解析し予報部分を音声合成してもらうというもの。
tenki.shはこんな感じ
#!/bin/bash wget -q -O - http://weather.yahoo.co.jp/weather/jp/13/4410.html > tenki.html php tenki.phptenki.phpはこんな感じ
<?php
$fp = fopen("tenki.html", "r");
$timezone_array = array();
$tenki_array = array();
$kion_array = array();
$situdo_array = array();
$today_string = "";
$find_mode=0; //0:今日の天気 1:日付 2-3:時間 4:天気 5:気温 6:湿度
if ($fp){
if (flock($fp, LOCK_SH)){
while (!feof($fp)) {
$buffer = fgets($fp);
if($find_mode == 0){
if(stristr($buffer,'<div id="yjw_pinpoint_today">')){
$find_mode = 1;
//print("■発見".$buffer);
//echo "\n";
}
}else if($find_mode == 1){
if(stristr($buffer,'<span class="yjSt">')){
$find_mode = 2;
// <span class="yjSt"> - 6月30日(月)</span></h3>
$b1 = str_replace('<span class="yjSt"> -', "", $buffer);
$b2 = str_replace('</span></h3>', "", $b1);
$b3 = str_replace('(', " ", $b2);
$b4 = str_replace(')', "曜日", $b3);
$today_string= trim($b4);
//print("■日付".$today_string);
//echo "\n";
}
}else if($find_mode == 2){
//<small>時間</small>を探す
if(ereg('<small>時間</small>', $buffer)){
$find_mode = 3;
}
}else if($find_mode == 3){
if(ereg('<small><font color="#999999">.*時</font></small></td>', $buffer)){
//print("■過去".$buffer);
//echo "\n";
}else if(ereg("^<small>.*時</small></td>", $buffer)){
$b1 = str_replace('<small>', "", $buffer);
$b2 = str_replace('</small></td>', "", $b1);
//print("■時間 ".trim($b2));
//echo "\n";
$timezone_array[] = trim($b2);
}
if(ereg('<small>天気</small>', $buffer)){
//時間帯の探索は終わり
$find_mode = 4;
}
}else if($find_mode == 4){
//<small><font color="#999999">曇り</font></small></td>
//<small>曇り</small></td>
if(ereg('<small><font color="#999999">.*</font></small></td>', $buffer)){
//print("■過去".$buffer);
//echo "\n";
}else if(ereg("^<small>.*</small></td>", $buffer)){
$b1 = str_replace('<small>', "", $buffer);
$b2 = str_replace('</small></td>', "", $b1);
//print("■天気 ".trim($b2));
//echo "\n";
$tenki_array[] = trim($b2);
}
if(ereg('<small>気温(℃)</small>', $buffer)){
//天気帯の探索は終わり
$find_mode = 5;
}
}else if($find_mode == 5){
//<td><small><font color="#999999">98</font></small></td>
//<td><small>64</small></td>
if(ereg('<small><font color="#999999">.*</font></small></td>', $buffer)){
//print("■過去".$buffer);
//echo "\n";
}else if(ereg("^<td><small>.*</small></td>", $buffer)){
$b1 = str_replace('<td><small>', "", $buffer);
$b2 = str_replace('</small></td>', "", $b1);
//print("■気温 ".trim($b2)."(℃)");
//echo "\n";
$kion_array[] = trim($b2);
}
if(ereg('<small>湿度(%)</small>', $buffer)){
//天気帯の探索は終わり
$find_mode = 6;
}
}else if($find_mode == 6){
if(ereg('<small><font color="#999999">.*</font></small></td>', $buffer)){
//print("■過去".$buffer);
//echo "\n";
}else if(ereg("^<td><small>.*</small></td>", $buffer)){
$b1 = str_replace('<td><small>', "", $buffer);
$b2 = str_replace('</small></td>', "", $b1);
//print("■湿度 ".trim($b2)."(%)");
//echo "\n";
$situdo_array[] = trim($b2);
}
if(ereg('<small>降水量(mm/h)</small>', $buffer)){
//天気帯の探索は終わり
$find_mode = 7;
}
}
}
$result_array = array($timezone_array, $tenki_array,$kion_array,$situdo_array);
//print_r($result_array);
print($today_string."の天気をお伝えします。");
//echo "\n";
for($i=0;$i<count($result_array[0]);$i++){
print($result_array[0][$i]."は".$result_array[1][$i]."。 ".$result_array[2][$i]."度 ".$result_array[3][$i]."%です。");
//echo "\n";
}
flock($fp, LOCK_UN);
}else{
print('ファイルロックに失敗しました');
echo "";
}
}
$flag = fclose($fp);
if ($flag){
print('おしまい。');
echo "\n";
}else{
print('クローズに失敗しました');
echo "\n";
}
?>
実行はこんな感じで./tenki.sh | ./AquesTalkPi -v f1 -f - | aplay
すると天気予報をしてくれる!
0 件のコメント:
コメントを投稿