Files
collect-japan-news/README.md
kihong.kim 56a6de61ce Initial commit: Japan Senior News Collector
- FastAPI backend with news scraping from Yahoo Japan
- SQLite database for article storage
- Web UI with dark mode, article modal, statistics dashboard
- Docker support for containerized deployment
- API endpoints: /api/today, /api/news, /api/collect-news, /api/dates, /api/download-json
- Auto-collect feature when requesting today news
- Content filtering for articles without body text
2025-12-15 15:55:37 +09:00

3.8 KiB

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 실행 (권장)

# 이미지 빌드
docker build -t japan-news .

# 컨테이너 실행
docker run -d --name japan-news -p 8001:8000 japan-news

로컬 실행

# 가상환경 생성 및 활성화
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

오늘의 뉴스 조회. 오늘 수집된 기사가 없으면 자동으로 수집 후 반환.

응답 예시:

{
  "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

뉴스 수집 실행

응답 예시:

{
  "status": "success",
  "collected_count": 20,
  "details": {
    "Economy": 5,
    "Society": 5,
    "Lifestyle": 5,
    "Health": 5
  }
}

GET /api/dates

수집된 날짜 목록 조회

응답 예시:

{
  "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 엔드포인트를 사용하면 외부 시스템에서 오늘의 뉴스를 쉽게 조회할 수 있습니다.

# 오늘의 뉴스 조회 (없으면 자동 수집)
curl http://localhost:8001/api/today

Docker 관리 명령어

# 로그 확인
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