From 77baf802bbb9e4de07638bdb14010dc54ef92166 Mon Sep 17 00:00:00 2001 From: kasparasizi1 <132673909+kasparasizi1@users.noreply.github.com> Date: Sat, 25 Jul 2026 12:59:28 +0300 Subject: [PATCH] chore(release): 0.23.0 --- CHANGELOG.md | 10 ++++++++++ pyproject.toml | 2 +- src/scrapebadger/__init__.py | 2 +- src/scrapebadger/_internal/client.py | 2 +- uv.lock | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c907ff..54480eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.23.0] - 2026-07-25 + +### Added + +- **eBay `pagination.has_more`** — the stop signal for paging through completed/sold listings. `total_pages`/`total_results` are `None` on eBay's sold grid, and past the last page eBay re-serves that page instead of returning empty, so looping "until the results are empty" never terminated. Loop `while r.pagination.has_more` instead; the API now also returns an empty page once you page past the end. The `page` ceiling is raised to 1000 (a broad sold search runs ~133 pages deep at `per_page=240`, ~26k listings). (SCR-124) + +### Changed + +- **eBay `is_sponsored` is now `bool | None` and always `None`** — previously typed `bool` and reported `True` for 100% of results. eBay renders its "Sponsored" badge into every result card as anti-scraping bait, so promoted placements cannot be distinguished from organic ones in the response. The field reports `None` (unknown) rather than a value that was wrong on every row. (SCR-124) + ## [0.22.0] - 2026-07-23 ### Added diff --git a/pyproject.toml b/pyproject.toml index 8da7b9a..d06996b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "scrapebadger" -version = "0.22.0" +version = "0.23.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 3804167..f1bb6f7 100644 --- a/src/scrapebadger/__init__.py +++ b/src/scrapebadger/__init__.py @@ -863,7 +863,7 @@ async def main(): ZestimateHistoryPoint as ZillowZestimateHistoryPoint, ) -__version__ = "0.22.0" +__version__ = "0.23.0" __all__ = [ # TikTok core models diff --git a/src/scrapebadger/_internal/client.py b/src/scrapebadger/_internal/client.py index 6e5b4fd..947847d 100644 --- a/src/scrapebadger/_internal/client.py +++ b/src/scrapebadger/_internal/client.py @@ -29,7 +29,7 @@ T = TypeVar("T") # User agent for SDK requests -SDK_VERSION = "0.22.0" +SDK_VERSION = "0.23.0" USER_AGENT = f"scrapebadger-python/{SDK_VERSION}" diff --git a/uv.lock b/uv.lock index 074f00b..c56c4e9 100644 --- a/uv.lock +++ b/uv.lock @@ -752,7 +752,7 @@ wheels = [ [[package]] name = "scrapebadger" -version = "0.22.0" +version = "0.23.0" source = { editable = "." } dependencies = [ { name = "httpx" },