메뉴 건너뛰기

프로그래밍


http://www.data.go.kr 의 기상청 API를 호출해서 날씨 정보를 얻어오는 PHP 예제입니다.

응답값이 xml 포맷입니다. 편히 다루기 위해 xml을 json 포맷으로 변경하는 코드를 참조 하여 사용하였습니다.


<?php
include 'xml2json.php';

get_weather_info();
exit(0);

function get_weather_info()
{
  $service_key = '----data.go.kr에서 발급받은 서비스키 입력----';
  $service_url = 'http://newsky2.kma.go.kr/service/SecndSrtpdFrcstInfoService2/';
  $service_api_name = 'ForecastGrib';
  $service_full_url = $service_url . $service_api_name . '?';
  $service_full_url = $service_full_url . ('ServiceKey=' . $service_key);
  $service_full_url = $service_full_url . ('&base_date=' . '20170117');
  $service_full_url = $service_full_url . ('&base_time=' . '0000');
  $service_full_url = $service_full_url . ('&nx=' . '61');
  $service_full_url = $service_full_url . ('&ny=' . '120');
  //$service_full_url = $service_full_url . ('&pageNo=' . '1');
  //$service_full_url = $service_full_url . ('&numOfRows=' . '10');

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $service_full_url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  $response = curl_exec($ch);

  $errno = curl_errno($ch);
  if ($errno > 0) {
    if ($errno === 28) {
        echo "Connection timed out.";
    }
    else {
        echo "Error #" . $errno . ": " . curl_error($ch);
    }

    exit(0);
  }

  if (!$response) {
    echo "ERROR - 1";
    exit(0);
  }

  $json_list = XmlToJson::Parse($response);

  if (!$json_list) {
    echo "ERROR - 2";
    exit(0);
  }

  $json_list= json_decode($json_list, true);
  curl_close($ch);

  if (!$json_list) {
    echo "ERROR - 3";
    exit(0);
  }

  if(strcmp($json_list['header']['resultMsg'],'OK') == 0 ) {
    var_dump($json_list);
    return 0; //success
  }

  var_dump($json_list);
  return 1; //failed
}
?>

아래는 xml2json.php 파일의 내용 입니다.


<?php
class XmlToJson {	
		public function Parse ($fileContents) {	
			$fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);
	
			$fileContents = trim(str_replace('"', "'", $fileContents));
	
			$simpleXml = simplexml_load_string($fileContents);
	
			$json = json_encode($simpleXml);
	
			return $json;
	
		}	
	}
?>

* xml을 json포맷으로 변경하는 코드는 아래 경로를 참조하였습니다.
- http://stackoverflow.com/questions/8830599/php-convert-xml-to-json


API 상세설명 및 활용신청 방법 보러 가기




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [36] 파이팅건맨 2016.02.20 74489
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 11377
공지 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 9784
145 [TIP] The function size must be used with a prefix when a default namespace is not specified 오류 해결하기 파이팅건맨 2017.08.02 1861
144 [TIP] 페이스북 개인 담벼락의 좋아요수 크롤링하기 파이팅건맨 2017.07.15 1186
143 [TIP] 자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP) [2] 파이팅건맨 2017.03.16 3098
142 [TIP] GUNMAN의 영화 점수 테이블을 이용한 딥러닝 예제 파이팅건맨 2017.02.15 762
141 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 7897
140 [TIP] 네이버 영화 정보와 전문가 평점 얻어오기 파이팅건맨 2017.02.10 5142
139 [TIP] 네이버 오픈 API를 로컬 PC에서 호출하기 파이팅건맨 2017.02.01 2409
» [TIP] php로 기상청에서 제공하는 기상정보 API 호출하기 파이팅건맨 2017.01.17 6877
137 [TIP] node 에서 Basic authentication 인증과 함께 http, https 요청하기 파이팅건맨 2016.09.01 897
136 [TIP] node의 lambda-local 테스트 팁 파이팅건맨 2016.08.19 684
135 [TIP] 데이터를 Node에서 암호화하고 PHP에서 복호화 하기 파이팅건맨 2016.08.19 680
134 [TIP] Docker상의 Syntaxnet 결과 포맷을 수정하기 파이팅건맨 2016.08.07 1568
133 [TIP] SyntaxNet을 Windows에서 실행하기 [1] 파이팅건맨 2016.05.25 867
132 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 11377
131 [TIP] 파이선으로 TED에서 가장많이 사용된 단어들 줄세우기 파이팅건맨 2016.04.03 1546
130 [TIP] 파이선에서 구글 스프레드시트 사용하기 [5] 파이팅건맨 2016.03.27 4508
129 [TIP] 파이선에서 리스트를 사용하는 재미있는 예제 파이팅건맨 2016.03.15 706
128 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [36] 파이팅건맨 2016.02.20 74489
127 [TIP] 퍼포먼스를 높여주는 몇가지 코딩 예 파이팅건맨 2016.01.22 528
126 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 9784
위로