Async Python client for DART (Data Analysis, Retrieval and Transfer System) API
Project description
dart-api-client
DART(Data Analysis, Retrieval and Transfer System) API를 위한 비동기 Python 클라이언트 라이브러리입니다.
특징
- ✨ 비동기 우선:
asyncio와httpx기반 고성능 비동기 요청 - 🔒 타입 안전성: Pydantic 모델과 타입 힌트로 IDE 자동완성 지원
- 🚀 83개 API 자동 생성: YAML 스펙에서 모든 DART API 메서드 자동 생성
- ⚡ Rate Limiting: 클라이언트 측 요청 제한으로 API 한도 관리
- 📝 상세한 문서화: 각 메서드마다 파라미터 설명 포함
- 🧪 검증 완료: 실제 DART API로 테스트 완료
설치
pip install dart-api-client
또는 개발 버전:
git clone https://github.com/statpan/dart-api-client.git
cd dart-api-client
pip install -e .
빠른 시작
1. API 키 설정
환경변수에 DART API 키를 설정하거나:
export DART_API_KEY="your_api_key_here"
코드에서 직접 전달:
from dart_client import DartAPIClient
client = DartAPIClient(api_key="your_api_key_here")
2. 기본 사용법
import asyncio
from dart_client import DartAPIClient
async def main():
async with DartAPIClient() as client:
# 고유번호(기업 코드) 조회
corp_codes = await client.get_corp_code()
print(f"✅ {len(corp_codes):,}개 기업 코드 다운로드")
print(f"예시: {corp_codes[0].corp_name} ({corp_codes[0].corp_code})")
# 기업정보 조회
company = await client.get_company(corp_code="00126380")
print(f"✅ 기업명: {company['corp_name']}")
# 공시검색
disclosures = await client.get_list(
corp_code="00126380",
bgn_de="20240101",
end_de="20240131",
page_count=10
)
print(f"✅ 공시 {disclosures['total_count']}건 검색")
if __name__ == "__main__":
asyncio.run(main())
주요 기능
1. 기업 정보 조회
# 고유번호 전체 다운로드 (ZIP/XML 자동 처리)
corp_codes = await client.get_corp_code()
# 특정 기업 정보
company_info = await client.get_company(corp_code="00126380")
2. 공시 검색
# 기간별 공시 검색
disclosures = await client.get_list(
corp_code="00126380", # 삼성전자
bgn_de="20240101", # 시작일
end_de="20241231", # 종료일
pblntf_ty="A", # 정기공시
page_no=1,
page_count=100
)
for item in disclosures['list']:
print(f"[{item['rcept_dt']}] {item['report_nm']}")
3. 재무제표 조회
# 단일회사 재무제표
financials = await client.get_fnltt_singl_acnt(
corp_code="00126380",
bsns_year="2023",
reprt_code="11011" # 사업보고서
)
# 다중회사 비교
multi_financials = await client.get_fnltt_multi_acnt(
corp_code="00126380,00164779", # 여러 기업 동시 조회
bsns_year="2023",
reprt_code="11011"
)
4. 주주 정보
# 최대주주 현황
shareholders = await client.get_hyslr_sttus(
corp_code="00126380",
bsns_year="2023",
reprt_code="11011"
)
# 소액주주 현황
minor_shareholders = await client.get_mrhl_sttus(
corp_code="00126380",
bsns_year="2023",
reprt_code="11011"
)
5. 임원 정보
# 임원 현황
executives = await client.get_exctv_sttus(
corp_code="00126380",
bsns_year="2023",
reprt_code="11011"
)
# 임원 보수 현황
exec_pay = await client.get_hmv_audit_all_sttus(
corp_code="00126380",
bsns_year="2023",
reprt_code="11011"
)
API 그룹
라이브러리는 83개의 DART API를 6개 그룹으로 제공합니다:
DS001 - 기본 조회 (4개 API)
get_list: 공시검색get_company: 기업개황get_api_2019003: 공시서류 원본파일get_api_2019018: 고유번호 (또는get_corp_code)
DS002 - 정기보고서 (28개 API)
자본금, 배당, 주주, 임원, 직원, 보수, 감사 등
DS003 - 재무제표 (7개 API)
단일/다중 재무제표, XBRL, 재무지표 등
DS004 - 지분공시 (2개 API)
대량보유, 임원/주요주주 소유보고
DS005 - 주요사항 (36개 API)
유무상증자, 합병/분할, 자기주식, 소송 등
DS006 - 증권신고서 (6개 API)
지분증권, 채무증권, 합병, 분할 등
고급 사용법
Rate Limiting 조정
# 분당 요청 수 제한 (기본값: 100)
client = DartAPIClient(requests_per_minute=300)
에러 처리
from dart_client.errors import DartAPIError, DartLimitError, DartAuthError
try:
result = await client.get_company(corp_code="00126380")
except DartAuthError as e:
print(f"인증 오류: {e.message}")
except DartLimitError as e:
print(f"API 한도 초과: {e.message}")
except DartAPIError as e:
print(f"API 오류 [{e.code}]: {e.message}")
동기 코드에서 사용
import asyncio
def get_company_sync(corp_code):
async def _fetch():
async with DartAPIClient() as client:
return await client.get_company(corp_code=corp_code)
return asyncio.run(_fetch())
company = get_company_sync("00126380")
파라미터 참고
보고서 코드 (reprt_code)
11011: 사업보고서11012: 반기보고서11013: 1분기보고서11014: 3분기보고서
법인구분 (corp_cls)
Y: 유가증권시장K: 코스닥N: 코넥스E: 기타
날짜 형식
YYYYMMDD: 예)20240101
개발
테스트
# 전체 테스트
uv run pytest
# Fixture 기반 테스트
uv run pytest tests/test_with_fixtures.py -v
# 실제 API 테스트 (DART_API_KEY 필요)
uv run tests/test_integration_real.py
코드 생성
YAML 스펙이 업데이트되면:
uv run scripts/generate_client.py
라이선스
MIT License
기여
이슈와 PR을 환영합니다!
관련 링크
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dart_api_client-0.1.0.tar.gz.
File metadata
- Download URL: dart_api_client-0.1.0.tar.gz
- Upload date:
- Size: 24.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04f550ec002c52ad2a4ce05e9f2be75267f0e5dc31410255fdb4bf3660bb9dc9
|
|
| MD5 |
f0e1be77594ac76be1476f3b9558947e
|
|
| BLAKE2b-256 |
516e6ca1136b0503fd47eac2ad3f18a10dcbdfcc6bfe3405da7bee84669f2105
|
File details
Details for the file dart_api_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dart_api_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc6e32855c4a1e096109d66816ae3976b9366fe56e95f2d842a3ad83f6a4e833
|
|
| MD5 |
4688319e400a3ca139e589be7a8d72a0
|
|
| BLAKE2b-256 |
d34c64171a5b67dfc8faea66912cfefd0a6c78da04838d61ff6c8caa24923b81
|