喜悦国际村 专业PHP开发者社区's Archiver

freemouse 发表于 2010-8-26 09:36 AM

php 天气预报代码 采集自中央气象台范围覆盖全国

[i=s] 本帖最后由 freemouse 于 2010-8-26 10:13 AM 编辑 [/i]

[b]作者:[url=http://www.cnphp.info/]freemouse[/url][/b]
[b]来源:[url=http://www.cnphp.info/php-weather-forecast-source.html]http://www.cnphp.info/php-weather-forecast-source.html[/url][/b]
[b]天气预报[/b]信息采集自中央气象台,信息准确,覆盖面广,代码简单。返回是json代码,可以用于客户端调用,也可以在服务器端处理后显示,笔者的wordpress天气预报插件就是使用的这段代码哦。需要注意的是,这段代码会在服务器产生缓存文件,需要在当前目录中新建data文件夹,保证文件夹可写。[b]转载注明出处![/b][code]

<?php
    if(!isset($_GET['q'])){
        //根据IP查询所在地
        $p = file_get_contents("http://lab.cnphp.info/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");
?>
[/code]
[attach]6168[/attach]

freemouse 发表于 2010-8-26 01:17 PM

为什么没人顶?郁闷

水清无鱼 发表于 2010-8-26 01:44 PM

{:3_53:}支持一下……

zl07 发表于 2010-8-26 09:43 PM

不错不错,居然真有人用了那个XML:lol

c1a1o1 发表于 2010-8-30 02:13 PM

不错 俺来 支持一下

老陈 发表于 2010-12-21 11:47 AM

3Q~
:victory:

cyr11 发表于 2010-12-23 09:20 AM

非常好!楼主辛苦了!

yangshaoxing 发表于 2011-3-15 01:25 PM

正好要用,学习学习

yangshaoxing 发表于 2011-3-16 08:27 AM

这个“q”是什么?是客户端的IP地址吗?

niexa123 发表于 2011-8-31 06:31 PM

看看了人

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.