From f0eae805e669c01b841e63195017ea4c6f01ef2a Mon Sep 17 00:00:00 2001 From: caadiq Date: Fri, 12 Jun 2026 14:04:42 +0900 Subject: [PATCH] =?UTF-8?q?docs(api):=20=EC=B6=95=EC=A0=9C=20=EB=B4=87=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9(=EB=8C=80=ED=95=99+=EC=9D=BC=EB=B0=98)=20?= =?UTF-8?q?=EB=B0=98=EC=98=81,=20active=5Fmonths=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- docs/api.md | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/docs/api.md b/docs/api.md index e4c0bf1..5eeee23 100644 --- a/docs/api.md +++ b/docs/api.md @@ -441,15 +441,16 @@ X 봇 삭제 ## 관리자 - 축제 봇 (인증 필요) -대학 축제 크롤러 봇. 검색 페이지(memogipost 등)를 크롤링하여 프로미스나인 출연 대학 축제를 +축제 크롤러 봇. 검색 페이지(memogipost 등)를 크롤링하여 프로미스나인 출연 행사를 Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다. +**한 번의 Gemini 호출로 대학 축제와 일반 행사(콘서트·페스티벌·지역 축제 등)를 함께 추출**하며 +`type` 필드(`university`/`general`)로 구분한다. - 이미 처리한 게시글 URL은 `festival_crawl_log`에 기록되어 재요청하지 않음 - 새 게시글이 없으면 Gemini를 호출하지 않음 (무료 티어 RPD 20 제한 대응) -- 장소는 카카오맵 검색으로 자동 매칭, 멤버는 활동 멤버 전체로 등록 -- 같은 학교(캠퍼스명 부분일치) + 날짜 일정이 있으면 중복으로 건너뜀 -- `active_months`로 실행 월을 제한 가능 (대학 축제는 학기 중 한정 시즌). 비활성 월에는 - 크롤링/Gemini 호출을 아예 건너뜀. `null` 또는 12개월 전체 = 항상 실행 +- 장소는 카카오맵 검색으로 자동 매칭(대학 축제=학교명, 일반 행사=장소명), 멤버는 활동 멤버 전체로 등록 +- 중복 체크: 대학 축제는 같은 학교(캠퍼스명 부분일치)+날짜, 일반 행사는 같은 행사명(공백 무시 포함관계)+날짜 +- 일정 subtype: 대학 축제 `university`(학교명 포함), 일반 행사 `general` ### GET /admin/festival-bots 축제 봇 목록 조회 @@ -463,26 +464,22 @@ Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다. ```json { "id": 1, - "name": "대학 축제 봇", + "name": "축제 봇", "search_url": "https://memogipost.tistory.com/search/프로미스나인", "cron_interval": 360, - "active_months": [4, 5, 8, 9], "enabled": true } ``` -`active_months`는 정수 배열(`null`이면 전체 월). 위 예시는 4·5·8·9월에만 실행. - ### POST /admin/festival-bots 축제 봇 추가 **Request Body:** ```json { - "name": "대학 축제 봇", + "name": "축제 봇", "search_url": "https://memogipost.tistory.com/search/프로미스나인", - "cron_interval": 360, - "active_months": [4, 5, 8, 9] + "cron_interval": 360 } ``` @@ -491,7 +488,6 @@ Gemini `url_context`로 추출, 행사(EVENT) 일정을 자동 생성한다. | `name` | string | (필수) | 봇 이름 | | `search_url` | string | (필수) | 크롤링할 검색 페이지 URL | | `cron_interval` | integer | 360 | 동기화 간격 (분). 60 이상은 시간 단위 cron으로 변환 | -| `active_months` | integer[] \| null | null | 실행할 월(1~12). `null`/빈 배열/12개 전체는 항상 실행 | ### PUT /admin/festival-bots/:id 축제 봇 수정 (부분 업데이트 가능)