다음 카페 검색
플레이그라운드에서 수집 →채널 코드 daum_cafe_search · 수집 환경 linux
요청 파라미터
아래 값들을 POST /api/v1/collect 의 params 객체에 담아 보냅니다.
| 키 | 타입 | 필수 | 기본 | 설명 |
|---|---|---|---|---|
| keyword | text | 예 | — | 다음 카페 검색어(카카오 Daum 검색 API, 예: 로얄캐닌) |
| sort | enum | — | latest | 최신순=latest(카카오 recency) · 정확도순=relevance(accuracy). 정렬마다 노출 창(약 1,000건)이 달라 둘을 합치면 조금 더 모입니다 |
| limit | number | — | 50 | 최대 수집 글 수. 한 키워드당 카카오가 노출하는 글은 약 1,000건(pageable_count)까지 — 기간을 나눠도 늘지 않으며, 요청 상한(50페이지×50건=2,500)은 도달하지 않습니다 |
| start_date | date (YYYY-MM-DD) | — | — | 비우면 제한 없음. ⚠️ 카카오 API에 기간 옵션이 없어 받은 결과에서 거릅니다(최신순이면 시작일 이전 글에서 중단, 정확도순이면 끝까지 훑음). 노출 창(약 1,000건) 밖의 옛 글은 기간을 지정해도 받을 수 없습니다 |
| end_date | date (YYYY-MM-DD) | — | — | 당일 포함. 비우면 오늘까지. 시작·종료 중 하나만 넣어도 됩니다(결과 필터) |
| collect_body | bool | — | false | 켜면 글마다 다음 카페 모바일 페이지를 크롬으로 열어 전체 본문 + 작성자·조회수·댓글 수·게시판명을 보강(글당 1회, 느려짐). 회원 전용 글은 본문 대신 요약이 남고 extra.member_only=true. 끄면 검색 결과의 제목·요약(스니펫)만 수집 |
| collect_comments | bool | — | false | 켜면 댓글·대댓글까지 수집(각 글 extra.comments[], 20개 단위 페이지를 따라감). 본문 수집과 같은 크롬 세션에서 이어서 읽습니다. 회원 전용 글은 댓글이 비고 member_only=true. 댓글 시각은 날짜 단위 |
| exclude_keywords | text | — | — | 이 단어가 제목·요약에 들어간 글은 수집 단계에서 제외(상세 열람 전 → 빠르고 상한 미차감). 쉼표로 여러 개, 한 단어 안 띄어쓰기 허용. 본문 수집을 켜면 받아온 본문에서도 한 번 더 제외 |
| refresh | enum | — | incremental | incremental(기본): 허브가 이미 수집한 글 중 규칙에 맞는 것은 다시 쓸 수 있습니다(게시 7일 미만 글은 항상 새로 수집). full: 이번 요청은 전부 새로 수집합니다. 결과 형식은 같습니다 |
start_date ~ end_date)검색은 최신순이라 위에서부터 훑어 내려갑니다.
- 둘 다 비우면 → 가장 최신 글부터
limit개수까지 수집합니다. start_date만 → 그 날짜 이후 글만 (그보다 오래된 글을 만나면 수집 종료).end_date만 → 그 날짜까지(당일 포함). 그보다 최신 글은 건너뜁니다.- 둘 다 → 두 날짜 사이 구간만 수집.
exclude_keywords)이 단어가 들어간 글은 수집 단계에서 걸러집니다. 쉼표(
,)로 여러 개를 넣고,
한 단어 안에 띄어쓰기도 쓸 수 있습니다(예: "무료 나눔, 광고" → 무료 나눔·광고 두 개).
대소문자는 구분하지 않고 부분 일치로 판정합니다.
- 기본은 제목 기준 — 상세 요청을 보내기 전에 걸러서 빠르고, 수집 상한(
limit)도 차감하지 않습니다. - 본문 수집(
collect_body: true)을 켜면, 이미 받아온 본문에서도 한 번 더 걸러냅니다(추가 요청 없음). - 비우면 → 제외 없이 전부 수집.
collect_comments: true)기본은 제목·본문만 HTTP로 빠르게 수집합니다. 댓글까지 받으려면 이 값을 켜세요. 댓글은 JS로 로드되어 글마다 Chrome으로 접속하므로 시간이 더 걸립니다(댓글 0개 글은 건너뜀). 수집된 댓글은 각 글의
extra.comments[] 배열에 담깁니다.
카카오 Daum 검색 API는 한 검색어에 대해 노출 가능 건수(
pageable_count, 약 1,000건)까지만 페이지를 내려주고 기간 파라미터가 없습니다.
- 최신순은 "가장 최근 약 1,000건", 정확도순은 "관련도 상위 약 1,000건"이 창입니다.
start_date·end_date는 워커가 그 창 안에서 거르는 것이라 창 밖의 옛 글은 받을 수 없습니다(네이버 카페 검색과 다름). - 더 모으려면 검색어를 세분화하거나 정확도순을 함께 돌리세요. 매일 최신순으로 반복 수집하면 새 글은
post_id기준으로 계속 누적됩니다. - 상세 수집(본문·댓글)은 API가 아니라 크롬으로 다음 카페 모바일 페이지를 글마다 여는 방식입니다. 회원 전용 글은 본문/댓글 대신 요약만 담기고
extra.member_only=true로 표시됩니다(오류 아님). - 결과가
limit보다 적으면 오류가 아니라 노출 창 소진(is_end)·기간 필터·제외 키워드 때문입니다.
요청 예시
응답 (202 Accepted)
요청은 즉시 큐에 적재되고 request_id 를 돌려줍니다. 실제 수집은 워커가 비동기로 처리합니다.
결과 조회 — GET /requests/{id}
같은 API 키로 request_id 를 조회합니다. 상태에 따라 응답이 달라집니다.
결과(items)는 요청별로 보관되므로 같은 글이 다른 요청(다른 키워드·재수집)에 겹쳐도 이 요청의 결과는 그대로입니다 —
여러 요청에 걸친 중복 정리는 post_id로 호출 쪽에서 하세요.
보존 기간은 완료 후 90일입니다. 보존 기간이 지나면 items 는 빈 배열이고 items_expired: true, items_keep_days 가 함께 옵니다(status 는 그대로 done).
진행 중 (pending / running)
아직 끝나지 않았으면 progress 로 진행 상황만 옵니다(items 없음).
완료 (done) — 댓글 포함
status 가 done 이면 data.items[] 에 결과가 담깁니다.
실패 시엔 status: "failed" 와 error 가 옵니다.
실패 (failed)
status 가 failed 면 error 에 사유가 옵니다(items 없음).
일시적 실패는 자동 재시도되며, 위 응답은 마지막 시도 기준입니다.
최상위 data에는 항상 request_id·channel·status·external_ref·result_count·started_at·finished_at·duration_ms·duration_sec·created_at·updated_at이 포함되고, 상태에 따라 items(done)·progress+elapsed_ms(진행 중)·error(failed/cancelled)가 추가됩니다. duration_*는 허브가 잰 수집 소요 시간(시작~종료) — 자세히는 비동기 & 콜백. 요청을 잘못 시작했다면 취소 API로 중단할 수 있습니다.
결과 필드 (items[])
| 필드 | 설명 |
|---|---|
| post_id | 글 고유 ID — 카페슬러그/게시판코드/글번호(다음 카페 주소의 세 단). 재수집 중복 제거 키 |
| url | 카페 글 주소 cafe.daum.net/슬러그/게시판코드/글번호 |
| title / body | title=글 제목(검색어 강조 태그 제거됨). ⚠️ 카카오 API는 긴 제목을 약 30자에서 ...로 잘라 주므로 목록만 수집하면 잘린 제목이 올 수 있고, 상세 수집을 켜면 글 페이지의 전체 제목으로 복원됩니다(회원 전용 글은 복원 불가) / body는 기본(collect_body=false)이면 카카오 검색 요약(스니펫), collect_body=true면 전체 본문 — 단 회원 전용 글은 요약이 유지되며 extra.member_only=true가 붙습니다 |
| author | 작성자 닉네임 — 상세 수집(collect_body/collect_comments) 시에만 채워집니다(기본 null, 카카오 API 미제공) |
| posted_at | 작성 시각 (ISO8601, KST) — 카카오 API의 초 단위 작성시각(posted_at_raw에 원문 ISO 8601 보존). 상세 페이지는 날짜만 주므로 상세 수집을 켜도 이 값이 유지됩니다 |
| views / comment_count | views=조회수 — 상세 수집 시 채워짐, 목록만이면 null(회원 전용 글도 null) / comment_count=기본 0, 상세 수집 시 실제 댓글 수 |
| recommends | 미제공 — 항상 null(다음 카페 좋아요 수는 비로그인으로 제공되지 않음) |
| source | 다음 카페 / 카페명 |
| extra.cafe_name | 카페 이름 |
| extra.cafe_slug | 카페 슬러그(주소의 카페 부분) |
| extra.board_code | 게시판 코드(주소의 두 번째 단) |
| extra.article_no | 글번호 |
| extra.menu | 게시판(메뉴) 이름 — 상세 수집 시, 아니면 null |
| extra.snippet | 카카오 검색 요약문 |
| extra.thumbnail | 대표 썸네일 URL 문자열(없으면 null) |
| extra.sort | 정렬 값(요청값) |
| extra.member_only | 회원 전용 게시판이라 본문/댓글을 못 읽었으면 true, 읽었으면 false, 상세 수집을 껐으면 null(확인 안 함) |
| extra.comments | 댓글 배열 — collect_comments=true일 때만 있고(끄면 키 없음), 회원 전용 글은 빈 배열 |
| extra.source_kind | daum_cafe_search |
| extra.comments | 댓글 배열(아래 표) — collect_comments=true일 때 |
- 수집 한도 — 키워드당 약 1,000건. 카카오가 한 검색어로 노출하는 글(
pageable_count)은 검색 총계(total_count)와 무관하게 약 1,000건에서 끝납니다(최신순이면 가장 최근 약 1,000건, 정확도순이면 관련도 상위 약 1,000건). 요청 상한(50페이지×50건)은 도달하지 않습니다. - 기간(
start_date~end_date)은 창을 넓히지 않습니다. 카카오 API에 기간 옵션이 없어 워커가 받은 결과에서 거릅니다(최신순이면 시작일 이전 글에서 조기 중단). 네이버 카페 검색처럼 기간을 나눠 더 모으는 방법이 없으며, 노출 창 밖의 옛 글은 어떤 기간을 넣어도 받을 수 없습니다. 더 모으려면 검색어를 세분화(예: "로얄캐닌 키튼", "로얄캐닌 습식")하거나 정확도순을 병행하세요. - 상세 수집(
collect_body·collect_comments)은 크롬으로 글마다 1회 다음 카페 모바일 페이지를 엽니다(둘 다 켜도 열람 수는 같고 댓글은 20개 단위 페이지만큼 추가). 목록만 수집할 때보다 훨씬 느리고, 작성자·조회수·댓글 수·게시판명은 이때만 채워집니다. 회원 전용 글은 안내 페이지가 떠서 본문·댓글 대신 요약만 담기고extra.member_only=true(오류·차단 아님). - 댓글은 대댓글까지 수집되며
is_reply로 구분됩니다. 댓글 시각date는 날짜 단위(YYYY-MM-DD)입니다 — 다음 카페 페이지가 하루 이상 지난 댓글은 날짜만, 당일 댓글은 시각만(00:13), 방금 댓글은19분 전처럼 표기하므로 당일·상대 표기는 수집일 기준으로 날짜를 채우고 원문 표기를date_raw에 그대로 둡니다(당일 댓글의 시각은date_raw로 확인). 글자 없이 스티커·이미지만 있는 댓글은text가[이미지]입니다. 댓글 수집을 켰을 때extra.comments는 항상 배열이며 회원 전용 글은 빈 배열(member_only=true)입니다. - API 키·쿼터 — 카카오 REST API 키는 허브 관리자 "수집 인증"에 채널
daum_cafe_search로 등록합니다(여러 개면 작업마다 번갈아 사용). 카카오 앱당 카페 검색 일 30,000회(전체 깊이 검색 1건 = 20회)이며 일간 쿼터를 다 쓴 키는 다음 자정까지 자동 보류되고, 모든 키가 보류되면 작업이 실패하지 않고 대기합니다.
댓글 필드 (extra.comments[])
| 필드 | 설명 |
|---|---|
| comment_id | 댓글 고유 ID |
| author | 작성자 |
| text | 내용 — 글자 없이 이미지·스티커(디시콘 등)만 있는 댓글은 [이미지] 같은 대체 텍스트 또는 빈 문자열 |
| date | 작성 시각 — 이 채널은 날짜 단위(YYYY-MM-DD). 당일 댓글(페이지가 시각만 표기)·상대 표기는 수집일 기준 |
| date_raw | 페이지 원문 표기 — 26.09.21(날짜) · 00:13(당일, 시각만) · 19분 전(방금). 당일 댓글의 시각이 필요하면 이 값을 쓰세요 |
| is_reply | 대댓글 여부(true=답글) |
결과 수신(폴링·콜백) 방식은 비동기 & 콜백을 참고하세요.