首页 php教程 PHP源码 一个高效的根据IP自动显示天气预报的方案

一个高效的根据IP自动显示天气预报的方案

May 25, 2016 pm 05:05 PM
天气预报 方案 高效

php代码

<?php
class weather{
	// 省和省会
	private $capital = array(
		&#39;黑龙江省&#39;=>&#39;哈尔滨市&#39;,
		&#39;吉林省&#39;=>&#39;长春市&#39;,
		&#39;辽宁省&#39;=>&#39;沈阳市&#39;,
		&#39;河北省&#39;=>&#39;石家庄市&#39;,
		&#39;山西省&#39;=>&#39;太原市&#39;,
		&#39;山东省&#39;=>&#39;济南市&#39;,
		&#39;青海省&#39;=>&#39;西宁市&#39;,
		&#39;甘肃省&#39;=>&#39;兰州市&#39;,
		&#39;陕西省&#39;=>&#39;西安市&#39;,
		&#39;河南省&#39;=>&#39;郑州市&#39;,
		&#39;江苏省&#39;=>&#39;南京市&#39;,
		&#39;四川省&#39;=>&#39;成都市&#39;,
		&#39;湖北省&#39;=>&#39;武汉市&#39;,
		&#39;安徽省&#39;=>&#39;合肥市&#39;,
		&#39;浙江省&#39;=>&#39;杭州市&#39;,
		&#39;湖南省&#39;=>&#39;长沙市&#39;,
		&#39;江西省&#39;=>&#39;南昌市&#39;,
		&#39;贵州省&#39;=>&#39;贵阳市&#39;,
		&#39;福建省&#39;=>&#39;福州市&#39;,
		&#39;台湾省&#39;=>&#39;台北市&#39;,
		&#39;云南省&#39;=>&#39;昆明市&#39;,
		&#39;广东省&#39;=>&#39;广州市&#39;,
		&#39;海南省&#39;=>&#39;海口市&#39;,
		&#39;上海市&#39;=>&#39;上海&#39;,
		&#39;北京市&#39;=>&#39;北京&#39;,
		&#39;天津市&#39;=>&#39;天津&#39;,
		&#39;重庆市&#39;=>&#39;重庆&#39;,
		&#39;香港&#39;=>&#39;香港&#39;,
		&#39;澳门&#39;=>&#39;澳门&#39;,
		&#39;新疆&#39;=>&#39;乌鲁木齐市&#39;,
		&#39;内蒙古&#39;=>&#39;呼和浩特市&#39;,
		&#39;宁夏&#39;=>&#39;银川市&#39;,
		&#39;西藏&#39;=>&#39;拉萨市&#39;,
		&#39;广西&#39;=>&#39;南宁市&#39;
	);
	public $province = &#39;北京&#39;;// 默认
	public $city = &#39;北京&#39;;// 默认

	// 获取ip
	static function getIP(){
		$ip = &#39;127.0.0.1&#39;;
		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(&#39;省&#39;,&#39;市&#39;),&#39;&#39;,$p);
				$this->city = substr($addr,strlen($p));
				if($this->city == &#39;&#39;){
					$this->city = $c;// 默认省会
				}
			}
		}
	}
	public function getAreaCode(){
		$code = &#39;101010100&#39;;// 默认北京
		// 到本地地区库里找中国气象地区编码,可以把序列化数据直接反序列化后放到本文件里,会更快
		$area = file_get_contents("area.php");
		$area = unserialize($area);
		//print_r($area);
		$province = array();
		foreach($area as $k => $v){
			$province[$k] = $v[&#39;level0&#39;];
		}

		$pid = array_search($this->province,$province);
		if($pid !== false){
			$citys = $area[$pid][&#39;level1&#39;];
			$cityid = array_search($this->city,$citys);
			if($cityid !== false){
				$code = &#39;101&#39;.$cityid.&#39;01&#39;;
			}else{
				$code = &#39;101&#39;.$pid.&#39;0101&#39;;
			}
		}
		return $code;
	}
}

/* 
	纯真ip库返回的地区格式如下:
	xx省xx市 或者 xx市 如果是自治区则为:新疆乌鲁木齐市,分割省市极麻烦
*/

$weather = new weather();
// php的扩展iplocation
$addrarr = iplocation_fetch(weather::getIP());
$addr = iconv(&#39;gbk&#39;,&#39;utf-8&#39;,$addrarr[&#39;province&#39;]);
$weather->setArea($addr);
$code = $weather->getAreaCode();

// 尝试从redis里读取天气数据
$redis_host = &#39;127.0.0.1&#39;;
$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 &#39;weather.com.cn 连接超时&#39;;
	}
}
print_r($data);
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C语言的特点和优势:为什么它成为最受欢迎的编程语言之一? C语言的特点和优势:为什么它成为最受欢迎的编程语言之一? Feb 23, 2024 am 08:39 AM

C语言的特点和优势:为什么它成为最受欢迎的编程语言之一?作为一门通用的高级编程语言,C语言具有许多独特的特点和优势,这也是为什么它成为最受欢迎的编程语言之一的原因。本文将探讨C语言的特点和优势,以及它在各个领域的广泛应用。首先,C语言具有简洁的语法和清晰的结构。相比其他编程语言而言,C语言的语法相对简单,易于理解和学习。它采用了自然语言的特点,使得编程人员能

华为手机天气预报怎么设置在桌面 详细讲解:手机添加桌面小组件教程 华为手机天气预报怎么设置在桌面 详细讲解:手机添加桌面小组件教程 Mar 02, 2024 pm 12:34 PM

自2021年12月开始华为&荣耀手机上线了万象桌面小组件的功能。为诸多用户手机桌面添加很多便捷功能、视觉优化的桌面控件等等;到今年8月两大商家平台也开放了运动健康数据、天气数据、音乐数据、系统数据等等,让用户在手机桌面的交互操作更加方便快捷还具备较多趣味性,让用户自己DIY创意组合自己的个性桌面。添加小组件后的手机桌面最近,许多华为手机用户反映他们对于如何在华为和荣耀手机上添加桌面小组件的操作方式不太清楚,抱怨这一过程过于复杂和繁琐。为了帮助大家解决这个问题,钱舒娴准备了详细的操作流程,希望能够

C盘空间告急!5种高效清理方法大揭秘! C盘空间告急!5种高效清理方法大揭秘! Mar 26, 2024 am 08:51 AM

C盘空间告急!5种高效清理方法大揭秘!在使用电脑的过程中,不少用户会遇到C盘空间告急的情况,尤其是在存储或安装大量文件后,C盘的可用空间会迅速减少,进而影响电脑性能和运行速度。此时,对C盘进行清理是十分必要的。那么,该如何高效清理C盘呢?接下来,本文将揭示5种高效的清理方法,帮助您轻松解决C盘空间告急的问题。一、清理临时文件临时文件是电脑在运行时产生的一些暂

对比Python和C++学习成本:哪个更值得投入? 对比Python和C++学习成本:哪个更值得投入? Mar 25, 2024 pm 10:24 PM

Python和C++是两种流行的编程语言,各有其优势和劣势。对于希望学习编程的人来说,选择学习Python还是C++往往是一个重要决定。本文将探讨Python和C++的学习成本,并讨论哪种语言更值得投入时间和精力。首先,让我们从Python开始。Python是一种高级、解释型的编程语言,以其简单易学、代码清晰、语法简洁等特点而闻名。相比于C++,Python

指导高效转换golang编码实践 指导高效转换golang编码实践 Feb 20, 2024 am 11:09 AM

标题:Go语言编码转换高效实践指南在日常的软件开发中,我们经常会遇到需要对不同编码的文本进行转换的需求。Go语言作为一种高效、现代化的编程语言,提供了丰富的标准库和内置函数,使得实现文本编码转换变得非常简单和高效。本文将介绍如何在Go语言中进行编码转换的实践指南,并提供具体的代码示例。1.UTF-8编码与字符串转换在Go语言中,字符串默认采用UTF-8编码

深入了解Go语言的功能与特点 深入了解Go语言的功能与特点 Mar 21, 2024 pm 05:42 PM

Go语言的功能与特点Go语言,又称Golang,是一种由Google开发的开源编程语言,设计初衷是为了提升编程效率和可维护性。自诞生以来,Go语言在编程领域展现出了独特的魅力,受到了广泛的关注和认可。本文将深入探讨Go语言的功能与特点,并通过具体的代码示例来展示其强大之处。原生并发支持Go语言天生支持并发编程,通过goroutine和channel的机制实现

桌面天气预报怎么恢复 桌面天气预报怎么恢复 Feb 24, 2024 pm 06:31 PM

桌面会有一个天气预报的功能,那么桌面天气预报怎么恢复呢?用户们需要在桌面里点击窗口工具,然后点击天气,选择一个天气组件就可以了。这篇桌面天气预报恢复方法介绍就能告诉大家具体的操作方法,下面就是详细介绍,赶紧看看吧!桌面天气预报怎么恢复答:在桌面的小组件里选择天气,然后添加到桌面。具体方法:ios方法:1、长按苹果屏幕,然后点击左上的+号。2、在里面搜索天气,打开这个应用。3、然后选择天气组件的样式,点击添加小组件。4、之后点击右上的完成就可以了。安卓方法:1、长按屏幕,点击窗口小工具。2、点击天

深度挖掘:利用Go语言构建高效爬虫 深度挖掘:利用Go语言构建高效爬虫 Jan 30, 2024 am 09:17 AM

深入探索:使用Go语言进行高效爬虫开发引言:随着互联网的飞速发展,信息的获取变得越来越便捷。而爬虫作为一种自动化获取网站数据的工具,日益受到人们的关注和重视。在众多的编程语言中,Go语言由于其并发性高、性能强大等优势,成为了很多开发者首选的爬虫开发语言。本文将探索使用Go语言进行高效爬虫开发,并提供具体的代码示例。一、Go语言爬虫开发的优势并发性高:Go语言

See all articles