• 根据ip判断返回城市名称查询当地天气


    <?php
    header("content-type:text/html;charset=utf-8");
    date_default_timezone_set("Asia/Shanghai");
    error_reporting(0);
    // 根据IP判断城市
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=$user_ip";
    $address = file_get_contents($url);
    $address_arr = json_decode($address);  //返回对象,需要转换为数组

    //以上海为例

    stdClass Object
      (
      [ret] => 1
      [start] => -1
      [end] => -1
      [country] => 中国
      [province] => 上海
      [city] => 上海
      [district] =>
      [isp] =>
      [type] =>
      [desc] =>
      )

    function object_array($array){
      if(is_object($array)){
        $array = (array)$array;
      }
      if(is_array($array)){
        foreach($array as $key=>$value){
          $array[$key] = object_array($value);
        }
      }
      return $array;
    }

    //通过该函数转化为数组
    $address_arr = object_array($address_arr);

    // print_r($address_arr);

    Array
      (
      [ret] => 1
      [start] => -1
      [end] => -1
      [country] => 中国
      [province] => 上海
      [city] => 上海
      [district] =>
      [isp] =>
      [type] =>
      [desc] =>
      )


    $city = $address_arr["city"];  

    //输出为上海,获得城市通过百度天气API查询当地天气

    $con=file_get_contents("http://api.map.baidu.com/telematics/v3/weather?location=$city&output=json&ak=spmMww7Eoqcmf3FXbnLyDUwL");  //注意ak值需要进入百度接口注册,附上地址:http://lbsyun.baidu.com/apiconsole/key
    $con = json_decode($con);

    print_r($con);

    stdClass Object
      (
      [error] => 0
      [status] => success
      [date] => 2016-09-23
      [results] => Array
      (
      [0] => stdClass Object
      (
      [currentCity] => 上海
      [pm25] => 42
      [index] => Array
      (
      [0] => stdClass Object
      (
      [title] => 穿衣
      [zs] => 热
      [tipt] => 穿衣指数
      [des] => 天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。
      )
       
      [1] => stdClass Object
      (
      [title] => 洗车
      [zs] => 较适宜
      [tipt] => 洗车指数
      [des] => 较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。
      )
       
      [2] => stdClass Object
      (
      [title] => 旅游
      [zs] => 适宜
      [tipt] => 旅游指数
      [des] => 天气较好,但丝毫不会影响您出行的心情。温度适宜又有微风相伴,适宜旅游。
      )
       
      [3] => stdClass Object
      (
      [title] => 感冒
      [zs] => 少发
      [tipt] => 感冒指数
      [des] => 各项气象条件适宜,无明显降温过程,发生感冒机率较低。
      )
       
      [4] => stdClass Object
      (
      [title] => 运动
      [zs] => 较适宜
      [tipt] => 运动指数
      [des] => 天气较好,户外运动请注意防晒。推荐您进行室内运动。
      )
       
      [5] => stdClass Object
      (
      [title] => 紫外线强度
      [zs] => 弱
      [tipt] => 紫外线强度指数
      [des] => 紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。
      )
       
      )
       
      [weather_data] => Array
      (
      [0] => stdClass Object
      (
      [date] => 周五 09月23日 (实时:26℃)
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
      [weather] => 多云
      [wind] => 东风微风
      [temperature] => 27 ~ 21℃
      )
       
      [1] => stdClass Object
      (
      [date] => 周六
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
      [weather] => 多云
      [wind] => 东风微风
      [temperature] => 28 ~ 23℃
      )
       
      [2] => stdClass Object
      (
      [date] => 周日
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
      [weather] => 多云转阴
      [wind] => 东风微风
      [temperature] => 28 ~ 23℃
      )
       
      [3] => stdClass Object
      (
      [date] => 周一
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
      [weather] => 多云转阴
      [wind] => 东北风微风
      [temperature] => 29 ~ 25℃
      )
       
      )
       
      )
       
      )
       
      )

    $arr = object_array($con);  //继续转成数组操作

    $detail = $arr["results"][0]["weather_data"];
    $city = $arr["results"][0]["currentCity"];

    print_r($detail);

    Array
      (
      [0] => Array
      (
      [date] => 周五 09月23日 (实时:26℃)
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
      [weather] => 多云
      [wind] => 东风微风
      [temperature] => 27 ~ 21℃
      )
       
      [1] => Array
      (
      [date] => 周六
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
      [weather] => 多云
      [wind] => 东风微风
      [temperature] => 28 ~ 23℃
      )
       
      [2] => Array
      (
      [date] => 周日
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
      [weather] => 多云转阴
      [wind] => 东风微风
      [temperature] => 28 ~ 23℃
      )
       
      [3] => Array
      (
      [date] => 周一
      [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
      [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
      [weather] => 多云转阴
      [wind] => 东北风微风
      [temperature] => 29 ~ 25℃
      )
       
      )

    //获得天气数据,根据自己需求进行调整

    ?>

  • 相关阅读:
    PHP 快速实现大文件上传
    websocketd
    mybatis——一级缓存、二级缓存
    mybatis学习——多对一和一对多查询
    XML文件存在中文注释报错问题( 3 字节的 UTF-8 序列的字节 3 无效)
    mybatis设置自动提交事务
    mybatis之Param注解
    mybatis学习——实现分页
    mybatis学习——日志工厂
    mybatis——解决属性名和数据库字段名不一致问题
  • 原文地址:https://www.cnblogs.com/IT-jian/p/5899511.html
Copyright © 2020-2023  润新知