/** |
*php抓取天气预报(天气,气温,风力,日出日落...) |
* |
*第一天没有最高气温数据,第八天没有最低气温数据 |
*注意对数字进行过滤时不要忘记对负号进行判断 |
*对风力过滤时要考虑到3-5级这种格式 |
*/ |
class weatherfetch |
{ |
private $f ; |
function getNum ( $string ) |
{ |
$tmpstr = '' ; |
$strlen = strlen ( $string ); |
for ( $i =0; $i < $strlen ; $i ++ ) |
{ |
$str = substr ( $string , $i , 1 ); |
$str1 =trim ( $str ); |
if ( is_numeric ( $str1 ) ) |
{ |
$tmpstr .= $str1 +0; |
} |
if ( $str1 == "-" && is_numeric ( substr ( $string , $i -1, 1 ) ) ) |
{ |
$tmpstr .= $str1 ; |
} |
} |
return $tmpstr ; |
} |
function __construct() |
{ |
$this ->f= new SaeFetchurl(); |
} |
function getChineseNum ( $string ) |
{ |
$tmpstr = '' ; |
$arr = array ( 1,2,3,4,5,6,7,8,9,0 ); |
$strlen = strlen ( $string ); |
for ( $i =0; $i < $strlen ; $i ++ ) |
{ |
$str = substr ( $string , $i , 1 ); |
$str1 =trim ( $str ); |
if ( ord ( $str ) >0xA0 ) |
{ |
$tmpstr .= substr ( $string , $i , 3 ); |
$i = $i +2; |
} |
if ( is_numeric ( $str1 ) ) |
{ |
$tmpstr .= $str1 ; |
} |
if ( $str1 == "-" && is_numeric ( substr ( $string , $i -1, 1 ) ) && is_numeric ( substr ( $string , $i +1, 1 ) ) ) |
{ |
$tmpstr .= $str1 ; |
} |
} |
return $tmpstr ; |
} |
function getChinese ( $string , $encode = "GBK" ) |
{ |
switch ( $encode ) |
{ |
case "GBK" : |
$codelength =2; |
break ; |
case "GB2312" : |
$codelength =3; |
break ; |
case "UTF-8" : |
$codelength =3; |
break ; |
case "UTF-16" : |
$codelength =4; |
break ; |
} |
$tmpstr = '' ; |
$arr = array ( 1,2,3,4,5,6,7,8,9,0 ); |
$strlen = strlen ( $string ); |
for ( $i =0; $i < $strlen ; $i ++ ) |
{ |
$str = substr ( $string , $i , 1 ); |
$str1 =trim ( $str ); |
if ( ord ( $str ) >0xA0 ) |
{ |
$tmpstr .= substr ( $string , $i , $codelength ); |
$i = $i + $codelength -1; |
} |
} |
return $tmpstr ; |
} |
function get ( $cityid ) |
{ |
$url = "http://www.weather.com.cn/weather/" . $cityid . ".shtml" ; |
$data = $this ->f->fetch ( $url ); |
$sun = explode ( ' |
', $data ); |
$sun = explode ( " |
", $sun [1] ); |
$sun = explode ( " |
", $sun [1] ); |
$sun = explode ( "" , $sun [0] ); |
$sunrise = strlen ( $sun [0] ); |
$sunrise = substr ( $sun [0], $sunrise -5 ); //日出时间 |
$sunset = strlen ( $sun [1] ); |
$sunset = substr ( $sun [1], $sunset -5 ); //日落时间 |
$sunhour = substr ( $sunset ,0,2 )- substr ( $sunrise ,0,2 ); |
$sunminute = $sunhour *60+ substr ( $sunset ,-2 )- substr ( $sunrise ,-2 ); //日照时间 |
$yubao = explode ( 'class="yuBaoTable"' , $data ); |
$num = count ( $yubao ); |
$tl = array (); |
$th = array (); |
$fx = array (); |
$fl = array (); |
$weather = array (); |
//第一天 |
$tr = explode ( "" , $yubao [1] ); |
$td = explode ( "" , $tr [0] ); |
$weather []= $this ->getChinese ( $td [3], "UTF-8" ); //晚上天气 |
$fx []= $this ->getChinese ( $td [5], "UTF-8" ); //晚上风向 |
$fl []= substr ( $this ->getChineseNum ( $td [6], "UTF-8" ),5 ); //晚上风力 |
$tltemp = explode ( "" , $td [4] ); //最低气温 |
$tl []= $this ->getNum ( $tltemp [1] ); |
//从第二天到第七天 |
for ( $i =2; $i < $num -1; $i ++ ) |
{ |
$tr = explode ( "" , $yubao [ $i ] ); |
$td = explode ( "" , $tr [0] ); |
$weather []= $this ->getChinese ( $td [3], "UTF-8" ); //白天天气 |
$fx []= $this ->getChinese ( $td [5], "UTF-8" ); //白天风向 |
$fltemp = substr ( $this ->getChineseNum ( $td [6], "UTF-8" ),5 ); |
$fl []= $fltemp ; //白天风力 |
$thtemp = explode ( "" , $td [4] ); |
$th []= $this ->getNum ( $thtemp [1] ); //最高气温 |
$td = explode ( "" , $tr [1] ); |
$tltemp = explode ( "" , $td [3] ); |
$tl []= $this ->getNum ( $tltemp [1] ); //最低气温 |
} |
//第八天 |
$tr = explode ( "" , $yubao [ $num -1] ); |
$td = explode ( "" , $tr [0] ); |
$weather []= $this ->getChinese ( $td [3], "UTF-8" ); //白天天气 |
$fx []= $this ->getChinese ( $td [5], "UTF-8" ); //白天风向 |
$fl []= substr ( $this ->getChineseNum ( $td [6], "UTF-8" ),5 ); //白天风力 |
$thtemp = explode ( "" , $td [4] ); |
$th []= $this ->getNum ( $thtemp [1] ); //最高气温 |
if ( count ( $weather ) ==8 ) |
{ |
return array ( "weather" => $weather , "tl" => $tl , "th" => $th , "fx" => $fx , "fl" => $fl , "sunset" => $sunset , "sunrise" => $sunrise , "sunminute" => $sunminute ); |
} |
else |
{ |
return 1; |
} |
} |
function getday1 ( $cityid ) |
{ |
$url = "http://www.weather.com.cn/weather/" . $cityid . ".shtml" ; |
$data = $this ->f->fetch ( $url ); |
$yubao = explode ( 'class="yuBaoTable"' , $data ); |
$tr = explode ( "" , $yubao [1] ); |
$td = explode ( "" , $tr [0] ); |
$thtemp = explode ( "" , $td [4] ); |
return $this ->getNum ( $thtemp [1] ); |
} |
} |
初级程序员
by: 云代码会员 发表于:2014-09-12 19:23:21 顶(0) | 踩(0) 回复
cityid 是怎么算出来的?
回复评论