天氣預報信息采集自中央氣象台,信息准確,覆蓋面廣,代碼簡單。返回是json代碼,可以用於客戶端調用,也可以在服務器端處理後顯示,筆者的wordpress天氣預報插件就是使用的這段代碼哦。需要注意的是,這段代碼會在服務器產生緩存文件,需要在當前目錄中新建data文件夾,保證文件夾可寫。
<?php
if(!isset($_GET['q'])){
//根據IP查詢所在地
$p = file_get_contents("http://lab.xxxx/ip/?q={$_SERVER['HTTP_X_FORWARDED_FOR']}");
}
else{
$p = $_GET['q'];
}
$k = 0;
$encoding = mb_detect_encoding($p);
if($encoding != "UTF-8"){
$p = mb_convert_encoding($p,"utf-8","gbk");
}
$p_arr = array(
"01" => "北京",
"02" => "上海",
"03" => "天津",
"04" => "重慶",
"05" => "黑龍江",
"06" => "吉林",
"07" => "遼寧",
"08" => "內蒙古",
"09" => "河北",
"10" => "山西",
"11" => "陝西",
"12" => "山東",
"13" => "新疆",
"14" => "西藏",
"15" => "青海",
"16" => "甘肅",
"17" => "寧夏",
"18" => "河南",
"19" => "江蘇",
"20" => "湖北",
"21" => "浙江",
"22" => "安徽",
"23" => "福建",
"24" => "江西",
"25" => "湖南",
"26" => "貴州",
"27" => "四川",
"28" => "廣東",
"29" => "雲南",
"30" => "廣西",
"31" => "海南",
"32" => "香港",
"33" => "澳門",
"34" => "台灣"
);
function find(&$item,$key,$data){
global $k;
if(preg_match("/$item/u",$data)){
$k = $key;
}
}
function get_data_arr($key){
if(!file_exists("./data/city{$key}.xml")){
$c =file_get_contents( "http://m.weather.com.cn/data5/city{$key}.xml" );
file_put_contents("./data/city{$key}.xml",$c);
}
else{
$c = file_get_contents("./data/city{$key}.xml");
}
$arr = explode(",",$c);
foreach($arr as $v){
$data = explode("|",$v);
$ret[$data[0]] = $data[1];
}
return $ret;
}
array_walk($p_arr,'find',$p);
array_walk(get_data_arr($k),'find',$p);
array_walk(get_data_arr($k),'find',$p);
$ccode = get_data_arr($k);
echo file_get_contents("http://m.weather.com.cn/data/{$ccode[$k]}.html");
?>