일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 텍스트마이닝
- pandas
- R
- 데이터분석
- DATA
- 우분투
- pytorch
- dropout
- 빅데이터
- Graph
- uncertainty
- 텍스트분석
- 백준
- 베이지안
- AI
- PYTHON
- 불확실성
- 크롤링
- VAE
- 강화학습
- bayesian
- 리눅스
- 파이썬
- selenium
- YarinGal
- 논문리뷰
- 알고리즘
- Crawling
- 코딩테스트
- GNN
- Today
- Total
끄적거림
[API]기상청 api로 데이터 가져오기 2 in Python(feat. 동네예보 - 초단기실황) 본문
1. 활용신청
아래의 URL로 접속하여 활용신청을 한다.
https://www.data.go.kr/dataset/15000099/openapi.do
원하는 서비스에 해당하는 "활용신청" 버튼을 클릭한다.
※ 이때, 참고문서의 "기상청18_동네예보+조회서비스_오픈API활용가이드.zip"을 다운 받는다.
request할 때의 parameter값과 결과값에 대한 코드 정보가 들어있다.
2. 지역 좌표 추출
1번에서 가이드를 다운로드 받게 되면 "기상청18_동네예보 조회서비스_오픈API활용가이드_격자_위경도.xlsx"라는 파일을 얻을 수 있다.
이 X,Y 좌표들이 나중에 request를 날릴때 parameter값으로 필요하기 때문에 이 excel 파일을 읽어온다.
import pandas as pd
xylist = pd.read_csv("C:/Users/..경로../xylist.csv", encoding='CP949')
uniq_xylist = xylist[['격자 X', '격자 Y']].drop_duplicates() # 중복 좌표 제거
나는 이 파일을 R로 읽어서 따로 CSV파일로 만들었다.
3. Call Back URL, 인증키
Call Back URL은 첨부되어 있던 가이드에 나와 있기도 하고, 그림과 같이 마이페이지로 들어가면 인증키와 URL을 확인할 수 있다.
※ 여기서 말하는 인증키는 API키, 서비스키, 사용자키 등등 많은 용어로 불리기도 한다.
4. 코딩
from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
# Setting for URL parsing
CallBackURL = 'http://apis.data.go.kr/1360000/VilageFcstInfoService/getUltraSrtNcst'
params = '?' + urlencode({
quote_plus("serviceKey"): "~~", # 인증키
quote_plus("numOfRows"): "10", # 한 페이지 결과 수 // default : 10
quote_plus("pageNo"): "1", # 페이지 번호 // default : 1
quote_plus("dataType"): "JSON", # 응답자료형식 : XML, JSON
quote_plus("base_date"): "20200225", # 발표일자 // yyyymmdd
quote_plus("base_time"): "0600", # 발표시각 // HHMM, 매 시각 40분 이후 호출
quote_plus("nx"): "60", # 예보지점 X 좌표
quote_plus("ny"): "127" # 예보지점 Y 좌표
})
# URL parsing
req = urllib.request.Request(CallBackURL + unquote(params))
# Get Data from API
response_body = urlopen(req).read() # get bytes data
# Convert bytes to json
data = json.loads(response_body)
# Result
res = pd.DataFrame(data['response']['body']['items']['item'])
res 변수를 보면 알겠지만 category 코드로 적혀있다. 이 코드에 대한 정보는 가이드 문서 끝쪽에 위치해 있으니 이를 활용하여 정보를 얻어야한다.
앞전에 2번에서 좌표값을 읽어왔으니 이를 변수화 하여 loop를 돌려 원하는만큼의 지역에 대한 정보를 받아올 수 있다. 자동화시키는 프로세스는 나중에 다루는 걸로....
'Python' 카테고리의 다른 글
xml 접근 및 CSV파일로 변환 (0) | 2020.04.16 |
---|---|
[API]네이버데이터랩 api로 데이터 가져오기2 in Python (0) | 2020.03.02 |
[API] 영화진흥위원회 제공 박스오피스 API 사용 (0) | 2020.02.28 |
[Tips] 컴프리헨션(Comprehension), 이터레이터(Iterator), 제너레이터(Generator) (0) | 2020.02.21 |
[Tips] byte, str 타입 오류(feat. TypeError: write() argument must be str, not bytes) (0) | 2020.02.21 |