全國(guó)天氣預(yù)報(bào)資料介面呼叫PHP範(fàn)例
Oct 22, 2016 am 12:00 AM基於PHP的聚合資料全國(guó)天氣預(yù)報(bào)API服務(wù)請(qǐng)求的程式碼範(fàn)例
本程式碼範(fàn)例是基於PHP的聚合資料全國(guó)天氣預(yù)報(bào)API服務(wù)請(qǐng)求的程式碼範(fàn)例,使用前你需要:
①:透過(guò)https://www.juhe.cn/docs/api/id/39 申請(qǐng)一個(gè)天氣預(yù)報(bào)API的appkey
範(fàn)例程式碼包含了取得支援城市清單、根據(jù)城市取得天氣預(yù)報(bào)、根據(jù)IP位址請(qǐng)求天氣預(yù)報(bào)、根據(jù)GPS座標(biāo)請(qǐng)求天氣、城市3小時(shí)天氣預(yù)報(bào)的實(shí)現(xiàn)。範(fàn)例程式碼主要是解析一些常用字段,如需要完整或其他未包含的字段,可以自行參考官方的接口,進(jìn)行修改。
首先:引入封裝好的天氣呼叫類別 header('Content-type:text/html;charset=utf-8');??<br>
include?'class.juhe.weather.php';?//引入天氣請(qǐng)求類別??<br>
??<br>
//介面基本資訊配置??<br>
$appkey?=?'**********';?//您申請(qǐng)的天氣查詢appkey??<br>
$weather?=?new?weather($appkey);??
一、取得支援的城市清單
由於支援的城市清單基本上不會(huì)這麼變化,大家可以取得到清單後面內(nèi)建到自己的應(yīng)用程式中,就不用每次都去請(qǐng)求API。 $citysResult?=?$weather->getCitys();??<br>
if($citysResult['error_code']?==?0){????//以下可依實(shí)際業(yè)務(wù)需求,並自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????$citys?=?$citysResult['result'];??<br>
????foreach($citys?as?$ckey?=>$c){??<br>
echo?"ID:".$c['id'].",省份:".$c['province'].",城市:".$c['city'].",區(qū)域:".$c ['district']."<br>";??<br>
????}??<br>
}else{????//以下可依實(shí)際業(yè)務(wù)需求,自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????echo?$citysResult['error_code'].":".$citysResult['reason'];??<br>
}??
二、依城市/ID取得天氣預(yù)報(bào)
透過(guò)城市的名稱或城市的ID來(lái)取得天氣預(yù)報(bào),城市id就是取得城市支持清單中回傳的欄位ID $cityWeatherResult?=?$weather->getWeather('蘇州');??<br>
if($cityWeatherResult['error_code']?==?0){????//以下可依實(shí)際業(yè)務(wù)需求,並自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????$data?=?$cityWeatherResult['result'];??<br>
????echo?"=======當(dāng)前天氣實(shí)況=======<br>";??<br>
????echo?"溫度:".$data['sk']['temp']."????";??<br>
????echo?"風(fēng)向:".$data['sk']['wind_direction']."????(".$data['sk']['wind_strength'].")";??<br>
????echo?"濕度:".$data['sk']['humidity']."????";??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======未來(lái)幾天天氣預(yù)報(bào)=======<br>";??<br>
????foreach($data['future']?as?$wkey?=>$f){??<br>
echo?"日期:".$f['date']."?".$f['week']."?".$f['weather']."?".$f['temperature']."<br>";??<br>
????}??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======相關(guān)天氣指數(shù)=======<br>";??<br>
????echo?"穿衣指數(shù):".$data['today']['dressing_index']."?,?".$data['today']['dressing_advice']."<br>";??<br>????echo?"紫外線強(qiáng)度:".$data['today']['uv_index']."<br>";??<br>
????echo?"舒適指標(biāo):".$data['today']['comfort_index']."<br>";??<br>
????echo?"洗車指數(shù):".$data['today']['wash_index'];??<br>
????echo?"<br><br>";??<br>
??<br>
}else{??<br>
????echo?$cityWeatherRe
三、依使用者的IP位址請(qǐng)求對(duì)應(yīng)的天氣預(yù)報(bào)
透過(guò)使用者的IP位址取得使用者所在地的天氣預(yù)報(bào),由於IP位址解析可能會(huì)有誤差,所以有時(shí)定位到的城市不一定是使用者實(shí)際的所在地。 $ipWeatherResult?=?$weather->getWeatherByIP('58.215.154.128');??<br>
if($ipWeatherResult['error_code']?==?0){????//以下可依實(shí)際業(yè)務(wù)需求,並自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????$data?=?$ipWeatherResult['result'];??<br>
????echo?"=======目前城市=======<br>";??<br>
????echo?$data['today']['city'];??<br>
????echo?"<br><br>";??<br>
????echo?"=======當(dāng)前天氣實(shí)況=======<br>";??<br>
????echo?"溫度:".$data['sk']['temp']."????";??<br>
????echo?"風(fēng)向:".$data['sk']['wind_direction']."????(".$data['sk']['wind_strength'].")";??<br>
????echo?"濕度:".$data['sk']['humidity']."????";??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======未來(lái)幾天天氣預(yù)報(bào)=======<br>";??<br>
????foreach($data['future']?as?$wkey?=>$f){??<br>
echo?"日期:".$f['date']."?".$f['week']."?".$f['weather']."?".$f['temperature']."<br>";??<br>
????}??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======相關(guān)天氣指數(shù)=======<br>";??<br>
????echo?"穿衣指數(shù):".$data['today']['dressing_index']."?,?".$data['today']['dressing_advice']."<br>";??<br>
????echo?"紫外線強(qiáng)度:".$data['today']['uv_index']."<br>";??<br>
????echo?"舒適指標(biāo):".$data['today']['comfort_index']."<br>";??<br>
????echo?"洗車指數(shù):".$data['today']['wash_index'];??<br>
????echo?"<br><br>";??<br>
??<br>
}else{??<br>
????echo?$ipWeatherResult['error_code'].":".$ipWeatherResult['reason'];??<br>
}?
四、依據(jù)GPS座標(biāo)來(lái)取得對(duì)應(yīng)地區(qū)的天氣
無(wú)論透過(guò)二、三、四取得的天氣預(yù)報(bào),因?yàn)榫酆细袷蕉际墙y(tǒng)一的,所以解析的流程是一致的,所以沒(méi)有額外的操作,只是傳參上有點(diǎn)的差異。 $geoWeatherResult?=?$weather->getWeatherByGeo(116.401394,39.916042);??<br>
if($geoWeatherResult['error_code']?==?0){????//以下可依實(shí)際業(yè)務(wù)需求,並自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>????$data?=?$geoWeatherResult['result'];??<br>
????echo?"=======目前城市=======<br>";??<br>
????echo?$data['today']['city'];??<br>
????echo?"<br><br>";??<br>
????echo?"=======當(dāng)前天氣實(shí)況=======<br>";??<br>
????echo?"溫度:".$data['sk']['temp']."????";??<br>
????echo?"風(fēng)向:".$data['sk']['wind_direction']."????(".$data['sk']['wind_strength'].")";??<br>
????echo?"濕度:".$data['sk']['humidity']."????";??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======未來(lái)幾天天氣預(yù)報(bào)=======<br>";??<br>
????foreach($data['future']?as?$wkey?=>$f){??<br>
echo?"日期:".$f['date']."?".$f['week']."?".$f['weather']."?".$f['temperature']."<br>";??<br>
????}??<br>
????echo?"<br><br>";??<br>
??<br>
????echo?"=======相關(guān)天氣指數(shù)=======<br>";??<br>
????echo?"穿衣指數(shù):".$data['today']['dressing_index']."?,?".$data['today']['dressing_advice']."<br>";??<br>
????echo?"紫外線強(qiáng)度:".$data['today']['uv_index']."<br>";??<br>
????echo?"舒適指標(biāo):".$data['today']['comfort_index']."<br>";??<br>
????echo?"洗車指數(shù):".$data['today']['wash_index'];??<br>
????echo?"<br><br>";??<br>
??<br>
}else{??<br>
????echo?$geoWeatherResult['error_code'].":".$geoWeatherResult['reason'];??<br>
}??
五、取得城市三小時(shí)預(yù)報(bào)
是城市每3小時(shí)的天氣狀況 $forecastResult?=?$weather->getForecast("蘇州");??<br>
if($forecastResult['error_code']?==?0){????//以下可依實(shí)際業(yè)務(wù)需求,並自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????$data?=?$forecastResult['result'];??<br>
????foreach($data?as?$key?=>?$d){??<br>
echo?"日期:".$d['date']."?(".$d['sh']."點(diǎn)-".$d['eh']."點(diǎn))??".$d['weather' ]."?".$d['temp1']."~".$d["temp2"]."<br>";??<br>
????}??<br>
}else{????//以下可依實(shí)際業(yè)務(wù)需求,自行改寫??<br>
////////////////////////////////////////////////// ////////////////////??<br>
????echo?$forecastResult['error_code'].":".$forecastResult['reason'];??<br>
}??
透過(guò)上面的範(fàn)例程式碼,大家應(yīng)該對(duì)如果呼叫聚合資料天氣預(yù)報(bào)API有了一個(gè)大致的了解。
最後放上 class.juhe.weather.php完整程式碼:<!--?php??<br />
//?+----------------------------------------------- -----------------------??<br />
//?|?JuhePHP?[?NO?ZUO?NO?DIE?]??<br />
//?+----------------------------------------------- -----------------------??<br />//?|?Copyright?(c)?2010-2015?http://juhe.cn?All?rights?reserved.??<br />
//?+----------------------------------------------- -----------------------??<br />
//?|?Author:?Juhedata?<info@juhe.cn-->??<br>
//?+----------------------------------------------- -----------------------??<br>
??<br>
//----------------------------------??<br>
//?聚合資料天氣預(yù)報(bào)介面請(qǐng)求類別??<br>
//----------------------------------??<br>
class?weather{??<br>
????private?$appkey?=?false;?//申請(qǐng)的聚合天氣預(yù)報(bào)APPKEY??<br>
??<br>
????private?$cityUrl?=?'http://v.juhe.cn/weather/citys';?//城市清單API?URL??<br>
??<br>
????private?$weatherUrl?=?'http://v.juhe.cn/weather/index';?//依城市請(qǐng)求天氣API?URL??<br>
??<br>
????private?$weatherIPUrl?=?'http://v.juhe.cn/weather/ip';?//依IP位址請(qǐng)求天氣API?URL??<br>
??<br>
????private?$weatherGeoUrl?=?'http://v.juhe.cn/weather/geo';?//依據(jù)GPS座標(biāo)取得天氣API?URL??<br>
??<br>
????private?$forecast3hUrl?=?'http://v.juhe.cn/weather/forecast3h';?//取得城市天氣3小時(shí)預(yù)報(bào)API?URL??<br>
??<br>
????public?function?__construct($appkey){??<br>
????????$this->appkey?=?$appkey;??<br>
????}??<br>
??<br>
????/**?<br>
?????*?取得天氣預(yù)報(bào)支援城市清單?<br>
?????*?@return?array?<br>
?????*/??<br>
????public?function?getCitys(){??<br>
????????$params?=?'key='.$this->appkey;??<br>
????????$content?=?$this->juhecurl($this->cityUrl,$params);??<br>
????????return?$this->_returnArray($content);??<br>
????}??<br>
??<br>
????/**?<br>
?????*?依城市名稱/ID取得詳細(xì)天氣預(yù)報(bào)?<br>
?????*?@param?string?$city?[城市名稱/ID]?<br>
?????*?@return?array?<br>
?????*/??<br>
????public?function?getWeather($city){??<br>
????????$paramsArray?=?array(??<br>
????????????'key'???=>?$this->appkey,??<br>
????????????'cityname'??=>?$city,??<br>
????????????'format'????=>?2??<br>
????????);??<br>
????????$params?=?http_build_query($paramsArray);??<br>
????????$content?=?$this->juhecurl($this->weatherUrl,$params);??<br>
????????return?$this->_returnArray($content);??<br>
????}??<br>
??<br>
????/**?<br>
?????*?依IP位址取得當(dāng)?shù)靥鞖忸A(yù)報(bào)?<br>
?????*?@param?string?$ip?[IP位址]?<br>
?????*?@return?array?<br>
?????*/??<br>
????public?function?getWeatherByIP($ip){??<br>
?????????$paramsArray?=?array(??<br>
????????????'key'???=>?$this->appkey,??<br>????????????'ip'??=>;?$ip,??<br>
????????????'格式』????=>?2??<br>
????????);??<br>
????????$params=http_build_query($paramsArray);??<br>
????????$content = $this->juhecurl($this->weatherIPUrl,$params);??<br>
????????返回 $this->_returnArray($content);??<br>
????}??<br>
??<br>
????/**?<br>
?????*?依據(jù)GPS座標(biāo)取得當(dāng)?shù)氐奶鞖忸A(yù)報(bào)?<br>
?????*?@param??string?$lon?[經(jīng)度]?<br>
?????*?@param??string?$lat?[緯度]?<br>
?????*?@return?array?<br>
?????*/??<br>
????公用函數(shù) getWeatherByGeo($lon,$lat){??<br>
????????$paramsArray?=?數(shù)組(??<br>
????????????'鑰匙'???=>?$this->appkey,??<br>
????????????'lon'??=>;?$lon,??<br>
????????????'緯度'???=>?$lat,??<br>
????????????'格式』????=>?2??<br>
????????);??<br>
????????$params=http_build_query($paramsArray);??<br>
????????$content = $this->juhecurl($this->weatherGeoUrl,$params);??<br>
????????返回 $this->_returnArray($content);??<br>
????}??<br>
??<br>
????/**?<br>
?????*?取得城市三小時(shí)預(yù)報(bào)?<br>
?????*?@param??string?$city?[城市名稱]?<br>
?????*?@return?array?<br>
?????*/??<br>
????公用函數(shù) getForecast($city){??<br>
????????$paramsArray?=?數(shù)組(??<br>
????????????'鑰匙'???=>?$this->appkey,??<br>
????????????'城市名稱' =>?$城市,<br>
????????????'格式』????=>?2??<br>
????????);??<br>
????????$params=http_build_query($paramsArray);??<br>
????????$content = $this->juhecurl($this->forecast3hUrl,$params);??<br>
????????返回 $this->_returnArray($content);??<br>
????}??<br>
??<br>
????/**?<br>
?????*?將JSON內(nèi)容轉(zhuǎn)換為數(shù)據(jù),並回傳?<br>
?????*?@param?string?$content?[內(nèi)容]?<br>
?????*?@return?array?<br>
?????*/??<br>
????公用函數(shù)_returnArray($content){??<br>
????????回 json_decode($content,true);??<br>
????}??<br>
??<br>
????/**?<br>
?????* 請(qǐng)求介面回傳內(nèi)容<br>
?????*?@param??string?$url?[請(qǐng)求的網(wǎng)址]?<br>
?????* @param string $params[請(qǐng)求的參數(shù)] <br>?????* @param int $ipost [是否採(cǎi)用POST形式] <br>
?????*?@return??字串<br>
?????*/??<br>
????公用函數(shù) juhecurl($url,$params=false,$ispost=0){??<br>
????????$httpInfo = 數(shù)組();??<br>
????????$ch=curl_init();??<br>
??<br>
????????curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);??<br>
????????curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/41.0.2272.118Safari/537.36');??<br>
????????curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);??<br>
????????curl_setopt($ch, CURLOPT_TIMEOUT, 30);??<br>
????????curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);??<br>
????????if($ispost)??<br>
????????{??<br>
????????????curl_setopt($ch,CURLOPT_POST,true);??<br>
????????????curl_setopt($ch,CURLOPT_POSTFIELDS,$params);??<br>
????????????curl_setopt($ch,CURLOPT_URL,$url);??<br>
????????}??<br>
????????否則<br>
????????{??<br>
????????????if($params){??<br>
????????????????curl_setopt($ch,CURLOPT_URL,$url.'?'.$params);??<br>
????????????}其他{??<br>
????????????????curl_setopt($ch,CURLOPT_URL,$url);??<br>
????????????}??<br>
????????}??<br>
????????$回應(yīng)=curl_exec($ch);??<br>
????????if ($response === FALSE) {??<br>
????????????//echo「cURL 錯(cuò)誤:」。
????????????回傳錯(cuò)誤;??<br>
????????}??<br>
????????$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);??<br>
????????$httpInfo=array_merge($httpInfo,curl_getinfo($ch));??<br>
????????捲曲_關(guān)閉($ch);??<br>
????????回$響應(yīng);??<br>
????}??<br>
??<br>
}??<br>

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

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

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

《Go語(yǔ)言程式設(shè)計(jì)實(shí)例:Web開(kāi)發(fā)中的程式碼範(fàn)例》隨著網(wǎng)路的快速發(fā)展,Web開(kāi)發(fā)已成為各行業(yè)中不可或缺的一部分。作為一門功能強(qiáng)大且效能優(yōu)越的程式語(yǔ)言,Go語(yǔ)言在Web開(kāi)發(fā)中越來(lái)越受到開(kāi)發(fā)者們的青睞。本文將透過(guò)具體的程式碼範(fàn)例,介紹如何利用Go語(yǔ)言進(jìn)行Web開(kāi)發(fā),讓讀者更能理解並運(yùn)用Go語(yǔ)言來(lái)建立自己的Web應(yīng)用。 1.簡(jiǎn)單的HTTP伺服器首先,讓我們從一個(gè)

華為雲(yún)端邊緣運(yùn)算對(duì)接指南:Java程式碼範(fàn)例快速實(shí)現(xiàn)介面隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展和邊緣運(yùn)算的興起,越來(lái)越多的企業(yè)開(kāi)始關(guān)注邊緣運(yùn)算的應(yīng)用。華為雲(yún)端提供了邊緣運(yùn)算服務(wù),為企業(yè)提供了高可靠的運(yùn)算資源和便利的開(kāi)發(fā)環(huán)境,使得邊緣運(yùn)算應(yīng)用更容易實(shí)現(xiàn)。本文將介紹如何透過(guò)Java程式碼快速實(shí)現(xiàn)華為雲(yún)端邊緣運(yùn)算的介面。首先,我們需要準(zhǔn)備好開(kāi)發(fā)環(huán)境。確保你已經(jīng)安裝了Java開(kāi)發(fā)工具包(

了解Python程式設(shè)計(jì)的入門程式碼範(fàn)例Python是一種簡(jiǎn)單易學(xué),功能強(qiáng)大的程式語(yǔ)言。對(duì)於初學(xué)者來(lái)說(shuō),了解Python程式設(shè)計(jì)的入門級(jí)程式碼範(fàn)例是非常重要的。本文將為您提供一些具體的程式碼範(fàn)例,幫助您快速入門。列印HelloWorldprint("HelloWorld")這是Python中最簡(jiǎn)單的程式碼範(fàn)例。 print()函數(shù)用於將指定的內(nèi)容輸出

Java冒泡排序最簡(jiǎn)單的程式碼範(fàn)例冒泡排序是一種常見(jiàn)的排序演算法,它的基本想法是透過(guò)相鄰元素的比較和交換來(lái)將待排序序列逐步調(diào)整為有序序列。以下是一個(gè)簡(jiǎn)單的Java程式碼範(fàn)例,示範(fàn)如何實(shí)作冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

如何使用PHP編寫庫(kù)存管理系統(tǒng)中的庫(kù)存分倉(cāng)管理功能碼庫(kù)存管理是許多企業(yè)中不可或缺的一部分。對(duì)於擁有多個(gè)倉(cāng)庫(kù)的企業(yè)來(lái)說(shuō),庫(kù)存分倉(cāng)管理功能尤其重要。透過(guò)合理管理和追蹤庫(kù)存,企業(yè)可以實(shí)現(xiàn)不同倉(cāng)庫(kù)之間的庫(kù)存調(diào)撥,優(yōu)化營(yíng)運(yùn)成本,改善協(xié)同效率。本文將介紹如何使用PHP編寫庫(kù)存分倉(cāng)管理功能的程式碼,並為您提供相關(guān)的程式碼範(fàn)例。一、建立資料庫(kù)在開(kāi)始編寫庫(kù)存分倉(cāng)管理功能的程式碼之

PHP變數(shù)儲(chǔ)存程式運(yùn)行期間的值,對(duì)於建立動(dòng)態(tài)且互動(dòng)的WEB應(yīng)用程式至關(guān)重要。本文將深入探討php變量,並透過(guò)10個(gè)真實(shí)的範(fàn)例展示它們的實(shí)際應(yīng)用。 1.儲(chǔ)存使用者輸入$username=$_POST["username"];$passWord=$_POST["password"];此範(fàn)例從表單提交中提取使用者名稱和密碼,並將其儲(chǔ)存在變數(shù)中以供進(jìn)一步處理。 2.設(shè)定配置值$database_host="localhost";$database_username="username";$database_pa

標(biāo)題:從入門到精通:Go語(yǔ)言中常用資料結(jié)構(gòu)的程式碼實(shí)作資料結(jié)構(gòu)在程式設(shè)計(jì)中起著至關(guān)重要的作用,它是程式設(shè)計(jì)的基礎(chǔ)。在Go語(yǔ)言中,有許多常用的資料結(jié)構(gòu),掌握這些資料結(jié)構(gòu)的實(shí)作方式對(duì)於成為優(yōu)秀的程式設(shè)計(jì)師至關(guān)重要。本文將介紹Go語(yǔ)言中常用的資料結(jié)構(gòu),並給出對(duì)應(yīng)的程式碼範(fàn)例,幫助讀者從入門到精通這些資料結(jié)構(gòu)。 1.數(shù)組(Array)數(shù)組是一種基本的資料結(jié)構(gòu),是一組相同類型

Java選擇排序法程式碼編寫指南及範(fàn)例選擇排序是一種簡(jiǎn)單直觀的排序演算法,其想法是每次從未排序的元素中選擇最小(或最大)的元素進(jìn)行交換,直到所有元素排序完成。本文將提供選擇排序的程式碼編寫指南,並附上具體的Java範(fàn)例程式碼。演算法原理選擇排序的基本原理是將待排序數(shù)組分為已排序和未排序兩部分,每次從未排序部分選擇最?。ɑ蜃畲螅┑脑兀瑢⑵浞诺揭雅判虿糠值哪┪?。重複上述
