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 無盡。

熱門文章
刺客信條陰影:貝殼謎語解決方案
3 週前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
2 週前ByDDD
在哪裡可以找到原子中的起重機控制鑰匙卡
3 週前ByDDD
節省R.E.P.O.解釋(並保存文件)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影 - 如何找到鐵匠,解鎖武器和裝甲定制
4 週前ByDDD

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境