테스트
10,000페이지
US$3.75
US$0.38/1K 페이지
- 실제 URL로 사용해 보기
- 가장 큰 팩과 동일한 API
- 크레딧은 만료되지 않음
사용 사례 · 모니터링 · /batch
원시 HTML을 비교하면 광고나 토큰이 바뀔 때마다 알림이 발생합니다. 본문을 Markdown으로 비교하면 독자가 알아차릴 것만 표시됩니다: 새 가격, 수정된 조항, 새로운 체인지로그 항목.
빠른 답변
웹페이지의 콘텐츠 변경을 어떻게 모니터링할 수 있나요?
각 페이지를 정해진 일정에 본문의 Markdown으로 읽고, 텍스트를 저장하여 이전 버전과 비교하세요; 텍스트가 변경될 때만 알림을 보냅니다. WebReaderAPI는 배치 작업당 최대 100개의 URL을 읽고, 광고와 메뉴를 제거하여 거짓 경보를 일으키지 않으며, 2026년 10월 기준 US$0.07/1K 페이지부터 페이지당 1 크레딧을 청구합니다. KYC 없이; 암호화폐로 결제.
| 엔드포인트 | POST https://webreaderapi.com/api/v1/batch, 그다음 GET https://webreaderapi.com/api/v1/jobs/{job_id} |
|---|---|
| 배치 크기 | 배치 작업당 최대 100개의 URL |
| 비교 대상 | 광고, 메뉴, 배너를 제외한 본문의 Markdown |
| 과금 | 1 크레딧 = 브라우저 없이 페이지 1회 읽기, 페이지가 JavaScript를 렌더링하는 데 브라우저가 필요하면 2 크레딧. 실패한 요청이나 사이트의 robots.txt가 거부한 요청은 과금되지 않습니다 |
| 예시 분량 | 매일 200페이지 확인 = 한 달에 약 6,000페이지 |
| 가격 | 10,000페이지당 US$3.75; 크레딧은 만료되지 않습니다 |
비즈니스에 중요한 문구가 들어 있고 예고 없이 바뀌는 페이지입니다:
목록은 공개 페이지로 한정하세요. 개인 프로필과 로그인 뒤에 있는 페이지는 범위 밖입니다.
HTML은 콘텐츠가 그대로여도 항상 바뀌기 때문입니다. 돌아가며 노출되는 광고, 세션 토큰, 푸터의 타임스탬프, A/B 테스트 마크업 때문에 같은 페이지를 두 번 불러와도 달라집니다. HTML로 diff를 뜨면 이런 노이즈가 전부 알림이 되고, 사람들은 결국 알림을 읽지 않게 됩니다.
본문 추출을 거친 Markdown은 비교하기 전에 노이즈를 대부분 걷어냅니다. 남는 것은 사람이 읽는 텍스트, 곧 제목, 문단, 목록, 표입니다. 이 텍스트의 diff는 짧고 읽기 쉬워서 알림으로 보낼 가치가 있습니다.
import difflib
import json
import os
import pathlib
import time
import requests
API = "https://webreaderapi.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]}
STORE = pathlib.Path("snapshots.json")
URLS = [
"https://example.com/pricing",
"https://example.com/legal/terms",
"https://example.com/changelog",
]
old = json.loads(STORE.read_text(encoding="utf-8")) if STORE.exists() else {}
job = requests.post(API + "/batch", headers=HEADERS, json={"urls": URLS}, timeout=60).json()
results, cursor, delay = [], None, 5
while True:
params = {"cursor": cursor} if cursor else {}
page = requests.get(API + "/jobs/" + job["job_id"], headers=HEADERS, params=params, timeout=60).json()
results += page.get("results", [])
cursor = page.get("next_cursor")
if page["status"] == "done" and not cursor:
break
if not cursor:
time.sleep(delay)
delay = min(delay * 2, 60)
new = dict(old)
for item in results:
if "markdown" not in item:
print("not read:", item["url"], item.get("error", {}).get("code"))
continue
before = old.get(item["url"], "")
if before and before != item["markdown"]:
diff = difflib.unified_diff(before.splitlines(), item["markdown"].splitlines(), lineterm="", n=0)
print("CHANGED:", item["url"])
print("\n".join(list(diff)[:40]))
new[item["url"]] = item["markdown"]
STORE.write_text(json.dumps(new, ensure_ascii=False), encoding="utf-8")
페이지가 실제로 바뀌는 만큼만 확인하고, 그보다 자주 하지 마세요. 가격 페이지와 변경 로그에는 매일이 맞고, 정책과 문서에는 매주가 맞습니다. 한 시간마다 읽는 페이지는 하루에 한 번 읽는 것보다 더 알려주는 게 거의 없으면서 비용은 24배가 듭니다.
WebReaderAPI은 모든 페이지에 대해 robots.txt를 따르고, 크롤링 작업에서는 사이트의 Crawl-delay을 존중합니다. 사이트가 허용하지 않는 페이지는 건너뛰고 요금도 부과하지 않으므로, 엄격한 사이트는 그냥 리포트에서 빠집니다. robots를 거부하는 페이지에 접근해야 한다면 사이트 소유자에게 문의하세요.
확인 1회당 페이지 1크레딧입니다. 2026년 10월 가격 기준 예시는 다음과 같습니다:
브라우저가 필요한 페이지는 2크레딧을 씁니다. 일반 HTML인 게 확실한 페이지에는 render=false를 설정해서 1크레딧으로 유지하세요.
페이지 수에 월별 확인 횟수를 곱한 다음, 몇 달은 버티는 팩을 고르세요. 크레딧은 만료되지 않습니다.
10,000페이지
US$3.75
US$0.38/1K 페이지
50,000페이지
US$14.25
US$0.28/1K 페이지
100,000페이지
US$21.75
US$0.22/1K 페이지
모든 플랜에 포함: 본문 추출 · 필요 시 JavaScript 렌더링 · 실패 및 거부된 페이지는 과금되지 않음 · 크레딧은 만료되지 않음
아니요. 페이지를 읽어 Markdown으로 반환할 뿐이고, 스크립트가 버전을 비교해 이메일, 채팅, 티켓으로 알림을 보냅니다. 위 코드는 바뀐 줄을 출력하는 출발점입니다.
diff를 뜨기 전에 HTML이 아니라 본문 추출 Markdown을 비교하고, "5분 전 업데이트"처럼 매번 로드마다 바뀌는 걸 아는 줄은 미리 걷어내세요. 대부분의 회전 요소는 본문 추출 단계에서 이미 제거됩니다.
네. render=auto을 쓰면 JavaScript 없이는 비어 있는 페이지를 브라우저에서 렌더링하며 2크레딧을 씁니다. JavaScript 없이도 동작하는 페이지는 1크레딧 그대로입니다.
네. batch 대신 크롤링 작업을 실행한 뒤 페이지별로 비교하세요. 규모가 큰 사이트라면 먼저 sitemap의 lastmod 날짜를 비교하고, 바뀐 페이지만 다시 읽으세요.
US$0.07/1K 페이지부터 · KYC 없이
API 키 발급받기