https://fisis.fss.or.kr/fss/fsiview/indexw.html
* 본 사이트는 금융 기관의 금융 정보들을 확인할 수 있습니다. 아래와 같이 OPEN API 사용 방법에 대해 상세히 설명해두었기 때문에 인증키를 발급받고 사용하는 것에는 큰 문제가 없습니다. XML, JSON, XLS를 모두 지원한다는 것도 큰 장점입니다.
그러나 각 URL에 데이터가 할당되어 있어 데이터 수집시 URL을 전부 생성해주어야하는 어려움이 있습니다.
저는 이하의 코드에 나오듯, for 루프 구문을 이용하여 URL을 조합해 불러오는 방법을 사용하였습니다.
엑셀의 자동완성 기능을 사용하면 보다 아래의 일련의 과정으로 보다 쉽게 구문을 조합할 수 있습니다.
(1) [1] 부분을 ctrl+H로 지우고,
(2) 정의한 함수 finstatfun을 이용해 json 구문으로 불러오는 함수식 작성
(3) 변수명을 자동완성으로 정의
(만일의 경우를 위해 코드 수정 템플릿을 위에 첨부합니다.)
전체 코드는 아래와 같습니다.
###InstallPackages/Libraries-------------------------------
if (!require('httr')) install.packages('httr'); library('httr')
if (!require('jsonlite')) install.packages('jsonlite'); library('jsonlite')
if (!require('dplyr')) install.packages('dplyr'); library('dplyr')
if (!require('tidyverse')) install.packages('tidyverse'); library('tidyverse')
if (!require('rvest')) install.packages('rvest'); library('rvest')
if (!require('xml2')) install.packages('xml2'); library('xml2')
if (!require('dplyr')) install.packages('dplyr'); library('dplyr', warn.conflicts = FALSE)
if (!require('shiny')) install.packages('shiny'); library('shiny')
if (!require('ggplot2')) install.packages('ggplot2'); library('ggplot2')
if (!require('DT')) install.packages('DT'); library('DT')
if (!require('tibble')) install.packages('tibble'); library('tibble')
if (!require('shinythemes')) install.packages('shinythemes'); library('shinythemes')
if (!require('lubridate')) install.packages('lubridate'); library('lubridate')
if (!require('rsconnect')) install.packages('rsconnect'); library('rsconnect')
if (!require('scales')) install.packages('scales'); library('scales')
###API_KEY---------------------------------------------------
api_key="[개인 API 코드]"
###홈페이지제공코드표
expandedfinancialrange=read.csv("확장금융권역 분류표.csv")
financialrange=read.csv("금융권역 분류표")
#Function-----------------------------------------------------------
finstatfun=function(url){
urlinfo=GET(url)
urlinfo_json=content(urlinfo, as='text')
urlinfo_json
urlinfo=fromJSON(txt = urlinfo_json %>%
as.character())
urlinfo_df=urlinfo$result$list
urlinfo_df
}
finstatfundt=function(url){
urlinfo=GET(url)
urlinfo_json=content(urlinfo, as='text')
urlinfo_json
urlinfo=fromJSON(txt = urlinfo_json %>%
as.character())
urlinfo_df=urlinfo$result$list
urlinfo_df
DT::datatable(urlinfo_df)
}
###------------------------------------------------------------------------
###[1]금융회사 API (financeCd)---------------------------------
comp_base_url="http://fisis.fss.or.kr/openapi/companySearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
financeCd=0010224 #선택사항
partDiv="A" #국내은행 (금융권역(financialrange) 분류표 참조)
financialcorp_url=paste0(comp_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&partDiv=',partDiv
#,"&financeCd=",financeCd
)
financialcorp_url
financeCd=GET(financialcorp_url)
financeCd
status_code(x = financeCd) #값이 있는지 확인하는 코드입니다.
financeCd_json=content(financeCd, as='text')
financeCd_json
financeCd_list=fromJSON(txt = financeCd_json %>%
as.character())
financeCd_df=financeCd_list$result$list
financeCd_df
DT::datatable(financeCd_df)
write.csv(financeCd_df,"금융회사상세.csv")
##[1]금융회사 API-All(financeCdall)-------------------------------------------------------
comp_base_url="http://fisis.fss.or.kr/openapi/companySearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
#financeCd=0010224 #선택사항
#partDiv="A" #국내은행 (금융권역(financialrange) 분류표 참조)
financialrangelist=unlist(financialrange$code)
for (partdiv in financialrangelist){ #루프 구문을 이용한 URL 조합
print(paste0(comp_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&partDiv=',partdiv
#,"&financeCd=",financeCd
))
}
###PASTE CODE### #위에서 조합된 코드를 가공해 불러들일 것
#----------------------------------------------------------------------------
financeCdall=rbind(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22)
financeCdall
shinyApp(
ui = fluidPage(DTOutput('tbl')),
server = function(input, output) {
output$tbl = renderDT(
financeCdall, options = list(lengthChange = FALSE)
)
}
)
write.csv(financeCdall,"금융회사상세(전체).csv")
###[2]통계목록 대분류 API-ALL(listNoall)---------------------------------
##이하의 스크립트는 전체 코드를 불러오기는 하나, 데이터 요청 제한을 초과함으로 시행을 추천드리지 않습니다.
stat_base_url="http://fisis.fss.or.kr/openapi/statisticsListSearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
lrgDiv="A" #금융권역코드 (확장금융권역(expandedfinancialrange) 분류표 참조)
smlDiv="B" #재무현황 #통계표분류코드 (확장금융권역(expandedfinancialrange) 분류표 참조)
rstudioapi::writeRStudioPreference("console_max_lines", 10000)
sink(file='myoutput.txt')
for(lrgDiv in expandedfinancialrange$fincode){
for(smlDiv in expandedfinancialrange$statcode){
print(paste0(stat_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&lrgDiv=',lrgDiv,
'&smlDiv=',smlDiv))
}
}
sink() # 조합된 URL이 1000개를 넘어가 메모장으로 연결되게 만듦
###PASTE URL###
#listnoall=rbind(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,...b9014,b9015,b9016,b9017,b9018,b9019,b9020,b9021,b9022,b9023,b9024,b9025)
listnoall
shinyApp(
ui = fluidPage(DTOutput('tbl')),
server = function(input, output) {
output$tbl = renderDT(
listnoall, options = list(lengthChange = FALSE)
)
}
)
write.csv(listnoall,"통계표 상세(전체).csv")
###----------------------------------------------------------------------------------
###[3]계정항목 API(accountCd)---------------------------------
acct_base_url="http://fisis.fss.or.kr/openapi/accountListSearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
listNo="SA024" #부문별손익
acct_url=paste0(acct_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&listNo=',listNo
)
acct_url
acctlist=GET(acct_url)
acctlist
status_code(x = acctlist) #값이 있는지 확인하는 코드입니다.
acctlist_json=content(acctlist, as='text')
acctlist_json
acctlist_list=fromJSON(txt = acctlist_json %>%
as.character())
accountCd_df=acctlist_list$result$list
accountCd_df
DT::datatable(accountCd_df)
write.csv(accountCd_df,"계정항목 .csv")
###[3]계정항목대분류 API(accountCdall)---------------------------------
acct_base_url="http://fisis.fss.or.kr/openapi/accountListSearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
listNolist=unlist(listNo_df$list_no)
for (listNo in listNolist){
print(paste0(acct_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&listNo=',listNo)
)
}
##accountCdall SCRIPT-------------------------------------------------------------
###PASTE URL###
###----------------------------------------------------------------------------
acctlistall=rbind(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24)
shinyApp(
ui = fluidPage(DTOutput('tbl')),
server = function(input, output) {
output$tbl = renderDT(
acctlistall, options = list(lengthChange = FALSE)
)
}
)
write.csv(financeCdall,"금융회사상세(전체).csv")
write.csv(accountCd_df,"계정항목 .csv")
###[*]통계정보 API---------------------------------
statinfo_base_url="http://fisis.fss.or.kr/openapi/statisticsInfoSearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
#Set-------------------------------------------------
financeCd_list=unlist(financeCd_df$finance_cd)
financeCd_list
listNo_list=unlist(listNo_df$list_no)
listNo_list
accountCd_list=unlist(accountCd_df$account_cd)
accountCd_list
#item-------------------------------------------
financeCd="0010927"
listNo="SA029" #부문별손익
accountCd="A"
term="Y" #Y(연도), H(반기), Q(분기)
startBaseMm=201306 #검색시작년월
endBaseMm=201306 #검색종료년월
statinfo_url=paste0(statinfo_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&financeCd=',financeCd,
'&listNo=',listNo,
'&accountCd=',accountCd,
'&term=',term,
'&startBaseMm=',startBaseMm,
'&endBaseMm=',endBaseMm
)
statinfo_url
statinfo=GET(statinfo_url)
statinfo
status_code(x = statinfo) #값이 있는지 확인하는 코드입니다.
statinfo_json=content(statinfo, as='text')
statinfo_json
statinfo=fromJSON(txt = statinfo_json %>%
as.character())
statinfo_df=statinfo$result$list
statinfo_df
DT::datatable(statinfo_df)
write.csv(statinfo_df,"통계정보 .csv")
###[**]통계정보 API 부문별 손익 전체---------------------------------
statinfo_base_url="http://fisis.fss.or.kr/openapi/statisticsInfoSearch."
response_method="json"#canchoosefrom①xml②json③xls
language="kr" #kr(한글), en(영어)
#Set-------------------------------------------------
financeCd_list=unlist(financeCd_df$finance_cd)
financeCd_list
listNo_list=unlist(listNo_df$list_no)
listNo_list
accountCd_list=unlist(accountCd_df$account_cd)
accountCd_list
#item-------------------------------------------
listNo_list=c("SA029","SA030","SA031","SA032","SA033") #부문별손익
accountCd="A"
term="Y" #Y(연도), H(반기), Q(분기)
startBaseMm=202006 #검색시작년월
endBaseMm=202006 #검색종료년월
for(financeCd in financeCd_list){
for(listNo in listNo_list){
print(paste0(statinfo_base_url,
response_method,
'?lang=',language,
'&auth=',api_key,
'&financeCd=',financeCd,
'&listNo=',listNo,
'&accountCd=',accountCd,
'&term=',term,
'&startBaseMm=',startBaseMm,
'&endBaseMm=',endBaseMm)
)
}
}
###STAT info SCRIPT-----------------------------------------------------
###PASTE URL###
##--------------------------------------------------------
statinfo_all=rbind(d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,d32,d33,d34,d35,d36,d37,d38,d39,d40,d41,d42,d43,d44,d45,d46,d47,d48,d49,d50,d51,d52,d53,d54,d55,d56,d57,d58,d59,d60,d61,d62,d63,d64,d65,d66,d67,d68,d69,d70,d71,d72,d73,d74,d75,d76,d77,d78,d79,d80,d81,d82,d83,d84,d85,d86,d87,d88,d89,d90,d91,d92,d93,d94,d95,d96,d97,d98,d99,d100,d101,d102,d103,d104,d105,d106,d107,d108,d109,d110,d111,d112,d113,d114,d115,d116,d117,d118,d119,d120,d121,d122,d123,d124,d125,d126,d127,d128,d129,d130,d131,d132,d133,d134,d135,d136,d137,d138,d139,d140,d141,d142,d143,d144,d145,d146,d147,d148,d149,d150,d151,d152,d153,d154,d155,d156,d157,d158,d159,d160,d161,d162,d163,d164,d165,d166,d167,d168,d169,d170)
statinfo_all
DT::datatable(statinfo_all)
write.csv(statinfo_all,"통계정보부문별순익 .csv")
'지식 창고 > R 언어' 카테고리의 다른 글
KOSIS 통계표 정리 (0) | 2022.06.17 |
---|---|
재정경제통계시스템 R OPEN API 이용하기 (0) | 2022.05.25 |
[R 웹 스크래핑 코드] 열린 재정 OPEN API 이용하기 (0) | 2022.05.25 |
OPEN DART R로 크롤링하기 -1) 기본 파라미터 설정 (0) | 2022.04.22 |
공공데이터 포털 OPEN API 데이터 R로 불러오기 (0) | 2022.03.24 |
댓글