PHP 기반 국가 일기예보 API 서비스 요청 코드 샘플
본 코드 샘플은 PHP 기반 집계 데이터 전국 일기예보 API 서비스 요청을 위한 코드 샘플입니다.
①: https://www.juhe.cn/docs/api/id/39
에서 일기예보 API 앱키를 신청하세요.
샘플 코드에는 지원되는 도시 목록 가져오기, 도시 기반 일기 예보 가져오기, IP 주소 기반 일기 예보 요청, GPS 좌표 기반 날씨 요청, 도시별 3시간 일기 예보 구현이 포함되어 있습니다. 도시. 샘플 코드는 주로 일부 공통 필드를 구문 분석합니다. 전체 필드나 포함되지 않은 다른 필드가 필요한 경우 공식 인터페이스를 참조하여 수정할 수 있습니다.
먼저, 캡슐화된 날씨 호출 클래스 header('Content-type:text/html;charset=utf-8'); <br>
include 'class.juhe.weather.php'; //引入天气请求类 <br>
<br>
//接口基本信息配置 <br>
$appkey = '**********'; //您申请的天气查询appkey <br>
$weather = new weather($appkey);
header('Content-type: text/html;charset=utf-8')를 소개합니다.
include 'class.juhe.weather.php'; //날씨 요청 클래스 소개
$citysResult = $weather->getCitys(); <br>
if($citysResult['error_code'] == 0){ //以下可根据实际业务需求,自行改写 <br>
////////////////////////////////////////////////////////////////////// <br>
$citys = $citysResult['result']; <br>
foreach($citys as $ckey =>$c){ <br>
echo "ID:".$c['id'].",省份:".$c['province'].",城市:".$c['city'].",区域:".$c['district']."<br>"; <br>
} <br>
}else{ //以下可根据实际业务需求,自行改写 <br>
////////////////////////////////////////////////////////////////////// <br>
echo $citysResult['error_code'].":".$citysResult['reason']; <br>
}
//인터페이스 기본정보 구성
$appkey = '************'; //신청하신 날씨 조회 앱키
$weather = new Weather($appkey)
1. 지원되는 도시 목록 가져오기
지원되는 도시 목록은 기본적으로 이렇게 변하지 않기 때문에, 목록을 얻어서 자신의 애플리케이션에 구축할 수 있으므로 매번 API를 요청할 필요가 없습니다.
$citysResult = $weather->getCitys()
if($citysResult['error_code'] == 0){ //다음은 실제 비즈니스 요구에 따라 다시 작성될 수 있습니다
///////////////////////////////////////////////// //// /////////////////////
$citys = $citysResult['결과']
foreach($citys as $ckey =>$c){
echo "ID: ".$c['id'].", 주: ".$c['province'].", 도시: ".$c['city'].", 지역: ".$c ['지구']."
"
}
}else{ //다음은 실제 비즈니스 요구에 따라 다시 작성할 수 있습니다
///////////////////////////////////////////////// //// /////////////////////
echo $citysResult['error_code'].":".$citysResult['reason']
} 2. 도시/ID를 기준으로 일기예보 가져오기
도시 이름 또는 도시 ID를 통해 일기예보를 가져옵니다. 도시 ID는 도시 지원 목록에 반환된 필드 ID입니다.
$cityWeatherResult = $weather->getWeather('Suzhou'); >
if($cityWeatherResult['error_code'] == 0){ //다음은 실제 비즈니스 요구에 따라 다시 작성될 수 있습니다
///////////////////////////////////////////////// //// /////////////////////
$data = $cityWeatherResult['결과']
echo "========현재 날씨=======
";
echo "온도: ".$data['sk']['temp']." "
echo "풍향: ".$data['sk']['wind_direction']." (".$data['sk']['wind_strength'].")"
echo "습도:".$data['sk']['습도']." "
echo "
";
echo "========앞으로 며칠 동안의 일기예보=======
";
foreach($data['future'] as $wkey =>$f){
echo "날짜:".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temp']."< br>";
}
echo "
";
echo "========관련 날씨 지수=======
";
echo "드레싱 지수: ".$data['today']['dressing_index']." , ".$data['today']['dressing_advice']."
";echo "UV 강도:".$data['today']['uv_index']."
"
echo "편안함 지수:".$data['today']['comfort_index']."
"
echo "세차 지수:".$data['today']['wash_index']
echo "
";
}그밖에{
echo $cityWeatherRe
3. 사용자의 IP 주소를 기반으로 해당 일기예보를 요청합니다
사용자의 위치에 대한 일기예보는 사용자의 IP 주소를 통해 얻어집니다. IP 주소 확인에 오류가 있을 수 있으므로, 위치한 도시가 반드시 사용자의 실제 위치가 아닐 수도 있습니다.
$ipWeatherResult = $weather->getWeatherByIP('58.215.154.128') $ipWeatherResult = $weather->getWeatherByIP('58.215.154.128'); <br>
if($ipWeatherResult['error_code'] == 0){ //以下可根据实际业务需求,自行改写 <br>
////////////////////////////////////////////////////////////////////// <br>
$data = $ipWeatherResult['result']; <br>
echo "=======当前城市=======<br>"; <br>
echo $data['today']['city']; <br>
echo "<br><br>"; <br>
echo "=======当前天气实况=======<br>"; <br>
echo "温度:".$data['sk']['temp']." "; <br>
echo "风向:".$data['sk']['wind_direction']." (".$data['sk']['wind_strength'].")"; <br>
echo "湿度:".$data['sk']['humidity']." "; <br>
echo "<br><br>"; <br>
<br>
echo "=======未来几天天气预报=======<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 "=======相关天气指数=======<br>"; <br>
echo "穿衣指数:".$data['today']['dressing_index']." , ".$data['today']['dressing_advice']."<br>"; <br>
echo "紫外线强度:".$data['today']['uv_index']."<br>"; <br>
echo "舒适指数:".$data['today']['comfort_index']."<br>"; <br>
echo "洗车指数:".$data['today']['wash_index']; <br>
echo "<br><br>"; <br>
<br>
}else{ <br>
echo $ipWeatherResult['error_code'].":".$ipWeatherResult['reason']; <br>
}
if($ipWeatherResult['error_code'] == 0){ //다음은 실제 비즈니스 요구에 따라 다시 작성할 수 있습니다
///////////////////////////////////////////////// /// /////////////////////
$data = $ipWeatherResult['결과'] <br>
echo "========현재 도시=======<br>";
echo $data['오늘']['도시'];
echo "<br><br>";
echo "========현재 날씨=======<br>";
echo "온도: ".$data['sk']['temp']." " <br>
echo "풍향: ".$data['sk']['wind_direction']." (".$data['sk']['wind_strength'].")" <br>
echo "습도: ".$data['sk']['습도']." "
echo "<br><br>";
echo "=======앞으로 며칠 동안의 일기예보=======<br>";
foreach($data['future'] as $wkey =>$f){
echo "날짜:".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temp']."< br>";
}
echo "<br><br>";
echo "========관련 날씨 지수=======<br>";
echo "드레싱 지수: ".$data['today']['dressing_index']." , ".$data['today']['dressing_advice']."<br>";
echo "UV 강도:".$data['today']['uv_index']."<br>"
echo "편안함 지수:".$data['today']['comfort_index']."<br>"
echo "세차 지수:".$data['today']['wash_index']
echo "<br><br>";
}그밖에{
echo $ipWeatherResult['error_code'].":".$ipWeatherResult['reason'];
} 4. GPS 좌표를 기반으로 해당 지역의 날씨를 알아봅니다
2, 3, 4를 통해 얻은 일기예보와 상관없이 집계 형식이 통일되어 있기 때문에 파싱 과정은 동일하므로 파라미터 전송의 일부 차이점을 제외하고는 추가적인 작업이 없습니다. $geoWeatherResult = $weather->getWeatherByGeo(116.401394,39.916042)
if($geoWeatherResult['error_code'] == 0){ //다음은 실제 비즈니스 요구에 따라 다시 작성될 수 있습니다
///////////////////////////////////////////////// /// ///////////////////// $data = $geoWeatherResult['결과'] <br>
echo "========현재 도시=======<br>";
echo $data['오늘']['도시'];
echo "<br><br>";
echo "========현재 날씨=======<br>";
echo "온도: ".$data['sk']['temp']." " <br>
echo "풍향: ".$data['sk']['wind_direction']." (".$data['sk']['wind_strength'].")" <br>
echo "습도: ".$data['sk']['습도']." " <br>
echo "<br><br>";
<br>
echo "=======앞으로 며칠 동안의 일기예보=======<br>";
foreach($data['future'] as $wkey =>$f){ <br>
echo "날짜:".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temp']."< br>"; <br>
} <br>
echo "<br><br>";
<br>
echo "========관련 날씨 지수=======<br>";
echo "드레싱 지수: ".$data['today']['dressing_index']." , ".$data['today']['dressing_advice']."<br>";
echo "UV 강도:".$data['today']['uv_index']."<br>" <br>
echo "편안함 지수:".$data['today']['comfort_index']."<br>" <br>
echo "세차 지수:".$data['today']['wash_index'] <br>
echo "<br><br>";
<br>
}그밖에{ <br>
echo $geoWeatherResult['error_code'].":".$geoWeatherResult['reason'] <br>
} <br>5. 3시간 동안 도시 예보를 확인하세요 <br>
3시간마다 해당 도시의 기상 상황입니다. <br>$forecastResult = $weather->getForecast("Suzhou") <br>
if($forecastResult['error_code'] == 0){ //다음은 실제 비즈니스 요구에 따라 다시 작성될 수 있습니다 <br>
///////////////////////////////////////////////// /// ///////////////////// <br>
$data = $forecastResult['결과'] <br>
foreach($data as $key => $d){ <br>
echo "날짜:".$d['date']." (".$d['sh']."point-".$d['eh']."point) ".$d['weather' ]." ".$d['temp1']."~".$d["temp2"]."<br>" <br>
} <br>
}else{ //다음은 실제 비즈니스 요구에 따라 다시 작성할 수 있습니다
///////////////////////////////////////////////// /// /////////////////////
echo $forecastResult['error_code'].":".$forecastResult['reason'] $forecastResult = $weather->getForecast("苏州"); <br>
if($forecastResult['error_code'] == 0){ //以下可根据实际业务需求,自行改写 <br>
////////////////////////////////////////////////////////////////////// <br>
$data = $forecastResult['result']; <br>
foreach($data as $key => $d){ <br>
echo "日期:".$d['date']." (".$d['sh']."点-".$d['eh']."点) ".$d['weather']." ".$d['temp1']."~".$d["temp2"]."<br>"; <br>
} <br>
}else{ //以下可根据实际业务需求,自行改写 <br>
////////////////////////////////////////////////////////////////////// <br>
echo $forecastResult['error_code'].":".$forecastResult['reason']; <br>
}
}
위의 샘플 코드를 통해 모든 사람은 집계 데이터 일기예보 API를 호출하는 방법에 대한 일반적인 이해를 가질 수 있습니다.
마지막으로 class.juhe.weather.php의 전체 코드를 입력하세요: <br><!--?php <br />
// +---------------------------------- --- ---------- <br />
// | JuhePHP [ NO ZUO NO DIE ] <br />
// +---------------------------------- --- ---------- <🎜>// | Copyright (c) 2010-2015 http://juhe.cn <br />
// +---------------------------------- --- ---------- <br />
// | 작성자: Juhedata <info@juhe.cn-->
// +---------------------------------- --- ---------- <br>
<br>
//----------------------------------- <br>
// 집계된 데이터 일기예보 인터페이스 요청 클래스 <br>
//----------------------------------- <br>
수업 날씨{ <br>
Private $appkey = false // 일기예보 집계 APPKEY 신청 <br>
<br>
Private $cityUrl = 'http://v.juhe.cn/weather/citys'; //도시 목록 API URL <br>
<br>
Private $weatherUrl = 'http://v.juhe.cn/weather/index'; //도시별 날씨 API URL 요청 <br>
<br>
Private $weatherIPUrl = 'http://v.juhe.cn/weather/ip'; //IP 주소 기반 날씨 API URL 요청 <br>
<br>
Private $weatherGeoUrl = 'http://v.juhe.cn/weather/geo'; //GPS 좌표를 기반으로 날씨 API URL 가져오기 <br>
<br>
Private $forecast3hUrl = 'http://v.juhe.cn/weather/forecast3h'; //도시 날씨 3시간 예보 API URL 가져오기 <br>
<br>
공개 함수 __construct($appkey){ <br>
$this->appkey = $appkey;
} <br>
<br>
/**<br>
* 일기예보 지원 도시 목록 받기 <br>
* @return 배열 <br>
*/ <br>
공개 함수 getCitys(){ <br>
$params = 'key='.$this->appkey <br>
$content = $this->juhecurl($this->cityUrl,$params) <br>
return $this->_returnArray($content); <br>
} <br>
<br>
/**<br>
* 도시 이름/ID를 기준으로 자세한 일기 예보를 받아보세요 <br>
* @param string $city [도시 이름/ID] <br>
* @return 배열 <br>
*/ <br>
공개 함수 getWeather($city){ <br>
$paramsArray = 배열( <br>
'키' =>
'도시 이름' => $도시, <br>
> >
); <br>
$params = http_build_query($paramsArray); <br>
$content = $this->juhecurl($this->weatherUrl,$params); <br>
return $this->_returnArray($content); <br>
} <br>
<br>
/**<br>
* IP 주소를 기반으로 지역 일기 예보를 받아보세요 <br>
* @param string $ip [IP 주소] <br>
* @return 배열 <br>
*/ <br>
공개 함수 getWeatherByIP($ip){ <br>
$paramsArray = 배열( <br>
'키' => $this->appkey, <br> 'ip' => $ip, <br>
'형식' => 2 <br>
); <br>
$params = http_build_query($paramsArray); <br>
$content = $this->juhecurl($this->weatherIPUrl,$params); <br>
return $this->_returnArray($content); <br>
} <br>
<br>
/**<br>
* GPS 좌표를 기반으로 현지 일기예보를 받아보세요 <br>
* @param string $lon [경도] <br>
* @param string $lat [위도] <br>
* @return 배열 <br>
*/ <br>
공개 함수 getWeatherByGeo($lon,$lat){ <br>
$paramsArray = 배열( <br>
'키' => $this->appkey, <br>
'론' => $lon, <br>
'위도' => $lat, <br>
'형식' => 2 <br>
); <br>
$params = http_build_query($paramsArray); <br>
$content = $this->juhecurl($this->weatherGeoUrl,$params); <br>
return $this->_returnArray($content); <br>
} <br>
<br>
/**<br>
* 3시간 도시 예보를 받아보세요 <br>
* @param string $city [도시 이름] <br>
* @return 배열 <br>
*/ <br>
공개 함수 getForecast($city){ <br>
$paramsArray = 배열( <br>
'키' => $this->appkey, <br>
'도시 이름' => $도시, <br>
'형식' => 2 <br>
); <br>
$params = http_build_query($paramsArray); <br>
$content = $this->juhecurl($this->forecast3hUrl,$params); <br>
return $this->_returnArray($content); <br>
} <br>
<br>
/**<br>
* JSON 내용을 데이터로 변환하여 반환 <br>
* @param string $content [내용] <br>
* @return 배열 <br>
*/ <br>
공개 함수 _returnArray($content){ <br>
json_decode($content,true)를 반환합니다. <br>
} <br>
<br>
/** <br>
* 请求接口返回内容 <br>
* @param string $url [请求的URL地址] <br>
* @param 문자열 $params[请求的参数]<br> * @param int $ipost [是否采用POST형式] <br>
* @return 문자열 <br>
*/ <br>
공개 함수 juhecurl($url,$params=false,$ispost=0){ <br>
$httpInfo = 배열(); <br>
$ch = curl_init(); <br>
<br>
컬_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); <br>
cur_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); <br>
컬_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 ); <br>
컬_setopt( $ch, CURLOPT_TIMEOUT , 30); <br>
cur_setopt( $ch, CURLOPT_RETURNTRANSFER , true ); <br>
if( $ispost ) <br>
{ <br>
cur_setopt( $ch , CURLOPT_POST , true ); <br>
컬_setopt( $ch , CURLOPT_POSTFIELDS , $params ); <br>
컬_setopt( $ch , CURLOPT_URL , $url ); <br>
} <br>
그렇지 않으면 <br>
{ <br>
if($params){ <br>
cur_setopt( $ch , CURLOPT_URL , $url.'?'.$params ); <br>
}else{ <br>
컬_setopt( $ch , CURLOPT_URL , $url); <br>
} <br>
} <br>
$응답 = curl_exec( $ch ); <br>
if ($response === FALSE) { <br>
//에코 "cURL 오류: " . 컬_오류($ch); <br>
false를 반환합니다. <br>
} <br>
$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE ); <br>
$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) ); <br>
컬_닫기( $ch ); <br>
$응답을 반환합니다. <br>
} <br>
<br>
}