php怎么抓取天气预报?

如题所述

第1个回答  2015-07-24

可以借由php的api或者preg_match_all偷偷撷取去达成目的

这里给你一段我给台湾朋友有一段源码

<?php

header(\"Content-Type: text/html; charset=utf-8\");
function getWeather($city){

$toURL = \"
$city.htm\";
$post = array();
$ch = curl_init();
$options = array(
CURLOPT_REFERER=>'',
CURLOPT_URL=>$toURL,
CURLOPT_VERBOSE=>0,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_USERAGENT=>\"Mozilla/4.0 (compatible;)\",
CURLOPT_POST=>true,
CURLOPT_POSTFIELDS=>http_build_query($post),
);
curl_setopt_array($ch, $options);

$result = curl_exec($ch); 
curl_close($ch);
//连接中央气象局
echo '<pre>';
preg_match_all('/<table class=\"FcstBoxTable01\" [^>]*[^>]*>(.*)<\/div>/si',$result, $matches, PREG_SET_ORDER);

preg_match_all('/<td nowrap=\"nowrap\" [^>]*[^>]*>(.*)<\/td>/si',$matches[0][1], $m1, PREG_SET_ORDER);

$m2 = explode('</td>',$m1[0][1]);
// print_r($m2);//取得每日资料m2[0~6]

$weather = array();
for($i=0;$i<=6;$i++){

preg_match_all('/src=[^>]*[^>](.*)/si',$m2[$i], $m5, PREG_SET_ORDER);//取得天气图档
$m6 = explode('\"',$m5[0][0]);
$wi='
($m6[1],'\.\./\.\./');
$wtitle = $m6[3];
     print_r($wtitle);
$weather[$i]['date'] = date(\"m-d\", mktime(0, 0, 0, date(\"m\"), date(\"d\")+$i,date(\"Y\")));
$weather[$i]['temperature'] = trim(strip_tags($m2[$i]));
$weather[$i]['title'] = $wtitle;
$weather[$i]['img'] = $wi;
}

return($weather);

}

  $weather=getWeather(\"Taipei_City\") ;   
  print_r($weather);
  

// header(\"Location:loc.php\");
?>

首先

$toURL = \"http://www.cwb.gov.tw/V7/forecast/taiwan/inc/city/$city.htm\";

这里是读取资料的网址

上面的是台湾中央气象局

preg_match_all('/<table class=\"FcstBoxTable01\" [^>]*[^>]*>(.*)<\/div>/si',$result, $matches, PREG_SET_ORDER);

preg_match_all('/<td nowrap=\"nowrap\" [^>]*[^>]*>(.*)<\/td>/si',$matches[0][1], $m1, PREG_SET_ORDER);

这里是截取台湾中央气象局网页信息table class=\"FcstBoxTable01\" [^>]*[^>]*>(.*)<\/div>的资料以及<td nowrap=\"nowrap\" [^>]*[^>]*>(.*)<\/td>的资料分别是1天跟1周

$m2 = explode('</td>',$m1[0][1]);
// print_r($m2);//取得每日资料m2[0~6]

这里是取得每日的资料

preg_match_all('/src=[^>]*[^>](.*)/si',$m2[$i], $m5, PREG_SET_ORDER);//取得天气图档

这里是取得天气的图档

$m6 = explode('\"',$m5[0][0]);
$wi='
($m6[1],'\.\./\.\./');
$wtitle = $m6[3];
     print_r($wtitle);
$weather[$i]['date'] = date(\"m-d\", mktime(0, 0, 0, date(\"m\"), date(\"d\")+$i,date(\"Y\")));
$weather[$i]['temperature'] = trim(strip_tags($m2[$i]));
$weather[$i]['title'] = $wtitle;
$weather[$i]['img'] = $wi;

这里是返回的网址,日期,标题,图档等等的资料

  $weather=getWeather(\"Taipei_City\") ;   
  print_r($weather);

然后这里是显示出地区的一周天气预报


结论:就是如果你想从网站上面截取天气预报

在php可以是用preg_match_all(网页的表格table,表格的列数tr,表格的栏位td,或者更加广泛的标签div等等获取)

第2个回答  2009-11-10
http://service.weather.com.cn/plugin/index.shtml
这里是天气插件.根据自己需要选择.
绝对能行.
第3个回答  2009-11-10
http://www.weather.com.cn/
去这个网站,上面提供你天气预报的链接,很不错。你在自己的网页上写个框架就可以了,很简单。
第5个回答  2009-11-11
用小偷程序啊,php100网站上面有这个教程,自己看看吧,挺简单的
相似回答