# Load Library
> library(tidyverse)
> library(httr)
> library(rvest)
> library(jsonlite)
공공데이터 포털에서 발급받은 인증키를 복사한 다음 R 환경변수에 추가
# usethis::edit_r_environ()
## DATAGOKR_TOKEN = '자신의 인증키를 여기에 붙여넣기'
## 이제 '.Renviron' 파일을 저장한 다음 RStudio Restart Session
myKey에 R 환경변수를 지정
> myKey <- Sys.getenv('DATAGOKR_TOKEN')
활용가이드의 응답메시지 예제에서 요청 URI를 다음과 같이 분해하고 요청 URL 중 공통부분을 main에 할당
> main <- 'http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/'
# 오퍼레이션 네임을 별도로 할당 - 시군구별 실시간 평균 정보 조회
> oper <- 'getCtprvnMesureSidoLIst'
HTTP 요청을 실행
활용가이드의 예시대로 실행하기! 인증키에 '%'가 있으면 더블인코딩이 발생하므로 I() 함수를 씌워주는 것 잊지 말기!
> res <- GET(url = str_c(main, oper),
+ query = list(sidoName = '서울',
+ searchCondition = 'DAILY',
+ pageNo = 1,
+ numOfRows = 600, # 600개 정도 뽑아보자
+ serviceKey = I(x = myKey)))
> # 응답 결과 확인
> print(x = res)
Response [http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureSidoLIst?sidoName=%EC%84%9C%EC%9A%B8&searchCondition=DAILY&pageNo=1&numOfRows=600&serviceKey=FHvHURIzcO%2FkrQmL4F5mHOB5a03BfiM6HSIhLKzpTpRWOrd6%2FrHVE%2BGh%2FMnqgHeapaV7UWPHcdZYRQ0iryS07g%3D%3D]
Date: 2019-10-12 16:45
Status: 200
Content-Type: text/xml;charset=utf-8
Size: 194 kB
<?xml version="1.0" encoding="UTF-8"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
# 응답 바디를 텍스트로 출력합니다.
> res %>% content(as = 'text') %>% cat()
<item>
<dataTime>2019-10-12 05:00</dataTime>
<cityName>동대문구</cityName>
<so2Value>-</so2Value>
<coValue>-</coValue>
<o3Value>-</o3Value>
<no2Value>-</no2Value>
<pm10Value>-</pm10Value>
<pm25Value>-</pm25Value>
</item>
# (후략)
xml_nodes() 이용해서 몇개 잘 나오는지 확인해 보기
> # body의 items 하위 노드를 모두 지정합니다.
> res %>% read_xml() %>% xml_node(css = 'items') -> items
> # 측정일시
> items %>% xml_nodes(css = 'dataTime') %>% xml_text()
[1] "2019-10-13 01:00" "2019-10-13 01:00" "2019-10-13 01:00" "2019-10-13 01:00"
[5] "2019-10-13 01:00" "2019-10-13 01:00" "2019-10-13 01:00" "2019-10-13 01:00" (후략)
지금 까지 작업한 내용을 데이프레임으로 생성
> dfXml <- data.frame(
+ 측정일시 = items %>% xml_nodes(css = 'dataTime') %>% xml_text(),
+ 시군구 = items %>% xml_nodes(css = 'cityName') %>% xml_text(),
+ 아황산가스평균농도 = items %>% xml_nodes(css = 'so2Value') %>% xml_text(),
+ 일산화탄소평균농도 = items %>% xml_nodes(css = 'coValue') %>% xml_text(),
+ 오존평균농도 = items %>% xml_nodes(css = 'o3Value') %>% xml_text(),
+ 이산화질소평균농도 = items %>% xml_nodes(css = 'no2Value') %>% xml_text(),
+ PM10 = items %>% xml_nodes(css = 'pm10Value') %>% xml_text(),
+ PM25 = items %>% xml_nodes(css = 'pm25Value') %>% xml_text()
+ )
>
잘 들어갔는지 확인하기 위해 데이터프레임 출력
> dfXml %>% arrange(측정일시) %>% head()
측정일시 시군구 아황산가스평균농도 일산화탄소평균농도 오존평균농도 이산화질소평균농도 PM10 PM25
1 2019-10-12 02:00 강남구 0.003 0.4 0.031 0.021 29 14
2 2019-10-12 02:00 강동구 0.002 0.4 0.027 0.019 29 18
3 2019-10-12 02:00 강북구 0.002 0.6 0.043 0.006 31 18
4 2019-10-12 02:00 강서구 0.004 0.4 0.033 0.012 27 17
5 2019-10-12 02:00 관악구 0.003 0.4 0.011 0.014 - -
6 2019-10-12 02:00 광진구 0.002 0.5 0.036 0.011 24 15
> dfXml %>% arrange(측정일시) %>% tail()
측정일시 시군구 아황산가스평균농도 일산화탄소평균농도 오존평균농도 이산화질소평균농도 PM10 PM25
595 2019-10-13 01:00 영등포구 0.002 0.2 0.034 0.011 16 8
596 2019-10-13 01:00 용산구 0.002 0.3 0.029 0.012 13 7
597 2019-10-13 01:00 은평구 - 0.3 0.029 0.013 19 8
598 2019-10-13 01:00 종로구 0.003 0.4 0.024 0.012 18 6
599 2019-10-13 01:00 중구 0.003 0.3 0.026 0.017 15 7
600 2019-10-13 01:00 중랑구 - - - - - -
'Programming > R' 카테고리의 다른 글
[Crawling] R을 이용한 가상화폐 거래소 Open API 실시간 가격조회 (0) | 2021.08.22 |
---|---|
[Crawling] PDF파일 R로 간단하게 크롤링해보기 (0) | 2021.08.15 |
[Crawling] KBReport 2019 정규시즌 투수 Stat Crawling (0) | 2021.07.22 |
R 정규표현식 기본문법 (0) | 2021.07.17 |
[Crawling] R stringr 패키지 사용법 (0) | 2021.07.06 |