diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d1292e..facd467 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.54.0 — 2026-10-05 + +- **Reddit posts carry a full-resolution `preview_image`.** `thumbnail` is a signed ~140px crop that cannot be resized (changing `width`/`height` breaks the signature). Posts now also return `preview_image`, `preview_image_width` and `preview_image_height`: Reddit's original-size preview. For link posts it is the only full-size image; for native video it is the poster frame. `None`/`null` when Reddit has no preview (most text posts). + ## 0.53.0 — 2026-10-05 - **`IPNotAllowedError` for keys restricted to IP addresses.** API keys can now be limited to IP addresses and CIDR ranges in the dashboard; a request from anywhere else answers `403` with `error: "ip_not_allowed"` (not charged). The SDK raises `IPNotAllowedError`, carrying `client_ip` — the address ScrapeBadger saw. It subclasses `PermissionDeniedError`, so existing handlers still catch it. diff --git a/pyproject.toml b/pyproject.toml index 2b631be..4711fb6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "scrapebadger" -version = "0.53.0" +version = "0.54.0" description = "Official Python SDK for ScrapeBadger - Async web scraping APIs for Twitter and more" readme = "README.md" license = { text = "MIT" } diff --git a/src/scrapebadger/__init__.py b/src/scrapebadger/__init__.py index 6128109..c588791 100644 --- a/src/scrapebadger/__init__.py +++ b/src/scrapebadger/__init__.py @@ -1188,7 +1188,7 @@ async def main(): ZestimateHistoryPoint as ZillowZestimateHistoryPoint, ) -__version__ = "0.53.0" +__version__ = "0.54.0" __all__ = [ # TikTok core models diff --git a/src/scrapebadger/reddit/models.py b/src/scrapebadger/reddit/models.py index b810486..1130dd5 100644 --- a/src/scrapebadger/reddit/models.py +++ b/src/scrapebadger/reddit/models.py @@ -159,6 +159,11 @@ class RedditPost(_BaseModel): thumbnail: str | None = None thumbnail_width: int | None = None thumbnail_height: int | None = None + # Full-resolution original behind the ~140px thumbnail — the only + # full-size image a link post has; the poster frame for video. + preview_image: str | None = None + preview_image_width: int | None = None + preview_image_height: int | None = None media: dict[str, Any] | None = None media_embed: dict[str, Any] | None = None secure_media: dict[str, Any] | None = None diff --git a/uv.lock b/uv.lock index c710ad5..4d6656d 100644 --- a/uv.lock +++ b/uv.lock @@ -930,7 +930,7 @@ wheels = [ [[package]] name = "scrapebadger" -version = "0.53.0" +version = "0.54.0" source = { editable = "." } dependencies = [ { name = "httpx" },