欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP天气API接口

程序员文章站 2022-05-20 15:24:28
...
中国天气网的API还每次还要先去判断ID,再获取天气信息,觉得有点麻烦,所以自己做了一个PHP一部搞定的。还有一个农历API。

code=='1'){
	   return false;
 	}
 	$data = $ip->data->city;
	return $data;	
}

function getWeather($cityId)
{
	$url="http://m.weather.com.cn/data/".$cityId.".html";
	$weather=json_decode(file_get_contents($url));
	return $weather;	
}
function json_to_array($web){
	$arr=array();
	foreach($web as $k=>$w){
		if(is_object($w)) $arr[$k]=json_to_array($w); //判断类型是不是object
		else $arr[$k]=$w;
	}
	return $arr;
}
$city = getCity(getIP());
$city = str_split($city,strlen($city)-3);
$city =$city[0];
$cityUrl = "http://evenle.com/wei/20130921/city.php";
$web=json_decode(file_get_contents($cityUrl));
$arr=json_to_array($web);
$weatherInfo = getWeather($arr[$city]);
echo('weather(');
echo(json_encode($weatherInfo));
echo(")");

?>

城市源码 http://www.bkjia.com/uploadfile/2013/0923/20130923081358704.rar



无标题文档
@charset "utf-8";
* {
	padding: 0;
	margin: 0;
	border: none;
	text-decoration: none;
	list-style: none;
	overflow: hidden;
}
input, button, select, textarea {
	outline: none;
}
textarea {
	font-size: 13px;
	resize: none;
}
body {
	background: #F2F2F2 url(http://imghao.qq.com/haoqq/v101/v1img/xs-bg.png) top center no-repeat;
}
.top {
	width: 100%;
	height: 65px;
}
.top_content {
	width: 960px;
	height: 65px;
	margin: 0 auto;
}
#calendarArea {
	width: 155px;
	height: 65px;
	float: left;
	cursor: pointer;
	padding-left: 15px;
}
#calendarArea:hover, #topWeatherArea:hover {
	background: url(http://imghao.qq.com/haoqq/v101/v1img/top-hover.png) top right;
}
.datepic {
	background-image: url(http://imghao.qq.com/haoqq/v101/v1img/pur-sprite.png);
	background-repeat: no-repeat;
	width: 31px;
	height: 32px;
	float: left;
	text-align: center;
	font-size: 16px;
	font-weight: bold;
	line-height: 32px;
	display: block;
	margin: 15px 10px 0 0;
	float: left;
}
#weekday {
	position: relative;
	top: 4px;
	color: #fff;
}
#calendarArea ul {
	float: left;
	color: #fff;
	height: 40px;
	padding-top: 13px;
	padding-left: 3px;
}
#calendarArea #lunarday {
	font-size: 16px;
	font-weight: bold;
}
#calendarArea #dateday {
	font-size: 14px;
}
#topWeatherArea {
	width: 165px;
	height: 65px;
	float: left;
	cursor: pointer;
	color: #fff;
	padding-left:10px;
}
.cityWrap {
	float: left;
	margin-top: 15px;
	padding-left:5px;
}
.weapic {
	width: 40px;
	height: 40px;
	background-image: url(http://imghao.qq.com/haoqq/v101/v1img/pur-sprite-wea.png);
	float: left;
	display: block;
	margin: 15px 5px 0 5px;
	background-repeat: no-repeat;
	display:none;
}
.cityInfo {
	float: left;
	margin-top: 15px;
}
.name{
	font-weight: bold;
	font-size:17px;
}
.info{
	font-size:14px;
}


lunarInfo[$year-$this->MIN_YEAR];
                if($year==$this->MIN_YEAR&&$monthgetLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));
        }

        /**
        * 将阴历转换为阳历
        * @param year 阴历-年
        * @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0
        * @param date 阴历-日
        */
        function convertLunarToSolar($year,$month,$date){
                $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
                $between = $this->getDaysBetweenLunar($year,$month,$date);
                $res = mktime(0,0,0,$yearData[1],$yearData[2],$year);

                $res = date('Y-m-d',$res+$between*24*60*60);

                $day        = split_date($res);
                $year        = $day[0];
                $month= $day[1];
                $day        = $day[2];

                return array($year, $month, $day);
        }

        /**
         * 判断是否是闰年
         * @param year
         */
        function isLeapYear($year){
                return (($year%4==0 && $year%100 !=0) || ($year%400==0));
        }

        /**
         * 获取干支纪年
         * @param year
         */
        function getLunarYearName($year){
                 $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');
                 $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');

                 $year = $year.'';
                 return $sky[$year{3}].$earth[$year%12];
        }

        /**
         * 根据阴历年获取生肖
         * @param year 阴历年
         */
        function getYearZodiac($year){
                 $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');
                 return $zodiac[$year%12];
        }

        /**
         * 获取阳历月份的天数
         * @param year 阳历-年
         * @param month 阳历-月
         */
        function getSolarMonthDays($year,$month){
                 $monthHash = array('1'=>31,'2'=>$this->isLeapYear($year)?29:28,'3'=>31,'4'=>30,'5'=>31,'6'=>30,'7'=>31,'8'=>31,'9'=>30,'10'=>31,'11'=>30,'12'=>31);
                 return $monthHash["$month"];
        }


        /**
         * 获取阴历月份的天数
         * @param year 阴历-年
         * @param month 阴历-月,从一月开始
         */
        function getLunarMonthDays($year,$month){
                 $monthData = $this->getLunarMonths($year);
                 return $monthData[$month-1];
        }

        /**
         * 获取阴历每月的天数的数组
         * @param year
         */
        function getLunarMonths($year){

                $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
                $leapMonth = $yearData[0];

                $bit = decbin($yearData[3]);
                for ($i = 0; $i lunarInfo[$year-$this->MIN_YEAR];
                $monthArray = $this->getLunarYearMonths($year);
                $len = count($monthArray);
                return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);
        }

        function getLunarYearMonths($year){
                 //debugger;
                $monthData = $this->getLunarMonths($year);
                $res=array();
                $temp=0;
                $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
                $len = ($yearData[0]==0?12:13);
                for($i=0;$ilunarInfo[$year-$this->MIN_YEAR];
                return $yearData[0];
        }

        /**
         * 计算阴历日期与正月初一相隔的天数
         * @param year
         * @param month
         * @param date
         */
        function getDaysBetweenLunar($year,$month,$date){
                $yearMonth = $this->getLunarMonths($year);

                $res=0;
                for($i=1;$i0? $year : ($year-1);
                        $yearMonth = $this->getLunarYearMonths($year);
                        $leapMonth = $this->getLeapMonth($year);
                        $between = $between>0?$between : ($this->getLunarYearDays($year)+$between);

                        for($i=0;$igetCapitalNum($t- 1,true)):$this->getCapitalNum(($leapMonth!=0&&$leapMonth+1getCapitalNum($e,false));
                }
                array_push($lunarArray,$this->getLunarYearName($year));//天干地支
                array_push($lunarArray,$t,$e);
                array_push($lunarArray,$this->getYearZodiac($year));//12生肖
                array_push($lunarArray,$leapMonth);//闰几月
                return $lunarArray;
        }

        /**
         * 获取数字的阴历叫法
         * @param num 数字
         * @param isMonth 是否是月份的数字
         */
        function getCapitalNum($num,$isMonth){
                $isMonth = $isMonth || false;
                $dateHash=array('0'=>'','1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'七','8'=>'八','9'=>'九','10'=>'十 ');
                $monthHash=array('0'=>'','1'=>'正月','2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'冬月','12'=>'腊月');
                $res='';

                if($isMonth){
                        $res = $monthHash[$num];
                }else{
                        if($num10&&$num20&&$num
convertSolarToLunar($year, $month, $day);
echo('lunar({"year":"'.$ldate[0].'","month":"'.$ldate[1].'","day":"'.$ldate[2].'","zodiac":"'.$ldate[6].'","sign":"'.$ldate[3].'"})');
?>