# Japan Senior News Collector 일본 Yahoo Japan에서 시니어 관련 뉴스를 자동으로 수집하고 관리하는 웹 애플리케이션입니다. ## 주요 기능 ### 뉴스 수집 - Yahoo Japan에서 4개 카테고리 뉴스 자동 수집 - 건강 (Health) - 생활 (Lifestyle) - 경제 (Economy) - 사회 (Society) - 각 카테고리별 최대 5개 기사 수집 - 기사 본문 콘텐츠 자동 추출 - 콘텐츠가 없는 기사 자동 필터링 ### 웹 UI - 카테고리별 뉴스 카드 뷰 - 기사 클릭 시 상세 모달 표시 - 날짜별 히스토리 조회 - 다크모드 지원 - 통계 대시보드 (카테고리별 기사 수) - JSON 다운로드 기능 ## 기술 스택 - **Backend**: FastAPI, Python 3.9 - **Database**: SQLite - **Frontend**: HTML, Tailwind CSS, JavaScript - **Scraping**: BeautifulSoup4, Requests - **Container**: Docker ## 설치 및 실행 ### Docker 실행 (권장) ```bash # 이미지 빌드 docker build -t japan-news . # 컨테이너 실행 docker run -d --name japan-news -p 8001:8000 japan-news ``` ### 로컬 실행 ```bash # 가상환경 생성 및 활성화 python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 의존성 설치 pip install -r requirements.txt # 서버 실행 uvicorn main:app --reload --port 8000 ``` ## API 엔드포인트 ### GET / 웹 UI 페이지 반환 ### GET /api/today 오늘의 뉴스 조회. 오늘 수집된 기사가 없으면 자동으로 수집 후 반환. **응답 예시:** ```json { "date": "2025-12-15", "articles": { "Economy": [...], "Society": [...], "Lifestyle": [...], "Health": [...] }, "total_count": 19 } ``` ### GET /api/news 뉴스 목록 조회 **Query Parameters:** - `date` (optional): 조회할 날짜 (YYYY-MM-DD 형식) ### POST /api/collect-news 뉴스 수집 실행 **응답 예시:** ```json { "status": "success", "collected_count": 20, "details": { "Economy": 5, "Society": 5, "Lifestyle": 5, "Health": 5 } } ``` ### GET /api/dates 수집된 날짜 목록 조회 **응답 예시:** ```json { "dates": ["2025-12-15", "2025-12-14", "2025-12-13"] } ``` ### GET /api/download-json 뉴스 데이터 JSON 파일 다운로드 **Query Parameters:** - `date` (optional): 다운로드할 날짜 (YYYY-MM-DD 형식) ## 프로젝트 구조 ``` japan-news/ ├── main.py # FastAPI 애플리케이션 ├── database.py # SQLite 데이터베이스 관리 ├── scraper.py # Yahoo Japan 뉴스 스크래퍼 ├── requirements.txt # Python 의존성 ├── Dockerfile # Docker 설정 ├── .dockerignore # Docker 빌드 제외 파일 ├── static/ │ └── index.html # 웹 UI └── README.md ``` ## 데이터베이스 스키마 ### articles 테이블 | 컬럼 | 타입 | 설명 | |------|------|------| | id | INTEGER | Primary Key | | title | TEXT | 기사 제목 | | url | TEXT | 기사 URL (UNIQUE) | | image_url | TEXT | 썸네일 이미지 URL | | published_date | TEXT | 발행일 | | category | TEXT | 카테고리 | | source | TEXT | 출처 | | collected_at | TEXT | 수집 시간 (ISO format) | | content | TEXT | 기사 본문 | ## 외부 연동 `/api/today` 엔드포인트를 사용하면 외부 시스템에서 오늘의 뉴스를 쉽게 조회할 수 있습니다. ```bash # 오늘의 뉴스 조회 (없으면 자동 수집) curl http://localhost:8001/api/today ``` ## Docker 관리 명령어 ```bash # 로그 확인 docker logs -f japan-news # 컨테이너 중지 docker stop japan-news # 컨테이너 시작 docker start japan-news # 컨테이너 삭제 docker rm -f japan-news # 이미지 재빌드 후 실행 docker rm -f japan-news && docker build -t japan-news . && docker run -d --name japan-news -p 8001:8000 japan-news ``` ## 라이선스 MIT License