인터넷

네이버 자동포스팅 프로그램만들기 (커서Ai를 활용)

idcjw 2025. 8. 27. 20:12
반응형

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


네이버 자동포스팅 프로그램만들기 (커서Ai를 활용)

다음 글은 “Cursor + Gemini + 네이버 API”로 황금 키워드를 찾고, 글/이미지까지 생성해 초안 관리까지 끝내는 실전 가이드입니다.

 


단, 타사 서비스(네이버 등)에 ‘자동 로그인·자동 포스팅’을 하는 행위는 서비스 약관을 위반할 수 있으니 아래의 합법·안전한 대안을 우선 권합니다. 네이버는 자동화 수단(봇·매크로 등)으로 로그인·게시·검색·클릭을 시도하는 행위를 원칙적으로 금지하고 있으며, 관련 차단 우회 시도 역시 제한 사유가 됩니다. Naver 정책

또한 네이버 블로그 글쓰기 공식 API는 2020년 5월 6일 종료되었습니다. 따라서 공식 API로 블로그에 바로 게시하는 방식은 더 이상 지원되지 않습니다. 뉴스핌

 


 

0) 무엇을 만들지: 전체 설계(아키텍처)

  1. 키워드 채굴(데이터 수집)
  • 네이버 **검색 오픈API(블로그 검색)**로 키워드의 문서 수(total) 확인 → 경쟁 포화도 가늠. 네이버 개발자
  • 네이버 검색광고(Ads) APIRelKwdStat/keywordstool월간 PC/모바일 검색수 확인 → 수요 파악. (광고 계정 필요, API 키/고객ID 발급 후 사용) GitHub
  1. 스코어링/정렬
  • 예: 경쟁률 = 블로그 문서 수 / (PC+모바일 월간 검색수) → 낮을수록 ‘황금 키워드’ 후보.
  1. 콘텐츠 자동 생성
  • Google Gemini API제목·개요·본문·FAQ 등의 초안 자동 생성. GitHub
  1. 엑셀(또는 구글시트)로 자동 저장/관리
  • 키워드/문서수/검색량/경쟁률/초안 텍스트를 posting.xlsx에 누적.
  1. 배포(합법 대안 3가지)
  • (A) 사람-검수 기반: 엑셀에서 초안을 확인·수정 후 수동으로 블로그에 게시(권장).
  • (B) 반(半)자동: 초안을 HTML/마크다운으로 내보내 브라우저 확장/클립보드로 붙여넣기(사람 클릭 필수).
  • (C) **자동화 테스트 수준의 브라우저 조작(Selenium)**은 사전 허가 없이 실제 게시/로그인 자동화에 쓰지 않도록 합니다(약관 준수). Naver 정책

왜 이렇게 나누나요?

공식 블로그 글쓰기 API가 종료되어(2020.05.06) 직접 발행 자동화 경로가 없다는 점, 또한 자동화로 로그인/게시를 시도하면 약관 위반이 될 수 있기 때문입니다. 합법 범위에서 채굴·작성·관리를 극대화하고, 게시 단계만 사람 검수로 마무리하면 안전성과 효율을 모두 확보할 수 있습니다. 뉴스핌Naver 정책

출처 입력


1) 환경 준비(빠르게)

  • Python 3.10+, 가상환경 생성 후 아래 설치:
  • pip install requests pandas openpyxl python-dotenv google-genai
  • Cursor(코딩 어시스트 에디터)는 편의 도구일 뿐, 핵심은 위 라이브러리입니다.
  • 이후 모든 비밀키는 .env로 보관(예: NAVER_CLIENT_ID, NAVER_CLIENT_SECRET, NAVER_ADS_ACCESS, NAVER_ADS_SECRET, NAVER_ADS_CUSTOMER, GEMINI_API_KEY).

2) 데이터 수집 ①: 블로그 ‘문서 수(total)’ 가져오기

네이버 검색 오픈API – 블로그 검색은 total(총 검색 결과 수)을 반환합니다. 이것만으로도 경쟁 포화도를 가늠할 수 있습니다. 하루 호출 한도는 25,000회입니다. 네이버 개발자

요청 핵심

파이썬 예시(문서 수만 추출):

import os, urllib.parse, requests from dotenv import load_dotenv load_dotenv() CID = os.getenv("NAVER_CLIENT_ID") CSEC = os.getenv("NAVER_CLIENT_SECRET") def blog_total_count(keyword: str) -> int: url = "https://openapi.naver.com/v1/search/blog.json" params = {"query": keyword, "display": 1, "start": 1, "sort": "sim"} headers = {"X-Naver-Client-Id": CID, "X-Naver-Client-Secret": CSEC} r = requests.get(url, params=params, headers=headers, timeout=15) r.raise_for_status() data = r.json() # JSON에서는 channel.total이 아닌, 상위 필드 total이 제공됩니다(문서 기준). # 개발자 문서의 XML 예시는 channel.total을 보여주나 JSON도 같은 의미의 total을 포함합니다. return int(data.get("total", 0)) print(blog_total_count("여름 휴가"))

팁: query는 UTF-8 URL 인코딩이 필요합니다(예시는 requests가 자동 처리). 네이버 개발자

출처 입력


3) 데이터 수집 ②: 월간 검색수(PC/모바일) 가져오기

네이버 검색광고(Ads) APIRelKwdStat/keywordstool월간 검색수(PC/모바일)와 연관키워드를 조회할 수 있습니다. 사용하려면 광고계정에서 API 사용관리를 통해 Access License Key, Secret Key, Customer ID를 먼저 발급받아야 합니다. GitHub

요청 개요

파이썬 예시(개념 코드):

import os, time, hmac, base64, hashlib, requests from urllib.parse import urlencode from dotenv import load_dotenv load_dotenv() ACCESS = os.getenv("NAVER_ADS_ACCESS") # Access License Key SECRET = os.getenv("NAVER_ADS_SECRET") # Secret Key CUSTOMER = os.getenv("NAVER_ADS_CUSTOMER")# Customer ID def ads_keywordtool(hint: str): method = "GET" path = "/keywordstool" raw_query = f"hintKeywords={hint}&includeHintKeywords=1&showDetail=1" # 서명용은 인코딩하지 않음 ts = str(int(time.time() * 1000)) message = f"{ts}.{method}.{path}?{raw_query}" sign = base64.b64encode(hmac.new(SECRET.encode(), message.encode(), hashlib.sha256).digest()).decode() headers = { "X-Timestamp": ts, "X-API-KEY": ACCESS, "X-Customer": CUSTOMER, "X-Signature": sign, } # 요청 URL에는 인코딩 적용 url = "https://api.naver.com" + path + "?" + urlencode({ "hintKeywords": hint, "includeHintKeywords": 1, "showDetail": 1 }) r = requests.get(url, headers=headers, timeout=20) r.raise_for_status() return r.json() data = ads_keywordtool("여름 휴가") # 결과 객체에는 연관 키워드, 월간 PC/모바일 검색수 등 상세 필드가 포함됩니다(자세한 필드명은 문서/도구 화면에서 확인).

중요: Ads API는 광고주/파트너 전용이며, 정책·호출 한도·필드 스키마는 변동될 수 있습니다. 최신 안내와 키 발급 절차는 광고 시스템 내 ‘도구 > API 사용관리’ 및 공개 문서를 참고하세요. GitHub

출처 입력


4) 스코어링 & 엑셀 자동 저장

경쟁률 예시

경쟁률 = 블로그 문서 수(total) / (월간 PC 검색수 + 월간 모바일 검색수)

  • 값이 낮을수록(문서 수 대비 검색수 높음) 초보 블로그에 유리한 키워드.

엑셀 저장(샘플):

import pandas as pd def to_rows(keyword, total_docs, pc, mobile): total_q = (pc or 0) + (mobile or 0) comp = round(total_docs / total_q, 4) if total_q else None return { "키워드": keyword, "블로그 문서수": total_docs, "PC 검색수": pc, "모바일 검색수": mobile, "총 검색수": total_q, "경쟁률(문서수/총검색)": comp } rows = [] # rows.append(to_rows("여름 휴가", 3200000, 50000, 120000)) # 예시 df = pd.DataFrame(rows, columns=["키워드","블로그 문서수","PC 검색수","모바일 검색수","총 검색수","경쟁률(문서수/총검색)"]) df.to_excel("posting.xlsx", index=False)


5) 콘텐츠 자동 생성(Gemini API)

Google의 Gemini API로 제목·요약·본문·FAQ까지 초안을 자동 작성합니다(무상·유상 플랜/모델은 변경될 수 있으니 최신 문서를 확인하세요). 파이썬 클라이언트(google-genai)는 공식 퀵스타트가 가장 정확합니다. GitHub

예시(간단 프롬프트):

import os from google import genai from dotenv import load_dotenv load_dotenv() client = genai.Client(api_key=os.getenv("GEMINI_API_KEY")) SYSTEM = "너는 SEO 블로그 글쓰기를 돕는 도우미야. 한국어로 답해. 톤은 친절하고 실용적." def write_post(title: str, keywords: list[str]): prompt = f""" 시스템: {SYSTEM} 주제: {title} 키워드: {', '.join(keywords)} 요구사항: 1) 120~160자 메타디스크립션 2) H2/H3 목차 구성 3) 본문은 서론-본론-결론 구조, 본론은 목록·표를 적절히 활용 4) 마지막에 FAQ 3개 """ rsp = client.responses.create( model="gemini-2.0-flash", # 사용 가능 모델은 문서에서 최신 확인 input=prompt ) return rsp.output_text print(write_post("여름 휴가 준비 체크리스트", ["여름휴가","체크리스트","짐싸기"]))

모델·메서드 명칭은 SDK 업데이트에 따라 달라집니다. 공식 문서의 최신 예시를 그대로 따르세요. GitHub

출처 입력

엑셀 연동 자동화

  • posting.xlsx의 A열=제목을 읽어 각 행에 대해 write_post() 호출 → 결과를 B열=본문에 기록 → 저장.
  • 오류(레이트리밋·네트워크)는 try/except로 건너뛰고 로그에 남깁니다.

6) 연관 키워드 확장(무한 증식의 씨앗)

  • Ads API의 hintKeywords/rel keywords를 받아 A열에 계속 추가 → 2~5단계를 반복하면 키워드 풀 무한 확장이 가능합니다. (호출 한도·정책을 항상 준수) GitHub
  • 네이버 검색 트렌드·쇼핑 인사이트 등 다른 오픈API도 혼합하면 틈새 주제 발굴精度가 올라갑니다(일일 한도·요청 형식 상이). 네이버 개발자

7) “자동 포스팅”은 어떻게 하나요? — 합법·안전 대안 3가지

⚠️ 네이버는 자동화 수단으로 로그인·게시·검색·클릭을 시도하거나 **차단 우회(CAPTCHA 우회 등)**를 시도하는 행위를 금지합니다. 무단 자동화는 제재될 수 있습니다. 이 글에서는 약관을 존중하는 대안을 제시합니다. Naver 정책

출처 입력

  1. 사람-검수 기반(권장)
  • 초안을 엑셀/마크다운으로 만들어 사람이 직접 네이버 글쓰기 화면에서 붙여넣기 → 표/이미지 정리 → 발행.
  • 가장 안전하고 계정 리스크가 없습니다.
  1. 반자동(클립보드·템플릿)
  • 로컬 앱에서 HTML/마크다운 미리보기 제공 → 복사 버튼 제공 → 사용자가 붙여넣기.
  • 표/이미지 경로를 상대경로로 안내하고, ALT 텍스트 자동 생성까지 도와주면 시간을 크게 단축.
  1. 자동화 테스트 수준의 브라우저 조작
  • Selenium 등은 주로 크롤링/테스트 연구 용도로 한정하고, 로그인/게시 자동화에는 쓰지 않도록 합니다(사전 허가 없는 자동화 사용 금지). 프레임 전환, 로딩 대기, 오류 재시도 등 WebDriver의 일반 문서만 참고하세요. Selenium+2Selenium+2

8) 품질 올리는 SEO/UX 체크리스트

  • 제목: 메인 키워드 + 의도(가이드/설치/다운로드 등)
  • 메타디스크립션: 120~160자, 혜택·행동 유도 포함
  • H2/H3 목차: 문제 → 해결 → 절차 → 주의사항 → FAQ
  • 이미지/표: ALT 텍스트, 캡션, 가벼운 용량
  • 내부 링크: 연관 글(같은 카테고리) 2~3개
  • 출처 명시: API·통계·가격 등 외부 근거는 링크·각주 표시
  • 콘텐츠 신선도: 날짜·버전 표기(예: “2025-08 업데이트”)

9) 트러블슈팅(자주 묻는 문제)

  • 오픈API 호출 429/일일 한도 초과 → 키 분산·캐싱·큐 활용, 요청 축소. 블로그 검색 API는 일 25,000회 한도. 네이버 개발자
  • Ads API 서명 오류(401/403) → 메시지 문자열 형식(타임스탬프.메서드.경로?원본쿼리), 쿼리 인코딩 구분(서명용/요청용)을 점검. 네이버 개발자
  • Selenium 프레임/DOM 에러 → 프레임 전환, 요소 재탐색, stale element 대응. Selenium
  • Gemini 모델/메서드 변경 → 공식 퀵스타트의 최신 코드로 교체. GitHub

10) 마무리 로드맵(추천 워크플로우)

  1. 키워드 목록 확보: 시드 키워드 20~50개.
  2. 수집 스크립트 실행:
  • 블로그 total, 월간 PC/모바일 검색수 취합 → 경쟁률 계산.
  1. 상위 n개(예: 100개) 선별 → 주제 클러스터(카테고리·의도별).
  2. Gemini로 초안 대량 생성 → 엑셀 B열 채움.
  3. 사람 검수(톤/사실/표절/이미지) → 수동 게시.
  4. 성과 로그(노출/클릭/체류/전환)로 프롬프트·템플릿 개선.

이렇게 하면 약관을 준수하면서도, 키워드 발굴→초안 생성→초안 관리까지 90% 자동화가 가능해집니다. 최종 발행 단계만 사람이 품질을 잡아주면 계정 리스크 없이 생산성을 극대화할 수 있어요.


참고(공식 문서)

  • 네이버 검색 블로그 검색 API: 요청·파라미터·total 필드, 일 25,000회 한도. 네이버 개발자
  • 네이버 검색광고(Ads) API: 키 발급·API 사용관리·샘플. GitHub
  • Ads API 서명/요청 패턴(개발자 포럼): X-Signature 생성 예시. 네이버 개발자
  • Gemini API 파이썬 퀵스타트(최신 모델·클라이언트). GitHub
  • Selenium WebDriver(공식 문서·트러블슈팅). Selenium+2Selenium+2
  • 네이버 이용약관(자동화 사용 제한), 블로그 글쓰기 API 종료 공지 기사. Naver 정책뉴스핌

 

상위블로그들이 사용한 수익 상위 10개 키워드 바로가기

반응형