본문 바로가기
인공지능/R

R - open api

by bibibig_data 2021. 6. 10.

api 란?
api는 네이버 혹은 구글, 공공기관 같은 곳에서 자신들이 가지고 있는 정보를
일정한 형식으로 일반 사람, 기관간의 정보 공유 등 정보를 공개를 해서
그 정보를 이용하여 사용하거나, 프로그램을 만들때 쓰는 것입니다.
 
1. open api
위의 설명대로 공개된 api 입니다.
일반사람이나 누구도 확인 할 수 있는 api를 말합니다.
 
2. 공공기간 open api
위에 있는 open api중에서 공공기관에서 공개하는것을 말하는 겁니다.
예로 기상청에서 날씨를 api로서 공개를 하고 있고 이 외에도
버스, 지하철 노선 및 위치 정보 등을 공공기관에서 공개하여,
일반인, 앱제작 회사에서 이를 이용하여 앱 등을 만들어서 ^^ 일반인들이 사용하고 있는것입니다.
 
2번의 예로
경기도 버스정보시스템 - http://www.gbis.go.kr/
경기도 버스정보시스템 공유 - http://openapi.gbis.go.kr/manual2/jsp/main.jsp

 

NAVER OPEN API

install.packages("httr")
install.packages("wordcloud2")

#패키지 로드
library(wordcloud2)
library(httr)
library(KoNLP)


#######################################
#네이버 OPenApi 연결 및 데이터 가져오기

#네이버 소스 출러
#https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
#1. 기본 URL 뉴스
urlStr <- "https://openapi.naver.com/v1/search/news.xml?"

#2. 검색어 설정 및 UTF-8 URL 인코딩
searchString <- "query=트럼프"

#UTF-8 인코딩
searchString <- iconv(searchString, to="UTF-8")
#URL 인코딩
searchString <- URLencode(searchString)
#인코딩된 내역 확인 
print(searchString)

#3. 나머지 요청변수 설정 (각 요청변수는 &로 연결)
#조회 개수 50개, 시작 페이지1, 유사도순 정렬 
etcString <- "&display=50&start=1&sort=sim"

#4.URL 조립
reqUrl <- paste(urlStr, searchString, etcString, sep="")

#5. 조립된 URL확인 
reqUrl

#NAVER OPEN API KEY
client_id = "PIKKM1p_iFKvlrgZdyk3"
client_secret = "scxKeSJYib"
#Get 함수 호출(인증정보는 add_headers에 담아 함께 전송)
naverResult <- GET(reqUrl, 
                 add_headers("X-Naver-Client-Id"=client_id, 
                             "X-Naver-Client-Secret"=client_secret))


#호출 결과 조회 (응답코드 Status가 200이면 정상)
naverResult

#Open Api의 결과 구조 확인
class(naverResult)
str(naverResult)

#raw형을 문자로 변환 
result <- rawToChar(naverResult$content)

#변환 결과 확인
Encoding(result) <- "UTF-8"

#결과 출력
result 

#################################################################
#가져온 데이터 전처리 불필요한 문자제거

#검색 결과를 변수에 저장
refinedStr <- result

#XML 태그를 공란으로 치환
refinedStr <- gsub("<(\\/?)(\\w +)*([^<>]*)>", " ", refinedStr)

#단락을 표현하는 불필요한 문자를 공란으로 치환
refinedStr <- gsub("[[:punct:]]"," ", refinedStr)

#영어 소문자를 공란으로 치환
refinedStr <- gsub("[a-z]"," ",refinedStr)

#숫자를 공란으로 치환
refinedStr <- gsub("[0-9]", " ", refinedStr)

#여러 공란은 한 개의 공란으로 변경 
refinedStr <- gsub(" +", " ",refinedStr)

#변경 후 검색 결과
refinedStr

##############################################
#데이터 전처리

#검색 문장 내 단어 추출
nouns <- extractNoun(refinedStr)

#단어 추출 결과 확인 
str(nouns)

#추출된 단어 중 일부를 확인 (앞에서 부터 30개)
nouns[1:30]

#길이가 1인 문자를 제외
nouns <- nouns[nchar(nouns) > 1]

#제외할 특정 단어를 정의
excluNouns <- c('트럼프','미국')

#특정 단어를 제외
nouns <- nouns[!nouns %in% excluNouns]

#추출된 단어 중 일부를 확인 (앞에서 부터 30개)
nouns[1:30]

#모든 단어를 워드 클라우드에 표현할 수 없기에 빈도수 기준으로 상위 50개 단어를 별도로 추출해보자

#빈도수(table)를 기준으로 내림차순 (decreasing=T) 정렬(sort) -> 상위 50개만 추출 ([1:50])
wordT <- sort(table(nouns), decreasing =T)[1:50]

#추출 결과 확인
wordT


#wordcloud2(data, size, shape)
#data : 단어와 빈도수 정보가 표함된 데이터프레임 또는 테이블
#size : 글자 크기 
#shape : 워드 클라우드의 전체 모양(circle(기본값), cardioid, diamond, triangle, star 등)
#워드 클라우드 그리기 
wordcloud2(wordT, size = 3, shape = 'diamond')

 


 

날씨 open api

##패키지 설치
##https://openweathermap.org/api
##################################
install.packages("ROpenWeatherMap")
library(ROpenWeatherMap)

## 설치 확인
search()

#문제 있으면
#remove.packages("ROpenWeatherMap") 사용
#----------------------------------------------
#api_key 키값 저장 및 확인
# 강사가 제공-->  openweathermap.org 회원 가입하면 줌
### 부분 유료

api_key <- "b2185facbdadc1b91b4d5ba45cfc4b1d"
ls()
#-----------------------------
##https://openweathermap.org/api 도시 이름과  id
##id: 52490  --> Moscow
##id: 703448  -->Kiev
##id: 2643743 --> London
##id: 1835848 --> Seoul
#---------한 도시 데이터만 가져오기 list형

data = get_current_weather(api_key, city="Seoul" ) 
str(data)


data$coord  #리스트에서 특정 요소 가져오기
data$coord$lon 

data$name
data$weather
df <- data$weather
class(df)
#-------------------------------------------------
data2 = get_current_weather(api_key, cityID=2643743 )
str(data2)

#----여러 도시 데이터 가져오기 list 형
# 데이터 프레임만 추출
data3 = get_multiple_cities(api_key,cityIDs =c(524901,703448,2643743))
class(data3)
str(data3)
df2 <- data3$list

#-------데이터 재 조합후 그래프 그리기 
#데이터 프레임 안의 데이터 프레임
df2$name
df2$main$temp

barplot(df2$main$temp, names.arg=df2$name) 


 

'인공지능 > R' 카테고리의 다른 글

R - 내장 함수  (0) 2021.06.10
R - 마크다운  (0) 2021.06.10
R - 감성분석  (0) 2021.06.09
R - 통계적 가설검정  (0) 2021.06.09
R - 텍스트마이닝  (0) 2021.06.08