docs(api): 축제 봇 통합(대학+일반) 반영, active_months 제거
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
d1ee28e308
commit
f0eae805e6
1 changed files with 9 additions and 13 deletions
22
docs/api.md
22
docs/api.md
|
|
@ -441,15 +441,16 @@ X 봇 삭제
|
||||||
|
|
||||||
## 관리자 - 축제 봇 (인증 필요)
|
## 관리자 - 축제 봇 (인증 필요)
|
||||||
|
|
||||||
대학 축제 크롤러 봇. 검색 페이지(memogipost 등)를 크롤링하여 프로미스나인 출연 대학 축제를
|
축제 크롤러 봇. 검색 페이지(memogipost 등)를 크롤링하여 프로미스나인 출연 행사를
|
||||||
Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다.
|
Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다.
|
||||||
|
**한 번의 Gemini 호출로 대학 축제와 일반 행사(콘서트·페스티벌·지역 축제 등)를 함께 추출**하며
|
||||||
|
`type` 필드(`university`/`general`)로 구분한다.
|
||||||
|
|
||||||
- 이미 처리한 게시글 URL은 `festival_crawl_log`에 기록되어 재요청하지 않음
|
- 이미 처리한 게시글 URL은 `festival_crawl_log`에 기록되어 재요청하지 않음
|
||||||
- 새 게시글이 없으면 Gemini를 호출하지 않음 (무료 티어 RPD 20 제한 대응)
|
- 새 게시글이 없으면 Gemini를 호출하지 않음 (무료 티어 RPD 20 제한 대응)
|
||||||
- 장소는 카카오맵 검색으로 자동 매칭, 멤버는 활동 멤버 전체로 등록
|
- 장소는 카카오맵 검색으로 자동 매칭(대학 축제=학교명, 일반 행사=장소명), 멤버는 활동 멤버 전체로 등록
|
||||||
- 같은 학교(캠퍼스명 부분일치) + 날짜 일정이 있으면 중복으로 건너뜀
|
- 중복 체크: 대학 축제는 같은 학교(캠퍼스명 부분일치)+날짜, 일반 행사는 같은 행사명(공백 무시 포함관계)+날짜
|
||||||
- `active_months`로 실행 월을 제한 가능 (대학 축제는 학기 중 한정 시즌). 비활성 월에는
|
- 일정 subtype: 대학 축제 `university`(학교명 포함), 일반 행사 `general`
|
||||||
크롤링/Gemini 호출을 아예 건너뜀. `null` 또는 12개월 전체 = 항상 실행
|
|
||||||
|
|
||||||
### GET /admin/festival-bots
|
### GET /admin/festival-bots
|
||||||
축제 봇 목록 조회
|
축제 봇 목록 조회
|
||||||
|
|
@ -463,26 +464,22 @@ Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다.
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "대학 축제 봇",
|
"name": "축제 봇",
|
||||||
"search_url": "https://memogipost.tistory.com/search/프로미스나인",
|
"search_url": "https://memogipost.tistory.com/search/프로미스나인",
|
||||||
"cron_interval": 360,
|
"cron_interval": 360,
|
||||||
"active_months": [4, 5, 8, 9],
|
|
||||||
"enabled": true
|
"enabled": true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
`active_months`는 정수 배열(`null`이면 전체 월). 위 예시는 4·5·8·9월에만 실행.
|
|
||||||
|
|
||||||
### POST /admin/festival-bots
|
### POST /admin/festival-bots
|
||||||
축제 봇 추가
|
축제 봇 추가
|
||||||
|
|
||||||
**Request Body:**
|
**Request Body:**
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "대학 축제 봇",
|
"name": "축제 봇",
|
||||||
"search_url": "https://memogipost.tistory.com/search/프로미스나인",
|
"search_url": "https://memogipost.tistory.com/search/프로미스나인",
|
||||||
"cron_interval": 360,
|
"cron_interval": 360
|
||||||
"active_months": [4, 5, 8, 9]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -491,7 +488,6 @@ Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다.
|
||||||
| `name` | string | (필수) | 봇 이름 |
|
| `name` | string | (필수) | 봇 이름 |
|
||||||
| `search_url` | string | (필수) | 크롤링할 검색 페이지 URL |
|
| `search_url` | string | (필수) | 크롤링할 검색 페이지 URL |
|
||||||
| `cron_interval` | integer | 360 | 동기화 간격 (분). 60 이상은 시간 단위 cron으로 변환 |
|
| `cron_interval` | integer | 360 | 동기화 간격 (분). 60 이상은 시간 단위 cron으로 변환 |
|
||||||
| `active_months` | integer[] \| null | null | 실행할 월(1~12). `null`/빈 배열/12개 전체는 항상 실행 |
|
|
||||||
|
|
||||||
### PUT /admin/festival-bots/:id
|
### PUT /admin/festival-bots/:id
|
||||||
축제 봇 수정 (부분 업데이트 가능)
|
축제 봇 수정 (부분 업데이트 가능)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue