Skip to main content

A robust Python client for the Korean National Assembly Open API

Project description

Assembly API Client

Assembly API Client (국회 오픈 API 클라이언트)

대한민국 국회 오픈 API(Open API)를 위한 강력하고 유연한 비동기 Python 클라이언트입니다.

주요 기능 (Features)

  • 동적 스펙 파싱 (Dynamic Spec Parsing): 엑셀 명세서를 자동으로 다운로드하고 파싱하여 API 엔드포인트를 동적으로 해결합니다.
  • 타입 안정성 (Type Safety): Pydantic 모델을 사용하여 데이터 타입을 검증하고 자동 완성 기능을 제공합니다. API의 불규칙한 데이터 타입(문자열/숫자 혼용)에도 유연하게 대응합니다.
  • 강력한 복원력 (Resilience): 내장된 재시도(Retry) 로직과 에러 핸들링으로 안정적인 데이터 수집이 가능합니다.
  • 자동화된 업데이트 (Automated Updates): 매주 자동으로 최신 API 명세를 동기화하고 코드를 재생성하는 CI/CD 파이프라인이 포함되어 있습니다.
  • CLI 도구: API 명세 동기화 및 검색을 위한 커맨드라인 도구를 제공합니다.

설치 (Installation)

이 프로젝트는 uv를 사용하여 의존성을 관리하는 것을 권장합니다.

# uv 설치 (없는 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 가상환경 생성 및 패키지 설치
uv venv
source .venv/bin/activate
uv pip install assembly-api-client

사용법 (Usage)

1. API 키 설정 (API Key Configuration)

API 키는 두 가지 방식으로 설정할 수 있습니다.

방법 A: 환경 변수 사용 (권장) .env 파일을 생성하거나 환경 변수를 설정합니다.

export ASSEMBLY_API_KEY="YOUR_API_KEY"

방법 B: 클라이언트 직접 주입

client = AssemblyAPIClient(api_key="YOUR_API_KEY")

2. 기본 데이터 조회

import asyncio
from assembly_client.api import AssemblyAPIClient
from assembly_client.generated import Service

async def main():
    # 환경 변수가 설정되어 있다면 api_key 생략 가능
    async with AssemblyAPIClient() as client:
        
        # 서비스 ID 또는 Enum을 사용하여 데이터 조회
        # 예: 국회의원 발의법률안 조회
        data = await client.get_data(Service.국회의원_발의법률안, params={"AGE": "21"})
        
        for item in data:
            print(f"법안명: {item.BILL_NAME}, 발의자: {item.PROPOSER}")

if __name__ == "__main__":
    asyncio.run(main())

3. CLI 사용 (uv 기반)

API 명세 동기화:

uv run python -m assembly_client.cli sync

사용 가능한 API 목록 조회:

uv run python -m assembly_client.cli list

유지보수 (Maintenance)

API 명세 및 Fixture 업데이트

국회 API는 수시로 변경되거나 새로운 서비스가 추가될 수 있습니다. 새로운 API가 추가되면 sync 명령어로 명세를 업데이트하고, 테스트를 위한 Fixture도 새로 받아야 합니다.

이 프로젝트는 매일 자동으로 변경사항을 확인하도록 설정되어 있습니다. 수동으로 업데이트하려면:

# 1. 명세 동기화 및 코드 재생성
./scripts/update_client.sh

# 2. (필요시) 새로운 Fixture 생성
# 새로운 서비스가 추가되었다면 해당 서비스의 샘플 데이터를 받아 테스트에 추가해야 합니다.

개발 및 기여 (Development)

테스트 실행

pytest

코드 재생성 (수동)

./scripts/update_client.sh

라이선스 (License)

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

assembly_api_client-0.1.0.tar.gz (188.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

assembly_api_client-0.1.0-py3-none-any.whl (63.0 kB view details)

Uploaded Python 3

File details

Details for the file assembly_api_client-0.1.0.tar.gz.

File metadata

  • Download URL: assembly_api_client-0.1.0.tar.gz
  • Upload date:
  • Size: 188.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for assembly_api_client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ef30058aa405f6735e9b44d4a716d1a20cf37845f42068e3bdbb340392bb4352
MD5 1a12534506a0d6000356aba6d934989c
BLAKE2b-256 990075127961f3ca811953e4f79572ec9e6130767601c0ff53c4f9c913a25b43

See more details on using hashes here.

File details

Details for the file assembly_api_client-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for assembly_api_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 410188be6c05a99eb6ce4376e40756f643090f6018aa0242979a37cde8445491
MD5 0465e1412c223b25a3a94e43984d6619
BLAKE2b-256 24e38fdd5be634d8e38da2be859fff89531498711a966f22902309610d91516e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page