http://www.kma.go.kr/wid/queryDFS.jsp?gridx=62&gridy=122
X좌표값과 Y좌표값을 넣고 위 URL를 웹브라우저에 입력하면 해당지역 XML 코드가 출력된다.
temp : 온도, hour : 시간, wfKor : 날씨, pop : 강수량, reh : 습도
PHP에서 Web상의 XML 문서를 파싱하기 위해서는 cURL 라이브러리를 이용하면 된다.
String 으로 추출된 결과물을 simplexml_load_string 으로 구조체로 변환한다.
XML 데이터를 JSON 으로 변환한 다음 배열(array)를 읽어서 원하는 자료를 추출하는 것은 foreach 문을 사용하면 되는거 같다.
배열을 출력하는 print_r 함수를 이용하여 내용을 봐가면서 원하는 자료만 추출하면 된다.
<?php
function file_get_contents_curl($url) {
$ch = curl_init();// curl 리소스를 초기화
curl_setopt($ch, CURLOPT_URL, $url); // url을 설정
// 헤더는 제외하고 content 만 받음
curl_setopt($ch, CURLOPT_HEADER, 0);
// 응답 값을 브라우저에 표시하지 말고 값을 리턴
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);// 리소스 해제를 위해 세션 연결 닫음
return $data;
}
$url = "http://www.kma.go.kr/wid/queryDFS.jsp?gridx=62&gridy=122";
$xml_string = file_get_contents_curl($url);
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml); // XML to JSON
$R = json_decode($json,TRUE);//배열로 변환
print_r($R);
echo '<br />';
echo '<br />';
echo $R['header']['tm'].'<br />';//날씨 예보시간
$wData = $R['body']['data'][0];
print_r($wData);
echo '<br />';
echo '<br />';
//echo $wData['hour'].'시 온도:'.$wData['temp'].' 날씨:'.$wData['wfKor'];
foreach($R['body']['data'] as $wData){
echo $wData['hour'].'시 온도:'.$wData['temp'].' 날씨:'.$wData['wfKor'];
echo '<br />';
}
?>
위 코드에서 JSON 으로 변경하지 않고 처리한다면
$data = file_get_contents_curl($url);
$xml = simplexml_load_string($data);
echo '<pre>';
print_r($xml);
echo '</pre>';
foreach ($xml->body->data as $row) {
$hour = $row -> hour;
$temp = $row -> temp;
$wfkor = $row -> wfKor;
$pop = $row -> pop;
$reh = $row -> reh;
$wdkor = $row -> wdKor;
}
cURL 함수 사용이 가능한지 여부를 확인하는 방법
<?php
if (ini_get('allow_url_fopen') == '1') {
// file_get_contents() 사용
echo 'php.ini 환경에서 허용';
} else {
// curl 함수 이용 가능 여부
if (function_exists('curl_init')) {
echo 'curl 함수 사용 가능';
} else {
echo 'curl 함수 이용 불가';
}
}
?>
php.ini에는 'allow_url_fopen'라는 설정항목이 있다.
이 항목이 off일 경우에는 fopen 등의 파일관련 함수에서 URL로 파일을 읽어오는 것이 불가능하다.
'allow_url_fopen'을 off로 하는 대부분의 이유는 '보안 취약성'의 우려가 있기 때문이다.
For example, somebody might pass /etc/passwd as a url, and be able to view its contents.
출처: https://link2me.tistory.com/1417 [소소한 일상 및 업무TIP 다루기]
|