Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ export SCRAPEBADGER_API_KEY="sb_live_xxxxxxxxxxxxx"
| **Reddit** | Search posts, subreddits, users, and domains; fetch post comments, subreddit rules, moderators, wiki pages, user trophies | [Reddit Guide](docs/reddit.md) |
| **Amazon** | 14 endpoints — search, autocomplete, product detail, offers, reviews, bestsellers, new releases, deals, category browse, seller profile/products/feedback, markets, categories | [Amazon Guide](docs/amazon.md) |
| **eBay** | 12 endpoints across 18 markets — search, completed/sold search, item detail, item reviews, seller profile/items/feedback, category browse, categories, autocomplete, markets | [eBay Guide](docs/ebay.md) |
| **YouTube** | 39 endpoints — search, autocomplete, video detail/related/comments/replies/transcript/captions/streams/live-chat/batch, channel detail + videos/shorts/streams/playlists/community/about/subscriber-count/in-channel-search/resolve, playlists/items/mixes, trending/hashtag/home, shorts, community post/comments, music search, oembed, categories/languages/regions | [YouTube Guide](docs/youtube.md) |
| **TikTok** | 25 endpoints — user profile/videos/followers/following/liked/reposts, video detail/comments/replies/related/transcript/oEmbed, search (general/videos/hashtags/users), music detail/videos, hashtag detail/videos, trending videos/hashtags/songs, ad library, regions | [TikTok Guide](docs/tiktok.md) |

## Error Handling
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "scrapebadger"
version = "0.15.0"
version = "0.15.1"
description = "Official Python SDK for ScrapeBadger - Async web scraping APIs for Twitter and more"
readme = "README.md"
license = { text = "MIT" }
Expand Down
204 changes: 203 additions & 1 deletion src/scrapebadger/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,159 @@ async def main():
VintedUserSummary,
)
from scrapebadger.web.models import DetectResult, ScrapeResult
from scrapebadger.youtube.client import YoutubeClient
from scrapebadger.youtube.models import (
AudioTrack as YoutubeAudioTrack,
)
from scrapebadger.youtube.models import (
AutocompleteResponse as YoutubeAutocompleteResponse,
)
from scrapebadger.youtube.models import (
BatchResponse as YoutubeBatchResponse,
)
from scrapebadger.youtube.models import (
CaptionsResponse as YoutubeCaptionsResponse,
)
from scrapebadger.youtube.models import (
CaptionTrack as YoutubeCaptionTrack,
)
from scrapebadger.youtube.models import (
CategoriesResponse as YoutubeCategoriesResponse,
)
from scrapebadger.youtube.models import (
Channel as YoutubeChannel,
)
from scrapebadger.youtube.models import (
ChannelAbout as YoutubeChannelAbout,
)
from scrapebadger.youtube.models import (
ChannelLink as YoutubeChannelLink,
)
from scrapebadger.youtube.models import (
ChannelTabResponse as YoutubeChannelTabResponse,
)
from scrapebadger.youtube.models import (
ChannelVideosResponse as YoutubeChannelVideosResponse,
)
from scrapebadger.youtube.models import (
Chapter as YoutubeChapter,
)
from scrapebadger.youtube.models import (
Comment as YoutubeComment,
)
from scrapebadger.youtube.models import (
CommentsResponse as YoutubeCommentsResponse,
)
from scrapebadger.youtube.models import (
CommunityPost as YoutubeCommunityPost,
)
from scrapebadger.youtube.models import (
CommunityResponse as YoutubeCommunityResponse,
)
from scrapebadger.youtube.models import (
Format as YoutubeFormat,
)
from scrapebadger.youtube.models import (
HashtagResponse as YoutubeHashtagResponse,
)
from scrapebadger.youtube.models import (
HeatMarker as YoutubeHeatMarker,
)
from scrapebadger.youtube.models import (
HomeResponse as YoutubeHomeResponse,
)
from scrapebadger.youtube.models import (
LanguagesResponse as YoutubeLanguagesResponse,
)
from scrapebadger.youtube.models import (
LiveChatMessage as YoutubeLiveChatMessage,
)
from scrapebadger.youtube.models import (
LiveChatResponse as YoutubeLiveChatResponse,
)
from scrapebadger.youtube.models import (
LiveStreamingDetails as YoutubeLiveStreamingDetails,
)
from scrapebadger.youtube.models import (
MarketInfo as YoutubeMarketInfo,
)
from scrapebadger.youtube.models import (
MarketsResponse as YoutubeMarketsResponse,
)
from scrapebadger.youtube.models import (
OEmbed as YoutubeOEmbed,
)
from scrapebadger.youtube.models import (
Playlist as YoutubePlaylist,
)
from scrapebadger.youtube.models import (
PlaylistItem as YoutubePlaylistItem,
)
from scrapebadger.youtube.models import (
PlaylistItemsResponse as YoutubePlaylistItemsResponse,
)
from scrapebadger.youtube.models import (
PollChoice as YoutubePollChoice,
)
from scrapebadger.youtube.models import (
ReferenceRow as YoutubeReferenceRow,
)
from scrapebadger.youtube.models import (
RegionRestriction as YoutubeRegionRestriction,
)
from scrapebadger.youtube.models import (
RegionsResponse as YoutubeRegionsResponse,
)
from scrapebadger.youtube.models import (
RelatedResponse as YoutubeRelatedResponse,
)
from scrapebadger.youtube.models import (
RepliesResponse as YoutubeRepliesResponse,
)
from scrapebadger.youtube.models import (
ResolveResult as YoutubeResolveResult,
)
from scrapebadger.youtube.models import (
SearchChip as YoutubeSearchChip,
)
from scrapebadger.youtube.models import (
SearchResponse as YoutubeSearchResponse,
)
from scrapebadger.youtube.models import (
SearchResult as YoutubeSearchResult,
)
from scrapebadger.youtube.models import (
ShoppingResult as YoutubeShoppingResult,
)
from scrapebadger.youtube.models import (
Short as YoutubeShort,
)
from scrapebadger.youtube.models import (
StreamingData as YoutubeStreamingData,
)
from scrapebadger.youtube.models import (
SubscriberCount as YoutubeSubscriberCount,
)
from scrapebadger.youtube.models import (
Thumbnail as YoutubeThumbnail,
)
from scrapebadger.youtube.models import (
Transcript as YoutubeTranscript,
)
from scrapebadger.youtube.models import (
TranscriptSegment as YoutubeTranscriptSegment,
)
from scrapebadger.youtube.models import (
TrendingItem as YoutubeTrendingItem,
)
from scrapebadger.youtube.models import (
TrendingResponse as YoutubeTrendingResponse,
)
from scrapebadger.youtube.models import (
Video as YoutubeVideo,
)

__version__ = "0.15.0"
__version__ = "0.15.1"

__all__ = [
# TikTok core models
Expand Down Expand Up @@ -439,6 +590,57 @@ async def main():
"VintedUserSummary",
# Stream exceptions
"WebSocketStreamError",
"YoutubeAudioTrack",
"YoutubeAutocompleteResponse",
"YoutubeBatchResponse",
"YoutubeCaptionTrack",
"YoutubeCaptionsResponse",
"YoutubeCategoriesResponse",
"YoutubeChannel",
"YoutubeChannelAbout",
"YoutubeChannelLink",
"YoutubeChannelTabResponse",
"YoutubeChannelVideosResponse",
"YoutubeChapter",
"YoutubeClient",
"YoutubeComment",
"YoutubeCommentsResponse",
"YoutubeCommunityPost",
"YoutubeCommunityResponse",
"YoutubeFormat",
"YoutubeHashtagResponse",
"YoutubeHeatMarker",
"YoutubeHomeResponse",
"YoutubeLanguagesResponse",
"YoutubeLiveChatMessage",
"YoutubeLiveChatResponse",
"YoutubeLiveStreamingDetails",
"YoutubeMarketInfo",
"YoutubeMarketsResponse",
"YoutubeOEmbed",
"YoutubePlaylist",
"YoutubePlaylistItem",
"YoutubePlaylistItemsResponse",
"YoutubePollChoice",
"YoutubeReferenceRow",
"YoutubeRegionRestriction",
"YoutubeRegionsResponse",
"YoutubeRelatedResponse",
"YoutubeRepliesResponse",
"YoutubeResolveResult",
"YoutubeSearchChip",
"YoutubeSearchResponse",
"YoutubeSearchResult",
"YoutubeShoppingResult",
"YoutubeShort",
"YoutubeStreamingData",
"YoutubeSubscriberCount",
"YoutubeThumbnail",
"YoutubeTranscript",
"YoutubeTranscriptSegment",
"YoutubeTrendingItem",
"YoutubeTrendingResponse",
"YoutubeVideo",
# Version
"__version__",
]
2 changes: 1 addition & 1 deletion src/scrapebadger/_internal/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
T = TypeVar("T")

# User agent for SDK requests
SDK_VERSION = "0.15.0"
SDK_VERSION = "0.15.1"
USER_AGENT = f"scrapebadger-python/{SDK_VERSION}"


Expand Down
22 changes: 22 additions & 0 deletions src/scrapebadger/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from scrapebadger.twitter.client import TwitterClient
from scrapebadger.vinted.client import VintedClient
from scrapebadger.web.client import WebClient
from scrapebadger.youtube.client import YoutubeClient

if TYPE_CHECKING:
from types import TracebackType
Expand Down Expand Up @@ -121,6 +122,7 @@ def __init__(
self._reddit: RedditClient | None = None
self._amazon: AmazonClient | None = None
self._ebay: EbayClient | None = None
self._youtube: YoutubeClient | None = None
self._tiktok: TikTokClient | None = None

@property
Expand Down Expand Up @@ -282,6 +284,26 @@ def ebay(self) -> EbayClient:
self._ebay = EbayClient(self._base_client)
return self._ebay

@property
def youtube(self) -> YoutubeClient:
"""Access YouTube Scraper API operations.

Returns:
YoutubeClient providing access to all YouTube endpoints (search,
videos, channels, playlists, comments, transcripts, trending,
shorts, community, music, reference).

Example:
```python
results = await client.youtube.search.search("lofi hip hop")
video = await client.youtube.videos.get_video("dQw4w9WgXcQ")
channel = await client.youtube.channels.get_channel("@mkbhd")
```
"""
if self._youtube is None:
self._youtube = YoutubeClient(self._base_client)
return self._youtube

@property
def tiktok(self) -> TikTokClient:
"""Access TikTok Scraper API operations.
Expand Down
Loading
Loading