# Naver News

> This skill should be used when the user asks to "뉴스레터 만들어줘", "뉴스 정리해줘", "최신 뉴스 검색해줘", "뉴스 요약해줘", "뉴스 모아줘", "news newsletter", "뉴스 브리핑". 네이버 뉴스 검색 API로 24시간 내 최신 뉴스를 수집하고, 보기 좋은 HTML 뉴스레터로 만들어줍니다. Make sure to use this skill whenever the user mentions news collection, news summary, or newsletter creation.

- Skill: `fivetaku/naver-news` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add fivetaku/naver-news`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fivetaku/naver-news/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: fivetaku (https://skillmd.com/u/fivetaku)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fivetaku/naver-news

---


# 네이버 뉴스 뉴스레터

> 키워드 하나로 24시간 내 최신 뉴스를 수집해서 뉴스레터 HTML로 만들어줍니다.

## 워크플로우

### Step 0: API 키 확인 (온보딩)
**타입**: script

스킬 실행 전, `.claude/skills/naver-news/.env` 파일에 `NAVER_CLIENT_ID`와 `NAVER_CLIENT_SECRET`이 설정되어 있는지 확인한다.

**.env 파일이 없거나 키가 비어있으면**, 아래 안내를 사용자에게 보여주고 키 입력을 받은 후 `.env` 파일을 생성한다:

```
이 스킬을 사용하려면 네이버 검색 API 키가 필요해요.
처음 한 번만 설정하면 됩니다. 1분이면 끝나요!

━━━ 네이버 검색 API 발급 가이드 ━━━

1. 아래 링크에 접속하세요 (네이버 로그인 필요):
   https://developers.naver.com/apps/#/register

2. 애플리케이션 등록 화면에서:
   - 애플리케이션 이름: 아무거나 (예: "뉴스브리핑")
   - 사용 API: "검색" 선택

3. 비로그인 오픈 API 서비스 환경:
   - "WEB 설정" 선택
   - 웹 서비스 URL: http://localhost/
   (도메인이 없어도 괜찮아요. localhost로 입력하면 됩니다)

4. "등록하기" 클릭

5. 등록 완료 후 "애플리케이션 정보"에서:
   - Client ID  ← 복사
   - Client Secret  ← 복사

두 값을 알려주시면 .env 파일을 만들어드릴게요!
```

사용자가 Client ID와 Client Secret을 알려주면 `.claude/skills/naver-news/.env` 파일을 생성한다:
```
NAVER_CLIENT_ID={입력받은 값}
NAVER_CLIENT_SECRET={입력받은 값}
```

**.env 파일이 이미 있고 키가 설정되어 있으면**, 이 단계를 건너뛰고 Step 1로 바로 진행한다.

### Step 1: 키워드 확인
**타입**: prompt

사용자의 메시지에서 검색 키워드를 추출한다. 키워드가 명확하지 않으면 물어본다.

### Step 1.5: 검색 옵션 선택
**타입**: prompt (AskUserQuestion)

**Q1 — 정렬 방식:**
AskUserQuestion으로 아래 질문을 한다:

```
질문: "뉴스를 어떤 기준으로 모을까요?"
옵션:
- "최신순 (추천)" — 최근 뉴스부터 시간순으로 모읍니다. 오늘/이번주 브리핑에 적합해요.
- "관련도순" — 키워드와 가장 관련 높은 뉴스를 모읍니다. 최근 한 달간 주제 동향 분석에 적합해요.
```

**Q2 — 시간 범위 (최신순 선택 시에만):**
최신순을 선택한 경우에만 AskUserQuestion으로 추가 질문한다:

```
질문: "어느 기간의 뉴스를 모을까요?"
옵션:
- "24시간 (추천)" — 하루 뉴스 브리핑. 대부분의 키워드에 적합해요.
- "6시간" — 긴급 브리핑. 방금 전 뉴스만 빠르게 확인해요.
- "48시간" — 주말/연휴 후 따라잡기. 인기 키워드는 일부 누락될 수 있어요. (API 최대 100건 제한)
```

관련도순을 선택한 경우 시간 범위 질문을 건너뛴다 (시간 필터 없이 관련도 높은 100건 전체 사용).

### Step 2: 뉴스 수집
**타입**: script

Step 1.5에서 선택한 옵션에 따라 스크립트를 실행한다.

- 최신순: `sort=date`, `display=100`, 선택한 시간 범위로 필터링
- 관련도순: `sort=sim`, `display=30`, 시간 필터링 없이 상위 30건 사용 (관련도 높은 순으로 이미 정렬됨)

```bash
python3 .claude/skills/naver-news/scripts/fetch_news.py "{키워드}" ".claude/skills/naver-news/.env"
```

스크립트 실행 시 시간 필터링이 필요 없는 경우(관련도순), 스크립트 결과의 items를 그대로 사용한다.
최신순인 경우, pubDate 기준으로 선택한 시간 범위 이내의 뉴스만 필터링한다.

`total_filtered`가 0이면 사용자에게 "해당 키워드로 뉴스가 없습니다. 다른 키워드를 시도해보세요."라고 안내하고 종료한다.

에러 발생 시 stderr의 JSON 메시지를 읽고, hint 필드의 안내를 사용자에게 전달한다.

### Step 3: 뉴스 요약 및 정리
**타입**: prompt

Step 2의 JSON 결과를 읽고 아래 작업을 수행한다:

1. 각 뉴스의 description을 기반으로 한 줄 요약 작성 (30자 이내)
2. 비슷한 주제끼리 카테고리로 그룹핑 (2-5개 카테고리)
3. 전체 뉴스를 관통하는 핵심 트렌드 인사이트 2-3줄 작성
4. 중복 내용의 뉴스는 대표 1건만 남기고 제거

### Step 4: HTML 뉴스레터 생성
**타입**: generate

Step 3의 정리 결과를 바탕으로 HTML 뉴스레터 파일을 생성한다.

HTML 구조:
- **헤더**: 제목 "{키워드} 뉴스 브리핑", 생성 날짜/시간, 뉴스 건수
- **트렌드 요약**: 핵심 인사이트 박스
- **뉴스 카드**: 카테고리별로 그룹핑된 뉴스 카드 (제목 + 요약 + 출처 + 시간 + 링크)
- **푸터**: "네이버 뉴스 검색 API 기반 · Claude Code로 자동 생성"

스타일 요구사항:
- 모던하고 깔끔한 CSS 인라인 스타일 포함 (외부 파일 의존 없음)
- 모바일 반응형
- 카테고리별 색상 구분
- 뉴스 제목은 원문 링크로 클릭 가능

파일 저장 위치: `newsletter/` 폴더에 `{YYYYMMDD}-{키워드}.html`로 저장한다. newsletter 폴더가 없으면 생성한다.

저장 후 사용자에게 파일 경로를 안내하고, "브라우저에서 열어보세요!"라고 안내한다.

## Scripts
- **`scripts/fetch_news.py`** — 네이버 뉴스 API 호출 + 24시간 필터링 + 중복 제거. .env에서 API 키를 읽고, 결과를 JSON으로 stdout에 출력.

## Settings
| 설정 | 기본값 | 변경 방법 |
|------|--------|-----------|
| 검색 키워드 | (필수 입력) | 사용자가 직접 입력 |
| 시간 범위 | 24시간 | "최근 48시간 뉴스"처럼 요청하면 변경 |
| 뉴스 최대 건수 | 100건 (API 최대) | 변경 불가 (API 제한) |

