Scraper Hub API

네이버 카페(가입)

플레이그라운드에서 수집 →

채널 코드 naver_cafe_member · 수집 환경 linux

회원 전용 네이버 카페에서 키워드로 글을 수집합니다. 네이버 아이디·비밀번호로 실제 브라우저 로그인 후 검색하며, 세션(쿠키)은 워커가 재사용합니다(비밀번호는 마스킹·로그 미기록). 카페는 슬러그/URL만 넣으면 cafe_id를 자동 해석합니다(예: robotclear). 제목·본문(collect_body)·댓글(collect_comments)·기간(start/end_date)을 지원합니다. ⚠️ 로그인이 필요한 채널이라 차단에 민감 — 과도한 호출/짧은 간격은 피하세요.

요청 파라미터

아래 값들을 POST /api/v1/collectparams 객체에 담아 보냅니다.

타입필수기본설명
cafe text 카페 슬러그 또는 주소(예: robotclear 또는 https://cafe.naver.com/robotclear). 숫자 cafe_id는 자동 해석
keyword text 카페 내 검색 키워드
naver_id text 회원 전용 카페 접근용. 세션은 쿠키로 재사용됨
naver_pw password 마스킹 입력. 로그/응답에 노출되지 않습니다
limit number 100 최대 수집 글 수
max_pages number 10 검색 결과 페이지 탐색 한도
start_date date (YYYY-MM-DD) 비우면 제한 없음. 최신순이라 이 날짜 이전 글을 만나면 종료
end_date date (YYYY-MM-DD) 당일 포함. 비우면 오늘까지
cafe_menu text 특정 게시판만. 비우면 0(전체글)
collect_body bool true 글 상세를 받아 본문·정확한 시각 보강
collect_comments bool false 상세의 댓글까지 수집(각 글 extra.comments[])
exclude_keywords text 이 단어가 들어간 글은 제외. 쉼표로 여러 개, 한 단어 안 띄어쓰기 허용
수집 기간(start_date ~ end_date)
검색은 최신순이라 위에서부터 훑어 내려갑니다.
  • 둘 다 비우면 → 가장 최신 글부터 limit 개수까지 수집합니다.
  • start_date만 → 그 날짜 이후 글만 (그보다 오래된 글을 만나면 수집 종료).
  • end_date만 → 그 날짜까지(당일 포함). 그보다 최신 글은 건너뜁니다.
  • 둘 다 → 두 날짜 사이 구간만 수집.
제외 키워드(exclude_keywords)
이 단어가 들어간 글은 수집 단계에서 걸러집니다. 쉼표(,)로 여러 개를 넣고, 한 단어 안에 띄어쓰기도 쓸 수 있습니다(예: "무료 나눔, 광고"무료 나눔·광고 두 개). 대소문자는 구분하지 않고 부분 일치로 판정합니다.
  • 기본은 제목 기준 — 상세 요청을 보내기 전에 걸러서 빠르고, 수집 상한(limit)도 차감하지 않습니다.
  • 본문 수집(collect_body: true)을 켜면, 이미 받아온 본문에서도 한 번 더 걸러냅니다(추가 요청 없음).
  • 비우면 → 제외 없이 전부 수집.
댓글 수집(collect_comments: true)
기본은 제목·본문만 HTTP로 빠르게 수집합니다. 댓글까지 받으려면 이 값을 켜세요. 댓글은 JS로 로드되어 글마다 Chrome으로 접속하므로 시간이 더 걸립니다(댓글 0개 글은 건너뜀). 수집된 댓글은 각 글의 extra.comments[] 배열에 담깁니다.
로그인 실패 시 동작 — 자격증명·인증 오류는 즉시 종료(재시도 없음)
회원 전용 카페라 네이버 로그인이 필요합니다. 아래 오류는 다시 시도해도 같은 결과이고, 반복 로그인은 계정 잠금까지 부를 수 있어 한 번 시도 후 곧바로 failed로 끝냅니다(자동 재시도 안 함). 일시적 오류(페이지 로드 실패·네트워크 등)만 기존처럼 재시도합니다. 사유는 GET /requests/{id}error로 옵니다.
  • 네이버 로그인 실패 — 아이디/비밀번호 확인naver_id·naver_pw 값을 다시 확인하세요.
  • 네이버 캡차(보안문자) / 새 기기 인증 / 2단계 인증 필요 → 해당 계정으로 이 수집 서버에서 1회 수동 로그인·인증 후 다시 요청하세요(이후 세션 쿠키 재사용).
  • 회원 전용 카페 — 접근 불가 / cafe_id 자동 해석 실패 → 그 계정이 카페에 가입(회원)되어 있는지, cafe 슬러그/URL이 맞는지 확인하세요.
naver_id·naver_pw아예 빼고 보내면 요청 즉시 422 invalid_params로 거부됩니다(잡 생성 안 됨). 위 failed는 값은 보냈으나 틀렸을 때입니다. 비밀번호는 로그·응답 어디에도 노출되지 않습니다.

요청 예시

curl -X POST https://scraper.conbus.co.kr/api/v1/collect \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "channel": "naver_cafe_member", "params": { "cafe": "robotclear", "keyword": "로얄캐닌", "naver_id": "your_naver_id", "naver_pw": "YOUR_PASSWORD", "limit": 100, "max_pages": 10, "start_date": "2026-06-01", "end_date": "2026-06-15", "collect_body": true, "collect_comments": true, "exclude_keywords": "광고, 협찬" } }'

응답 (202 Accepted)

요청은 즉시 큐에 적재되고 request_id 를 돌려줍니다. 실제 수집은 워커가 비동기로 처리합니다.

{ "success": true, "data": { "request_id": 42, "channel": "naver_cafe_member", "status": "pending", "status_url": "https://scraper.conbus.co.kr/api/v1/requests/42" } }

결과 조회 — GET /requests/{id}

같은 API 키로 request_id 를 조회합니다. 상태에 따라 응답이 달라집니다.

진행 중 (pending / running)

아직 끝나지 않았으면 progress 로 진행 상황만 옵니다(items 없음).

{ "success": true, "data": { "request_id": 42, "channel": "naver_cafe_member", "status": "running", "external_ref": null, "result_count": null, "started_at": "2026-06-16T09:00:05+09:00", "finished_at": null, "duration_ms": null, "duration_sec": null, "created_at": "2026-06-16T09:00:00+09:00", "updated_at": "2026-06-16T09:01:30+09:00", "progress": { "count": 12, "phase": "comments" }, "elapsed_ms": 85000 } }

완료 (done) — 댓글 포함

statusdone 이면 data.items[] 에 결과가 담깁니다. 실패 시엔 status: "failed"error 가 옵니다.

{ "success": true, "data": { "request_id": 42, "channel": "naver_cafe_member", "status": "done", "external_ref": null, "result_count": 1, "started_at": "2026-06-16T09:00:05+09:00", "finished_at": "2026-06-16T09:02:00+09:00", "duration_ms": 115000, "duration_sec": 115, "created_at": "2026-06-16T09:00:00+09:00", "updated_at": "2026-06-16T09:02:00+09:00", "items": [ { "post_id": "29434212/45678", "url": "https://cafe.naver.com/f-e/cafes/29434212/articles/45678", "title": "로얄캐닌 사료 한 달 후기", "author": "냥집사", "posted_at": "2026-06-10T14:22:00+09:00", "views": 1532, "comment_count": 8, "recommends": null, "body": "한 달 먹여봤는데 기호성이 좋네요 ...", "source": "네이버 카페 / robotclear", "extra": { "cafe_id": "29434212", "cafe_menu": "0", "club_slug": "robotclear", "article_no": "45678", "source_kind": "cafe_member_search", "comments": [ { "comment_id": "998877", "author": "멍멍이", "text": "정보 감사합니다!", "date": "2026-06-10 15:01:00", "is_reply": false }, { "comment_id": "998901", "author": "냥집사", "text": "도움 되셨다니 다행이에요", "date": "2026-06-10 15:10:00", "is_reply": true } ] } } ] } }

실패 (failed)

statusfailederror 에 사유가 옵니다(items 없음). 네이버 로그인 자격증명·인증 오류는 자동 재시도되지 않습니다(위 안내 참고).

{ "success": true, "data": { "request_id": 42, "channel": "naver_cafe_member", "status": "failed", "external_ref": null, "result_count": 0, "started_at": "2026-06-16T09:00:05+09:00", "finished_at": "2026-06-16T09:00:16+09:00", "duration_ms": 11000, "duration_sec": 11, "created_at": "2026-06-16T09:00:00+09:00", "updated_at": "2026-06-16T09:00:16+09:00", "error": "네이버 로그인 실패 — 아이디/비밀번호 확인" } }

최상위 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 — 숫자 cafe_id/글번호. 재수집 중복 제거 키
url원문 주소
title / body제목 / 본문 — collect_body=false면 본문은 빈 값(목록에 본문이 없음), true면 전체 본문
author작성자 닉네임
posted_at작성 시각 (ISO8601, KST)
views / comment_count조회수 / 댓글 수
recommends미제공 — 항상 null
source네이버 카페 / 슬러그(또는 숫자 cafe_id)
extra.cafe_id숫자 카페 ID(자동 해석)
extra.cafe_menu게시판 메뉴 ID(전체글=0)
extra.club_slug카페 슬러그
extra.article_no글번호
extra.source_kindcafe_member_search
extra.comments댓글 배열(아래 표) — collect_comments=true일 때
채널 참고
  • 회원 전용 카페라 네이버 로그인 세션이 필요합니다(허브 수집 인증). 목록에 조회수가 없는 레이아웃에서는 조회수가 0일 수 있습니다.

댓글 필드 (extra.comments[])

필드설명
comment_id댓글 고유 ID
author작성자
text내용(디시콘만 있으면 대체 텍스트)
date작성 시각
is_reply대댓글 여부(true=답글)

결과 수신(폴링·콜백) 방식은 비동기 & 콜백을 참고하세요.