끄적끄적

반응형


#http://quantkim.blogspot.com/2018/01/dart-api-with.html

#https://blog.naver.com/PostView.nhn?blogId=dreaming2b&logNo=221461315268


#개발가이드 참고

#https://opendart.fss.or.kr/guide/main.do?apiGrpCd=DS001


#공시정보 > 공시검색

#https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019001



#STEP 1

import pandas as pd

from bs4 import BeautifulSoup

import webbrowser


import json

import urllib

from urllib.request import urlopen


#STEP 2 요청인자

crtfc_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #API 인증키 (필수)

corp_code = "00126380" #회사고유번호, ※ 개발가이드 > 공시정보 > 고유번호 API조회 가능

bgn_de = "20100101" #시작일, 없으면 종료일

end_de = "" #종료일, 없으면 당일

last_reprt_at = "" #최종보고서만 검색여부(Y or N) 기본값 : N

pblntf_ty = "&pblntf_ty=A&pblntf_ty=B&pblntf_ty=C" #A : 정기공시, B : 주요사항보고, C : 발행공시, D : 지분공시, E : 기타공시, F : 외부감사관련, G : 펀드공시, H : 자산유동화, I : 거래소공시, j : 공정위공시

corp_cls = "" #없으면 전체조회, 법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타)

sort = "" #정렬, 접수일자: date, 회사명 : crp, 보고서명 : rpt, 기본값 : date

sort_mth = "" #정렬방법, 오름차순(asc), 내림차순(desc) 기본값 : desc

page_no = "1" #페이지 번호(1~n) 기본값 : 1

page_count = "2" #페이지당 건수(1~100) 기본값 : 10, 최대값 : 100


#STEP 3

url_1 = "https://opendart.fss.or.kr/api/list.json?crtfc_key="+crtfc_key+"&corp_code="+corp_code+"&bgn_de="+bgn_de+"&end_de="+end_de+"&last_reprt_at="+last_reprt_at+"&pblntf_ty="+pblntf_ty+"&corp_cls="+corp_cls+"&sort="+sort+"&sort_mth="+sort_mth+"&page_no="+page_no+"&page_count="+page_count


#STEP 4

#https://rfriend.tistory.com/475

#https://blog.naver.com/jay-bird/221951337190

#https://www.youtube.com/watch?v=PdKOSGNs3Ig


with urlopen(url_1) as url:

resultJson = url.read() #<class 'bytes'>

result = json.loads(resultJson.decode('utf-8')) #<class 'dict'> 

# json.loads()를 하면 string을 딕셔너리로 바꿀 수 있다.

#utf-8, euc-kr, latin-1, utf-16


#STEP 5

#print(type(resultJson)) #<class 'bytes'>

#print(type(result)) #<class 'dict'>

#print(type(result["list"])) #<class 'list'>


#STEP 6

dataList = result["list"]


data = pd.DataFrame()

#print(dataList[0].values())


for dd in dataList:

#print(dd.values()) #print(dd.keys())

temp = pd.DataFrame([dd.values()], columns=dd.keys())

data = pd.concat([data,temp]) #pd.concat() 데이터프레임을 합치는 함수


#STEP 7 

data = data.reset_index(drop = True) #concate이후 인덱스 재설정

#print(data)


#OPTIONAL

print(data)

user_num=int(input("몇 번째 보고서를 확인하시겠습니까?"))

url_user="http://dart.fss.or.kr/dsaf001/main.do?rcpNo="+data['rcept_no'][user_num]

webbrowser.open(url_user)



반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]