서울 120개 주요 지역의 혼잡도 데이터를 수집하고, 조회 API로 제공하는 프로젝트입니다.
수집기는 main.py, API 서버는 api.py로 실행합니다.
uv설치- Python
3.11이상 (.python-version기준, uv가 자동으로 관리) - MySQL 8.x
uv sync.env.example을 복사해 .env를 만들고 값을 채웁니다.
copy .env.example .env필수 값:
DATABASE_URLCITYDATA_API_KEY
예시:
DATABASE_URL=mysql+aiomysql://localon:your_password@127.0.0.1:3306/local_on
CITYDATA_API_KEY=your_seoul_openapi_keymysql -h 127.0.0.1 -u root -p -e "CREATE DATABASE IF NOT EXISTS local_on CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"필요하면 앱 전용 계정도 생성:
CREATE USER 'localon'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON local_on.* TO 'localon'@'localhost';
FLUSH PRIVILEGES;uv run python -c "import asyncio; from app.domain import create_schema; asyncio.run(create_schema())"1회 실행:
uv run python main.py --once주기 실행:
uv run python main.py주기(초)는 .env의 COLLECTOR_INTERVAL_SECONDS로 제어합니다.
uv run python api.py접속:
- Swagger UI:
http://localhost:8000/docs - OpenAPI JSON:
http://localhost:8000/openapi.json
uv run pytestGET /main
- 메인 화면용 지역 목록 + 트렌드 반환
- 파라미터:
lat,lng(선택) lat/lng를 주면 거리순으로 정렬하지만, 현재는 활성 지역 전체를 반환
GET /areas/{area_id}
- 특정 지역 상세 정보 반환
- 파라미터:
area_id(필수),date(선택,YYYY-MM-DD) - 혼잡도, 시간대 그래프, 추천시간, 수요/상권/날씨 포함
GET /search
- 지역 키워드 검색
- 파라미터:
q(필수)
이 프로젝트는 서울 열린데이터광장 OpenAPI를 사용합니다.
citydataAPI
- 지역별 실시간 도시데이터(혼잡/날씨/상권 등)
- 템플릿:
CITYDATA_URL_TEMPLATE
sDoTPeopleAPI
- S-DoT 유동인구(센서) 데이터
- 템플릿:
SDOT_URL_TEMPLATE - 서비스명:
SDOT_SERVICE_NAME(기본값sDoTPeople)
키 정책:
CITYDATA_API_KEY하나를citydata/sDoTPeople모두에 공통 사용
- 서울 열린데이터광장 접속:
https://data.seoul.go.kr - 회원가입/로그인
- Open API 메뉴에서 인증키 신청
- 발급된 일반 인증키 확인
.env의CITYDATA_API_KEY에 설정