ヤフーの天気予報をローカルに保存して、
内容を解析し予報部分を音声合成してもらうというもの。
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 件のコメント:
コメントを投稿