Community라이팅 & 에디팅github.com

JJ-Yvain-Skills/wechat-article-fetch

위챗 공식 계정 기사 수집/발견: 제로 의존성, 로그인 불필요, UA만이 유일한 진입 장벽입니다 (SKILL + 3개의 Python 스크립트, MIT 라이선스).

wechat-article-fetch란 무엇인가요?

이 스킬은 위챗 공식 계정(公众号)의 기사를 수집하고 발견하기 위한 도구입니다. 서버 사이드 렌더링 방식을 활용하여 브라우저 User-Agent만 설정하면 로그인, 쿠키, JavaScript 실행 없이도 기사 본문과 이미지를 직접 가져올 수 있습니다. 발견 계층은 소고우(搜狗) 검색을 통해 최신 기사의 메타데이터를 획득하며, HTTP 리디렉션 체인에서 서명 URL을 추출하여 깨끗한 방식으로 접근합니다. 하지만 소고우 검색은 약 15~20회의 연속 요청 후 IP 기반 캡차가 발생할 수 있으므로 저빈도 직렬 요청(10회/30분 이하)과 일일 500건 제한을 준수해야 합니다. 이 스킬은 CLI 및 라이브러리 이중 모드를 지원하며, 오류는 구조화된 `WeChatError`로 반환됩니다. 개인 연구 및 소규모 학습 목적으로 설계되었으며, 로그인 상태 사용, 캡차 우회, 상업적 이용 및 대규모 수집을 엄격히 금지합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add JJ-Yvain-Skills/wechat-article-fetch

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

wechat-article-fetch · 공식 계정 기사 가져오기

핵심 사실(테스트 완료, 직접 실행 가능)

  • UA가 유일한 진입 장벽: 스크립트 내장 브라우저 UA 사용. UA 없이 / curl / python-requests / MicroMessenger → 모두 302
  • 본문 매우 쉽게 획득: 서버 사이드 렌더링, <div id="js_content">에 존재, GET만으로 가능, JS/Cookie/로그인 불필요
  • 이미지 무방어 링크: 실제 주소는 data-src
  • 발견 계층: 원문은 검색 엔진에 수집되지 않음; Sogou는 암호화된 리디렉션 체인 제공, 클린 상태의 순수 HTTP로 서명 링크 추출 가능(윈도우 ≥1시간, 빠르게 가져오기); ⚠️ 약 15~20개 요청/30분 연속 발생 시 IP 레벨 캡차 트리거(수동 필요, 브라우저로 해결 불가) → 낮은 빈도로 직렬 실행, 트리거 시 중지

UA 예시(직접 스크립트 작성 시 사용): Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

사용법(스크립트와 동일 디렉토리, 의존성 없음, CLI+라이브러리 이중 모드, 오류 구조화 WeChatError)

python wechat_fetch.py "<url>" [--format md|json|text] [--out FILE]   # 본문 가져오기
python wechat_discover.py "키워드" [--format table|json]              # 메타데이터 검색(리디렉션 체인 해제 방법은 채널 상태 참조)
python batch_fetch.py urls.txt [--min-delay 3] [--max-delay 8] [--daily-limit 500]  # 배치: 속도 제한/중단점 재개/캡차 정지

채널 상태(2026-08 테스트, 잘못된 사용 방지)

채널상태
공개 기사 페이지 직접 가져오기✅ 장기 안정(본 스킬의 핵심)
Sogou 검색✅ 최근 메타데이터만(클린 상태); 리디렉션 체인은 순수 HTTP 서명 URL(윈도우 ≥1시간, 빠르게 가져오기); ⚠️ 약 15-20개 요청/30분 연속 발생 시 IP 캡차 트리거, 수동 필요
컬렉션(앨범) 페이지⚠️ 익명으로 탐색 가능, 컬렉션 내 기사만
공식 계정 홈페이지 이전 목록❌ 익명 차단됨「微信客户端에서 링크 열기」; getmsg는 최근 ~10개만
공식 계정 백엔드 계정 간 검색❌ 종료됨(2026-07-30 WeChat 종료, 업계 도구 모두 마비)

결론: 가져오기 계층 안정; 발견 계층 상한 = Sogou 최근 + 컬렉션(⚠️ 동적 속도 제한, 낮은 빈도); 전체 이력은 적합한 채널 없음.

프로세스

  • 링크 있음 → GET(브라우저 UA) → #js_content 가져오기 → 출력. 실패 시 진단표에 따라 처리, 맹목적 재시도 금지
  • 키워드만 있음 → Sogou에서 메타데이터 획득; 본문 필요 시 순수 HTTP로 리디렉션 체인 해제, JS로 조합하여 서명 URL 획득 후 가져오기 프로세스로 복귀(실패/안티크롤러 트리거 시 브라우저로 대체; 또는 재게시 미러 찾기, 사용자에게 수정/삭제 가능성 알림). 홈페이지 이전, 백엔드 검색 시도 금지(종료/차단됨)

구문 분석(직접 정규식 작성 시에만 필요, 스크립트 사용 시 생략 가능)

앵커: var msg_title / nickname / ct + #js_content. ⚠️ msg_title/nickname은 .html(false)/htmlDecode() 래퍼 존재 — 정규식은 등호 뒤 첫 번째 따옴표 문자열만 일치, 그렇지 않으면 모두 비워짐; 이미지는 src가 아닌 data-src에서 가져옴.

실패 진단(맹목적 재시도 금지)

현상원인조치
302UA 부적합브라우저 UA로 변경
200 + 매개변수 오류링크 무효중지, 링크 확인
302 → antispiderSogou 측 차단(IP 레벨 캡차, 2026-08-13 테스트 결과 수동 필요)중지, 우회하지 않음; 낮은 빈도로 재시도 또는 복구 대기(브라우저도 차단됨)
302 → appmsgcaptcha링크 이상/캡차 트리거중지, 우회하지 않음
200 + 해당 페이지 없음UA가 크롤러로 판단브라우저 UA로 변경
200 + 微信客户端에서 열기로그인 필요한 페이지해당 채널 사용 불가, Sogou/컬렉션으로 전환
200 + 삭제됨/위반기사 처리됨건너뛰기, 이유 기록

하드 제약(위반 시 중지)

  1. 로그인 상태 건드리지 않음: 개인 WeChat/공식 계정 백엔드 Cookie, QR 코드 상태 모두 사용 금지(계정 정지 + 계약 위반)
  2. 캡차 우회하지 않음: 트리거 시 전체 중지(캡차 우회 기술은 중국 형법 285조 위반)
  3. 대규모 수집 금지: robots 전체 Disallow, 개인 연구 소량 사용 목적; 직렬 실행 + 초 단위 간격, 일일 ≤500개
  4. 상업적 사용/배포 금지: 기사는 저작권 보호, 개인 학습 연구는 합법적 사용(전제: 배포 금지, 상업적 사용 금지, 저작자 표시 유지)
  5. 발견 계층은 동적 속도 제한 적용(2026-08-13 테스트: 1520개 요청/30분 시 IP 캡차 트리거, 시간 단위로 자동 해제되지 않음): 낮은 빈도 직렬 실행(30분 ≤10회 권장), 트리거 시 전체 중지, 복구 대기, 우회 시도 금지

관련 스킬