# BlogAuto 사용 가이드

## 개요

**BlogAuto**는 네이버 블로그와 티스토리에 포스트를 자동으로 발행하는 Python 도구입니다. Node.js 기반 viruagent-cli를 Python(httpx)으로 포팅했으며, Playwright 브라우저 자동화 대신 fetch API 기반 HTTP 요청을 사용합니다.

## 인증 설정

### 세션 쿠키 저장 구조

각 플랫폼의 인증 쿠키를 JSON 파일로 저장합니다. `.sessions/` 디렉토리를 생성하고 다음 형식으로 쿠키를 저장하세요:

```json
{
  "cookies": [
    {"name": "NID_AUT", "value": "...", "domain": ".naver.com"},
    {"name": "NID_SES", "value": "...", "domain": ".naver.com"}
  ]
}
```

### 쿠키 획득 방법

1. 웹 브라우저 개발자 도구(F12) 열기
2. Application → Cookies 탭에서 필요한 쿠키 복사
3. 위 JSON 형식으로 저장

**네이버 블로그**: `NID_AUT`, `NID_SES` → `.sessions/naver-session.json`
**티스토리**: `TSSESSION` → `.sessions/tistory-session.json`

### 환경변수 설정

```bash
export NAVER_SESSION_PATH=.sessions/naver-session.json
export TISTORY_SESSION_PATH=.sessions/tistory-session.json
export TISTORY_BLOG_NAME=your-blog-name
export BLOGAUTO_TIMEOUT=20  # HTTP 요청 타임아웃(초)
```

## 사용 방법

### 네이버 블로그 발행

```python
from publisher.naver_blog import NaverBlogPublisher

pub = NaverBlogPublisher()
result = pub.publish(
    title="글 제목",
    content="<p>HTML 본문</p>",
    category_no="0",  # 카테고리 번호
    tags="태그1,태그2",
    visibility="public"  # 또는 "private"
)
print(f"발행 완료: {result.url}")
```

비공개로 임시 저장하기:
```python
result = pub.save_draft(title="제목", content="<p>본문</p>")
```

### 티스토리 발행

```python
from publisher.tistory import TistoryPublisher

pub = TistoryPublisher()
result = pub.publish(
    title="글 제목",
    content="<p>HTML 본문</p>",
    category=0,  # 카테고리 ID (0=미분류)
    tags="태그1,태그2",
    visibility=20  # 0=비공개, 15=보호, 20=발행, 30=공개
)
print(f"발행 완료: {result.url}")
```

## 주요 기능

### 이미지 업로드 (네이버)

```python
result = pub.publish(
    title="제목",
    content="본문",
    image_urls=["https://example.com/image1.jpg", "https://example.com/image2.jpg"]
)
```

### 이미지 업로드 (티스토리)

```python
image_data = open("photo.jpg", "rb").read()
response = pub.upload_image(image_data, "photo.jpg")
image_url = response.get("url")
```

### 카테고리 조회

```python
categories = pub.get_categories()
for cat in categories:
    print(f"{cat.id}: {cat.name}")
```

### 발행 상태 조회 (티스토리)

```python
posts = pub.get_posts()
status = pub._rate_limit.get_status()
print(f"오늘 발행: {status['count']}/{status['limit']}")
```

## 주의사항

**⚠️ 실제 발행은 제이회장님 승인 후에만 수행하세요.**

- **네이버**: 일일 권장 한도 10회, 비공식 SE 에디터 API 사용
- **티스토리**: 일일 권장 한도 15회, 내부 관리 API 사용
- **세션 만료**: `SessionExpiredError` 발생 시 재로그인 필요
- **환경**: httpx >= 0.27.0, playwright >= 1.40.0 필요

## 관련 파이프라인

- **blog-writer**: 블로그 콘텐츠 생성 (HTML 출력)
- **blog-dominance**: 블로그 SEO 최적화
- **blog-publish-naver**: 네이버 발행 스킬
- **blog-publish-tistory**: 티스토리 발행 스킬

파이프라인: blog-writer → blog-publish-naver/tistory

## 테스트

모든 주요 기능은 mock 기반 pytest로 검증됩니다 (41개 테스트 통과).
