你的程序获取不到天气预报的值啊

张秀才 发布于 2012/03/19 14:42
阅读 579
收藏 0
PHP
$ch = curl_init( 'http://www.weather.com' );   这句话改怎么修改?获取不到天气预报的值啊
unset($str, $weatherReport);  这个是空的。  我想获取北京的天气,怎么写呢?
能收到短信,但是天气的内容是空的 ,我想获取http://www.weather.com.cn/weather/101010100.shtml  北京的天气预报
求教,我php是小白

以下是问题补充:

@张秀才:http://www.oschina.net/code/snippet_251053_9249 我指的是这个地址,大家能看懂如何获取天气值的,希望不吝赐教 (2012/03/19 14:57)
加载中
0
张秀才

引用来自“张秀才”的答案

#============= CURL获取第三方数据,请自行修改[说白了,就是采集数据,小偷程序啦~!] =============
$ch = curl_init('http://weather.raychou.com/?/detail/53698/count_3');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
if(!$result) {
 exit;
}
//echo $result ;
//preg_match('/<a href="tqyb.html"  target="_blank">(.*)<\/a><\/div><script/is', $result, $todayWeather);
preg_match_all("/<li class=\"(.*?)\">(.*?)<\/li>/i",$result,$weatherReport);
$weatherReport  = implode(",", $weatherReport[2]);
$weatherReport = str_replace("</h3>","",$weatherReport);
$weatherReport  = explode("<h3>",$weatherReport);
//$weatherReport =$weatherReport[1]."".$weatherReport[2]."".$weatherReport[3];
$weatherReport  = implode("。\r", $weatherReport);
$weatherReport = '北京天气预报:'.$weatherReport;
//echo $weatherReport;
unset($todayWeather, $result);

感谢上面的回复,我换了个数据源,采用weather.raychou.com的数据,找一个高手帮我加了过滤函数,现在能采集到天气预报了。其他朋友可以借鉴下。只用把标红的地址改成自己的地区即可

因为weather.com.cn经常改模板,估计是想防采集吧。所以改成上面的数据源,linde的服务器,纯公益,估计更改模板的频率会小点
0
张秀才
哎哎,大家看补充说明里面的网址,有个获取指定地址里面的天气数据,然后给飞信好友发短信的功能,可惜获取不到数据,大家帮看看该怎么设置?
0
jszjgqq
jszjgqq
那个URL我是乱写的,我写的那份获取的天气数据你并不适用(原来的URL只能获取我所在地城市的天气),请根据自己的需求自行修改!!
0
张秀才

关键是,我不会啊,网上搜了下,说weather.com.cn经常修改模板,导致之前的采集失效。目前网上流传的获取天气然后用飞信发送的程序都是错误的。

能帮我写一个获取北京的天气预报吗?或者贴出你的代码来,我也能看着修改一下,谢谢了。

参考例子:

http://down.chinaz.com/soft/25482.htm  福清网天气预报程序 v1.7 他获取数据正常

0
immvv
immvv

引用来自“MoWii”的答案

另外,如果获取实时预报,可以 用 http://www.weather.com.cn/data/sk/101010100.html 这个
0
张秀才

#============= CURL获取第三方数据,请自行修改[说白了,就是采集数据,小偷程序啦~!] =============
$ch = curl_init('http://weather.raychou.com/?/detail/53698/count_3');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
if(!$result) {
 exit;
}
//echo $result ;
//preg_match('/<a href="tqyb.html"  target="_blank">(.*)<\/a><\/div><script/is', $result, $todayWeather);
preg_match_all("/<li class=\"(.*?)\">(.*?)<\/li>/i",$result,$weatherReport);
$weatherReport  = implode(",", $weatherReport[2]);
$weatherReport = str_replace("</h3>","",$weatherReport);
$weatherReport  = explode("<h3>",$weatherReport);
//$weatherReport =$weatherReport[1]."".$weatherReport[2]."".$weatherReport[3];
$weatherReport  = implode("。\r", $weatherReport);
$weatherReport = '北京天气预报:'.$weatherReport;
//echo $weatherReport;
unset($todayWeather, $result);

感谢上面的回复,我换了个数据源,采用weather.raychou.com的数据,找一个高手帮我加了过滤函数,现在能采集到天气预报了。其他朋友可以借鉴下。只用把标红的地址改成自己的地区即可

0
屈超
屈超

 

$city = '101110901';//所在城市的id
$weather_json = file_get_contents('http://m.weather.com.cn/data/' . $city . '.html');
//这里获取的$weather_json是utf-8编码的json七天天气数据,要用json还是数组自己操作吧,建议直接用js操作json输出到页面