php代码
<?php class weather{ // 省和省会 private $capital = array( '黑龙江省'=>'哈尔滨市', '吉林省'=>'长春市', '辽宁省'=>'沈阳市', '河北省'=>'石家庄市', '山西省'=>'太原市', '山东省'=>'济南市', '青海省'=>'西宁市', '甘肃省'=>'兰州市', '陕西省'=>'西安市', '河南省'=>'郑州市', '江苏省'=>'南京市', '四川省'=>'成都市', '湖北省'=>'武汉市', '安徽省'=>'合肥市', '浙江省'=>'杭州市', '湖南省'=>'长沙市', '江西省'=>'南昌市', '贵州省'=>'贵阳市', '福建省'=>'福州市', '台湾省'=>'台北市', '云南省'=>'昆明市', '广东省'=>'广州市', '海南省'=>'海口市', '上海市'=>'上海', '北京市'=>'北京', '天津市'=>'天津', '重庆市'=>'重庆', '香港'=>'香港', '澳门'=>'澳门', '新疆'=>'乌鲁木齐市', '内蒙古'=>'呼和浩特市', '宁夏'=>'银川市', '西藏'=>'拉萨市', '广西'=>'南宁市' ); public $province = '北京';// 默认 public $city = '北京';// 默认 // 获取ip static function getIP(){ $ip = '127.0.0.1'; if(isset($_SERVER)){ if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if(isset($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; }else{ $ip = $_SERVER["REMOTE_ADDR"]; } }else{ if(getenv("HTTP_X_FORWARDED_FOR")){ $ip = getenv("HTTP_X_FORWARDED_FOR"); }else if(getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); }else{ $ip = getenv("REMOTE_ADDR"); } } return $ip; } public function setArea($addr){ // 分割省市 foreach($this->capital as $p => $c){ if(strpos($addr,$p) === 0){ $this->province = str_replace(array('省','市'),'',$p); $this->city = substr($addr,strlen($p)); if($this->city == ''){ $this->city = $c;// 默认省会 } } } } public function getAreaCode(){ $code = '101010100';// 默认北京 // 到本地地区库里找中国气象地区编码,可以把序列化数据直接反序列化后放到本文件里,会更快 $area = file_get_contents("area.php"); $area = unserialize($area); //print_r($area); $province = array(); foreach($area as $k => $v){ $province[$k] = $v['level0']; } $pid = array_search($this->province,$province); if($pid !== false){ $citys = $area[$pid]['level1']; $cityid = array_search($this->city,$citys); if($cityid !== false){ $code = '101'.$cityid.'01'; }else{ $code = '101'.$pid.'0101'; } } return $code; } } /* 纯真ip库返回的地区格式如下: xx省xx市 或者 xx市 如果是自治区则为:新疆乌鲁木齐市,分割省市极麻烦 */ $weather = new weather(); // php的扩展iplocation $addrarr = iplocation_fetch(weather::getIP()); $addr = iconv('gbk','utf-8',$addrarr['province']); $weather->setArea($addr); $code = $weather->getAreaCode(); // 尝试从redis里读取天气数据 $redis_host = '127.0.0.1'; $redis_port = 6379; /* redis connect */ $redis = new Redis(); $redis->connect($redis_host, $redis_port); $data = $redis->get($code); if(!$data){ // 从中国气象去抓,并存入redis $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://m.weather.com.cn/data/{$code}.html"); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt ($curl, CURLOPT_TIMEOUT, 30 ); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); if($data){ $redis->set($code,$data); $redis->EXPIRE($code,3600); }else{ echo 'weather.com.cn 连接超时'; } } print_r($data);
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前ByDDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用