crawlora 1.20.0.dev1__tar.gz → 1.22.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {crawlora-1.20.0.dev1/crawlora.egg-info → crawlora-1.22.0.dev1}/PKG-INFO +1 -1
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/client.py +1 -1
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/client.pyi +274 -3
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/operations.py +119 -4
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1/crawlora.egg-info}/PKG-INFO +1 -1
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/docs/operations.md +9 -4
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/docs/recipes.md +10 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/pyproject.toml +1 -1
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_client.py +2 -2
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/LICENSE +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/MANIFEST.in +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/README.md +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/__init__.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/_pagination.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/_transport_sync.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/async_client.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora/py.typed +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora.egg-info/SOURCES.txt +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora.egg-info/dependency_links.txt +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora.egg-info/requires.txt +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/crawlora.egg-info/top_level.txt +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/examples/async_search.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/examples/bing_search.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/examples/paginate.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/examples/youtube_transcript.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/setup.cfg +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_async_httpx.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_examples.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_v14_features.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_v15_features.py +0 -0
- {crawlora-1.20.0.dev1 → crawlora-1.22.0.dev1}/tests/test_w2_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crawlora
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.22.0.dev1
|
|
4
4
|
Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
|
|
5
5
|
Author: Crawlora
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,7 +20,7 @@ from ._transport_sync import KeepAliveTransport
|
|
|
20
20
|
from .operations import GROUPS, OPERATIONS
|
|
21
21
|
|
|
22
22
|
DEFAULT_BASE_URL = "https://api.crawlora.net/api/v1"
|
|
23
|
-
VERSION = "1.
|
|
23
|
+
VERSION = "1.22.0-sdk.1"
|
|
24
24
|
DEFAULT_USER_AGENT = f"crawlora-python-sdk/{VERSION}"
|
|
25
25
|
DEFAULT_MAX_RETRY_DELAY = 30.0
|
|
26
26
|
DEFAULT_RETRY_STATUSES = (408, 409, 425, 429)
|
|
@@ -15420,6 +15420,100 @@ ModelTechstackTechnology = TypedDict('ModelTechstackTechnology', {
|
|
|
15420
15420
|
'version': NotRequired[str],
|
|
15421
15421
|
}, total=False)
|
|
15422
15422
|
|
|
15423
|
+
ModelThreadsAuthor = TypedDict('ModelThreadsAuthor', {
|
|
15424
|
+
'id': NotRequired[str],
|
|
15425
|
+
'name': NotRequired[str],
|
|
15426
|
+
'username': NotRequired[str],
|
|
15427
|
+
}, total=False)
|
|
15428
|
+
|
|
15429
|
+
ModelThreadsPost = TypedDict('ModelThreadsPost', {
|
|
15430
|
+
'author': NotRequired[ModelThreadsAuthor],
|
|
15431
|
+
'code': NotRequired[str],
|
|
15432
|
+
'image_url': NotRequired[str],
|
|
15433
|
+
'text': NotRequired[str],
|
|
15434
|
+
'url': NotRequired[str],
|
|
15435
|
+
}, total=False)
|
|
15436
|
+
|
|
15437
|
+
ModelThreadsProfile = TypedDict('ModelThreadsProfile', {
|
|
15438
|
+
'avatar_url': NotRequired[str],
|
|
15439
|
+
'biography': NotRequired[str],
|
|
15440
|
+
'followers_count': NotRequired[int],
|
|
15441
|
+
'name': NotRequired[str],
|
|
15442
|
+
'threads_count': NotRequired[int],
|
|
15443
|
+
'url': NotRequired[str],
|
|
15444
|
+
'username': NotRequired[str],
|
|
15445
|
+
}, total=False)
|
|
15446
|
+
|
|
15447
|
+
ModelThreadsProfilePostsResult = TypedDict('ModelThreadsProfilePostsResult', {
|
|
15448
|
+
'has_more': NotRequired[bool],
|
|
15449
|
+
'items': NotRequired[list[ModelThreadsThread]],
|
|
15450
|
+
'next_cursor': NotRequired[str],
|
|
15451
|
+
'username': NotRequired[str],
|
|
15452
|
+
}, total=False)
|
|
15453
|
+
|
|
15454
|
+
ModelThreadsRepliesResult = TypedDict('ModelThreadsRepliesResult', {
|
|
15455
|
+
'code': NotRequired[str],
|
|
15456
|
+
'has_more': NotRequired[bool],
|
|
15457
|
+
'items': NotRequired[list[ModelThreadsThread]],
|
|
15458
|
+
'next_cursor': NotRequired[str],
|
|
15459
|
+
'pagination_limited': NotRequired[bool],
|
|
15460
|
+
'username': NotRequired[str],
|
|
15461
|
+
}, total=False)
|
|
15462
|
+
|
|
15463
|
+
ModelThreadsSearchResult = TypedDict('ModelThreadsSearchResult', {
|
|
15464
|
+
'has_more': NotRequired[bool],
|
|
15465
|
+
'items': NotRequired[list[ModelThreadsThread]],
|
|
15466
|
+
'next_cursor': NotRequired[str],
|
|
15467
|
+
'query': NotRequired[str],
|
|
15468
|
+
}, total=False)
|
|
15469
|
+
|
|
15470
|
+
ModelThreadsThread = TypedDict('ModelThreadsThread', {
|
|
15471
|
+
'author': NotRequired[ModelThreadsAuthor],
|
|
15472
|
+
'code': NotRequired[str],
|
|
15473
|
+
'created_at': NotRequired[str],
|
|
15474
|
+
'id': NotRequired[str],
|
|
15475
|
+
'image_urls': NotRequired[list[str]],
|
|
15476
|
+
'is_reply': NotRequired[bool],
|
|
15477
|
+
'like_count': NotRequired[int],
|
|
15478
|
+
'quote_count': NotRequired[int],
|
|
15479
|
+
'reply_count': NotRequired[int],
|
|
15480
|
+
'reply_to': NotRequired[str],
|
|
15481
|
+
'repost_count': NotRequired[int],
|
|
15482
|
+
'text': NotRequired[str],
|
|
15483
|
+
'url': NotRequired[str],
|
|
15484
|
+
'video_urls': NotRequired[list[str]],
|
|
15485
|
+
}, total=False)
|
|
15486
|
+
|
|
15487
|
+
ModelThreadsPostResponseDoc = TypedDict('ModelThreadsPostResponseDoc', {
|
|
15488
|
+
'code': NotRequired[int],
|
|
15489
|
+
'data': NotRequired[ModelThreadsPost],
|
|
15490
|
+
'msg': NotRequired[str],
|
|
15491
|
+
}, total=False)
|
|
15492
|
+
|
|
15493
|
+
ModelThreadsProfilePostsResponseDoc = TypedDict('ModelThreadsProfilePostsResponseDoc', {
|
|
15494
|
+
'code': NotRequired[int],
|
|
15495
|
+
'data': NotRequired[ModelThreadsProfilePostsResult],
|
|
15496
|
+
'msg': NotRequired[str],
|
|
15497
|
+
}, total=False)
|
|
15498
|
+
|
|
15499
|
+
ModelThreadsProfileResponseDoc = TypedDict('ModelThreadsProfileResponseDoc', {
|
|
15500
|
+
'code': NotRequired[int],
|
|
15501
|
+
'data': NotRequired[ModelThreadsProfile],
|
|
15502
|
+
'msg': NotRequired[str],
|
|
15503
|
+
}, total=False)
|
|
15504
|
+
|
|
15505
|
+
ModelThreadsRepliesResponseDoc = TypedDict('ModelThreadsRepliesResponseDoc', {
|
|
15506
|
+
'code': NotRequired[int],
|
|
15507
|
+
'data': NotRequired[ModelThreadsRepliesResult],
|
|
15508
|
+
'msg': NotRequired[str],
|
|
15509
|
+
}, total=False)
|
|
15510
|
+
|
|
15511
|
+
ModelThreadsSearchResponseDoc = TypedDict('ModelThreadsSearchResponseDoc', {
|
|
15512
|
+
'code': NotRequired[int],
|
|
15513
|
+
'data': NotRequired[ModelThreadsSearchResult],
|
|
15514
|
+
'msg': NotRequired[str],
|
|
15515
|
+
}, total=False)
|
|
15516
|
+
|
|
15423
15517
|
ModelTiktokCategory = TypedDict('ModelTiktokCategory', {
|
|
15424
15518
|
'name': NotRequired[str],
|
|
15425
15519
|
'type': NotRequired[str],
|
|
@@ -17383,6 +17477,7 @@ ModelXPostQuote = TypedDict('ModelXPostQuote', {
|
|
|
17383
17477
|
}, total=False)
|
|
17384
17478
|
|
|
17385
17479
|
ModelXProfile = TypedDict('ModelXProfile', {
|
|
17480
|
+
'affiliate_label': NotRequired[str],
|
|
17386
17481
|
'avatar_url': NotRequired[str],
|
|
17387
17482
|
'banner_url': NotRequired[str],
|
|
17388
17483
|
'bio_urls': NotRequired[list[str]],
|
|
@@ -19962,7 +20057,7 @@ DatasetsJobsCompaniesParams = TypedDict('DatasetsJobsCompaniesParams', {
|
|
|
19962
20057
|
'_timeout': NotRequired[float],
|
|
19963
20058
|
'_headers': NotRequired[Mapping[str, str]],
|
|
19964
20059
|
'q': NotRequired[str],
|
|
19965
|
-
'provider': NotRequired[
|
|
20060
|
+
'provider': NotRequired[Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold']],
|
|
19966
20061
|
'status': NotRequired[str],
|
|
19967
20062
|
'min_open_roles': NotRequired[int],
|
|
19968
20063
|
'sort': NotRequired[str],
|
|
@@ -20002,7 +20097,7 @@ DatasetsJobsNearbyParams = TypedDict('DatasetsJobsNearbyParams', {
|
|
|
20002
20097
|
'lat': Required[float],
|
|
20003
20098
|
'lon': Required[float],
|
|
20004
20099
|
'radius_km': NotRequired[float],
|
|
20005
|
-
'provider': NotRequired[
|
|
20100
|
+
'provider': NotRequired[Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold']],
|
|
20006
20101
|
'include_closed': NotRequired[bool],
|
|
20007
20102
|
'page': NotRequired[int],
|
|
20008
20103
|
'page_size': NotRequired[int],
|
|
@@ -20015,7 +20110,7 @@ DatasetsJobsSearchParams = TypedDict('DatasetsJobsSearchParams', {
|
|
|
20015
20110
|
'_headers': NotRequired[Mapping[str, str]],
|
|
20016
20111
|
'q': NotRequired[str],
|
|
20017
20112
|
'company': NotRequired[str],
|
|
20018
|
-
'provider': NotRequired[
|
|
20113
|
+
'provider': NotRequired[Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold']],
|
|
20019
20114
|
'department': NotRequired[str],
|
|
20020
20115
|
'location': NotRequired[str],
|
|
20021
20116
|
'employment_type': NotRequired[str],
|
|
@@ -25467,6 +25562,49 @@ TcdbTopSetsParams = TypedDict('TcdbTopSetsParams', {
|
|
|
25467
25562
|
'limit': NotRequired[int],
|
|
25468
25563
|
}, total=False)
|
|
25469
25564
|
|
|
25565
|
+
ThreadsPostResponse = ModelThreadsPostResponseDoc
|
|
25566
|
+
ThreadsPostParams = TypedDict('ThreadsPostParams', {
|
|
25567
|
+
'_response_type': NotRequired[ResponseType],
|
|
25568
|
+
'_timeout': NotRequired[float],
|
|
25569
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
25570
|
+
'username': Required[str],
|
|
25571
|
+
'code': Required[str],
|
|
25572
|
+
}, total=False)
|
|
25573
|
+
|
|
25574
|
+
ThreadsPostRepliesResponse = ModelThreadsRepliesResponseDoc
|
|
25575
|
+
ThreadsPostRepliesParams = TypedDict('ThreadsPostRepliesParams', {
|
|
25576
|
+
'_response_type': NotRequired[ResponseType],
|
|
25577
|
+
'_timeout': NotRequired[float],
|
|
25578
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
25579
|
+
'username': Required[str],
|
|
25580
|
+
'code': Required[str],
|
|
25581
|
+
}, total=False)
|
|
25582
|
+
|
|
25583
|
+
ThreadsProfileResponse = ModelThreadsProfileResponseDoc
|
|
25584
|
+
ThreadsProfileParams = TypedDict('ThreadsProfileParams', {
|
|
25585
|
+
'_response_type': NotRequired[ResponseType],
|
|
25586
|
+
'_timeout': NotRequired[float],
|
|
25587
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
25588
|
+
'username': Required[str],
|
|
25589
|
+
}, total=False)
|
|
25590
|
+
|
|
25591
|
+
ThreadsProfilePostsResponse = ModelThreadsProfilePostsResponseDoc
|
|
25592
|
+
ThreadsProfilePostsParams = TypedDict('ThreadsProfilePostsParams', {
|
|
25593
|
+
'_response_type': NotRequired[ResponseType],
|
|
25594
|
+
'_timeout': NotRequired[float],
|
|
25595
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
25596
|
+
'username': Required[str],
|
|
25597
|
+
'cursor': NotRequired[str],
|
|
25598
|
+
}, total=False)
|
|
25599
|
+
|
|
25600
|
+
ThreadsSearchResponse = ModelThreadsSearchResponseDoc
|
|
25601
|
+
ThreadsSearchParams = TypedDict('ThreadsSearchParams', {
|
|
25602
|
+
'_response_type': NotRequired[ResponseType],
|
|
25603
|
+
'_timeout': NotRequired[float],
|
|
25604
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
25605
|
+
'q': Required[str],
|
|
25606
|
+
}, total=False)
|
|
25607
|
+
|
|
25470
25608
|
TiktokCategoryResponse = ModelTiktokCategoryResponseDoc
|
|
25471
25609
|
TiktokCategoryParams = TypedDict('TiktokCategoryParams', {
|
|
25472
25610
|
'_response_type': NotRequired[ResponseType],
|
|
@@ -27362,6 +27500,13 @@ class TcdbGroup:
|
|
|
27362
27500
|
def team(self, **params: Unpack[TcdbTeamParams]) -> TcdbTeamResponse: ...
|
|
27363
27501
|
def top_sets(self, **params: Unpack[TcdbTopSetsParams]) -> TcdbTopSetsResponse: ...
|
|
27364
27502
|
|
|
27503
|
+
class ThreadsGroup:
|
|
27504
|
+
def post(self, **params: Unpack[ThreadsPostParams]) -> ThreadsPostResponse: ...
|
|
27505
|
+
def post_replies(self, **params: Unpack[ThreadsPostRepliesParams]) -> ThreadsPostRepliesResponse: ...
|
|
27506
|
+
def profile(self, **params: Unpack[ThreadsProfileParams]) -> ThreadsProfileResponse: ...
|
|
27507
|
+
def profile_posts(self, **params: Unpack[ThreadsProfilePostsParams]) -> ThreadsProfilePostsResponse: ...
|
|
27508
|
+
def search(self, **params: Unpack[ThreadsSearchParams]) -> ThreadsSearchResponse: ...
|
|
27509
|
+
|
|
27365
27510
|
class TiktokGroup:
|
|
27366
27511
|
def category(self, **params: Unpack[TiktokCategoryParams]) -> TiktokCategoryResponse: ...
|
|
27367
27512
|
def video_comments(self, **params: Unpack[TiktokVideoCommentsParams]) -> TiktokVideoCommentsResponse: ...
|
|
@@ -28167,6 +28312,11 @@ OperationId = Literal[
|
|
|
28167
28312
|
'tcdb-tagged',
|
|
28168
28313
|
'tcdb-team',
|
|
28169
28314
|
'tcdb-top-sets',
|
|
28315
|
+
'threads-post',
|
|
28316
|
+
'threads-post-replies',
|
|
28317
|
+
'threads-profile',
|
|
28318
|
+
'threads-profile-posts',
|
|
28319
|
+
'threads-search',
|
|
28170
28320
|
'tiktok-category',
|
|
28171
28321
|
'tiktok-video-comments',
|
|
28172
28322
|
'tiktok-explore',
|
|
@@ -28342,6 +28492,7 @@ class CrawloraClient:
|
|
|
28342
28492
|
spotify: SpotifyGroup
|
|
28343
28493
|
steam: SteamGroup
|
|
28344
28494
|
tcdb: TcdbGroup
|
|
28495
|
+
threads: ThreadsGroup
|
|
28345
28496
|
tiktok: TiktokGroup
|
|
28346
28497
|
tmdb: TmdbGroup
|
|
28347
28498
|
trip_advisor: TripAdvisorGroup
|
|
@@ -36379,6 +36530,66 @@ class CrawloraClient:
|
|
|
36379
36530
|
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36380
36531
|
) -> TcdbTopSetsResponse: ...
|
|
36381
36532
|
@overload
|
|
36533
|
+
def operation(
|
|
36534
|
+
self,
|
|
36535
|
+
operation_id: Literal['threads-post'],
|
|
36536
|
+
params: ThreadsPostParams,
|
|
36537
|
+
*,
|
|
36538
|
+
response_type: ResponseType = ...,
|
|
36539
|
+
timeout: float | None = ...,
|
|
36540
|
+
headers: Mapping[str, str] | None = ...,
|
|
36541
|
+
retries: int | None = ...,
|
|
36542
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36543
|
+
) -> ThreadsPostResponse: ...
|
|
36544
|
+
@overload
|
|
36545
|
+
def operation(
|
|
36546
|
+
self,
|
|
36547
|
+
operation_id: Literal['threads-post-replies'],
|
|
36548
|
+
params: ThreadsPostRepliesParams,
|
|
36549
|
+
*,
|
|
36550
|
+
response_type: ResponseType = ...,
|
|
36551
|
+
timeout: float | None = ...,
|
|
36552
|
+
headers: Mapping[str, str] | None = ...,
|
|
36553
|
+
retries: int | None = ...,
|
|
36554
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36555
|
+
) -> ThreadsPostRepliesResponse: ...
|
|
36556
|
+
@overload
|
|
36557
|
+
def operation(
|
|
36558
|
+
self,
|
|
36559
|
+
operation_id: Literal['threads-profile'],
|
|
36560
|
+
params: ThreadsProfileParams,
|
|
36561
|
+
*,
|
|
36562
|
+
response_type: ResponseType = ...,
|
|
36563
|
+
timeout: float | None = ...,
|
|
36564
|
+
headers: Mapping[str, str] | None = ...,
|
|
36565
|
+
retries: int | None = ...,
|
|
36566
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36567
|
+
) -> ThreadsProfileResponse: ...
|
|
36568
|
+
@overload
|
|
36569
|
+
def operation(
|
|
36570
|
+
self,
|
|
36571
|
+
operation_id: Literal['threads-profile-posts'],
|
|
36572
|
+
params: ThreadsProfilePostsParams,
|
|
36573
|
+
*,
|
|
36574
|
+
response_type: ResponseType = ...,
|
|
36575
|
+
timeout: float | None = ...,
|
|
36576
|
+
headers: Mapping[str, str] | None = ...,
|
|
36577
|
+
retries: int | None = ...,
|
|
36578
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36579
|
+
) -> ThreadsProfilePostsResponse: ...
|
|
36580
|
+
@overload
|
|
36581
|
+
def operation(
|
|
36582
|
+
self,
|
|
36583
|
+
operation_id: Literal['threads-search'],
|
|
36584
|
+
params: ThreadsSearchParams,
|
|
36585
|
+
*,
|
|
36586
|
+
response_type: ResponseType = ...,
|
|
36587
|
+
timeout: float | None = ...,
|
|
36588
|
+
headers: Mapping[str, str] | None = ...,
|
|
36589
|
+
retries: int | None = ...,
|
|
36590
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
36591
|
+
) -> ThreadsSearchResponse: ...
|
|
36592
|
+
@overload
|
|
36382
36593
|
def operation(
|
|
36383
36594
|
self,
|
|
36384
36595
|
operation_id: Literal['tiktok-category'],
|
|
@@ -45775,6 +45986,66 @@ class CrawloraClient:
|
|
|
45775
45986
|
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
45776
45987
|
) -> TcdbTopSetsResponse: ...
|
|
45777
45988
|
@overload
|
|
45989
|
+
def request(
|
|
45990
|
+
self,
|
|
45991
|
+
operation_id: Literal['threads-post'],
|
|
45992
|
+
params: ThreadsPostParams,
|
|
45993
|
+
*,
|
|
45994
|
+
response_type: ResponseType = ...,
|
|
45995
|
+
timeout: float | None = ...,
|
|
45996
|
+
headers: Mapping[str, str] | None = ...,
|
|
45997
|
+
retries: int | None = ...,
|
|
45998
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
45999
|
+
) -> ThreadsPostResponse: ...
|
|
46000
|
+
@overload
|
|
46001
|
+
def request(
|
|
46002
|
+
self,
|
|
46003
|
+
operation_id: Literal['threads-post-replies'],
|
|
46004
|
+
params: ThreadsPostRepliesParams,
|
|
46005
|
+
*,
|
|
46006
|
+
response_type: ResponseType = ...,
|
|
46007
|
+
timeout: float | None = ...,
|
|
46008
|
+
headers: Mapping[str, str] | None = ...,
|
|
46009
|
+
retries: int | None = ...,
|
|
46010
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
46011
|
+
) -> ThreadsPostRepliesResponse: ...
|
|
46012
|
+
@overload
|
|
46013
|
+
def request(
|
|
46014
|
+
self,
|
|
46015
|
+
operation_id: Literal['threads-profile'],
|
|
46016
|
+
params: ThreadsProfileParams,
|
|
46017
|
+
*,
|
|
46018
|
+
response_type: ResponseType = ...,
|
|
46019
|
+
timeout: float | None = ...,
|
|
46020
|
+
headers: Mapping[str, str] | None = ...,
|
|
46021
|
+
retries: int | None = ...,
|
|
46022
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
46023
|
+
) -> ThreadsProfileResponse: ...
|
|
46024
|
+
@overload
|
|
46025
|
+
def request(
|
|
46026
|
+
self,
|
|
46027
|
+
operation_id: Literal['threads-profile-posts'],
|
|
46028
|
+
params: ThreadsProfilePostsParams,
|
|
46029
|
+
*,
|
|
46030
|
+
response_type: ResponseType = ...,
|
|
46031
|
+
timeout: float | None = ...,
|
|
46032
|
+
headers: Mapping[str, str] | None = ...,
|
|
46033
|
+
retries: int | None = ...,
|
|
46034
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
46035
|
+
) -> ThreadsProfilePostsResponse: ...
|
|
46036
|
+
@overload
|
|
46037
|
+
def request(
|
|
46038
|
+
self,
|
|
46039
|
+
operation_id: Literal['threads-search'],
|
|
46040
|
+
params: ThreadsSearchParams,
|
|
46041
|
+
*,
|
|
46042
|
+
response_type: ResponseType = ...,
|
|
46043
|
+
timeout: float | None = ...,
|
|
46044
|
+
headers: Mapping[str, str] | None = ...,
|
|
46045
|
+
retries: int | None = ...,
|
|
46046
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
46047
|
+
) -> ThreadsSearchResponse: ...
|
|
46048
|
+
@overload
|
|
45778
46049
|
def request(
|
|
45779
46050
|
self,
|
|
45780
46051
|
operation_id: Literal['tiktok-category'],
|
|
@@ -3408,7 +3408,23 @@ OPERATIONS = {'airbnb-host': {'bodyParam': None,
|
|
|
3408
3408
|
'pathParams': [],
|
|
3409
3409
|
'produces': ['application/json'],
|
|
3410
3410
|
'queryParams': [{'in': 'query', 'name': 'q', 'type': 'string'},
|
|
3411
|
-
{'
|
|
3411
|
+
{'enum': ['greenhouse',
|
|
3412
|
+
'lever',
|
|
3413
|
+
'ashby',
|
|
3414
|
+
'workday',
|
|
3415
|
+
'smartrecruiters',
|
|
3416
|
+
'workable',
|
|
3417
|
+
'recruitee',
|
|
3418
|
+
'rippling',
|
|
3419
|
+
'personio',
|
|
3420
|
+
'teamtailor',
|
|
3421
|
+
'oracle',
|
|
3422
|
+
'ukg',
|
|
3423
|
+
'icims',
|
|
3424
|
+
'eightfold'],
|
|
3425
|
+
'in': 'query',
|
|
3426
|
+
'name': 'provider',
|
|
3427
|
+
'type': 'string'},
|
|
3412
3428
|
{'in': 'query', 'name': 'status', 'type': 'string'},
|
|
3413
3429
|
{'in': 'query', 'name': 'min_open_roles', 'type': 'integer'},
|
|
3414
3430
|
{'in': 'query', 'name': 'sort', 'type': 'string'},
|
|
@@ -3461,7 +3477,23 @@ OPERATIONS = {'airbnb-host': {'bodyParam': None,
|
|
|
3461
3477
|
'queryParams': [{'in': 'query', 'name': 'lat', 'required': True, 'type': 'number'},
|
|
3462
3478
|
{'in': 'query', 'name': 'lon', 'required': True, 'type': 'number'},
|
|
3463
3479
|
{'in': 'query', 'name': 'radius_km', 'type': 'number'},
|
|
3464
|
-
{'
|
|
3480
|
+
{'enum': ['greenhouse',
|
|
3481
|
+
'lever',
|
|
3482
|
+
'ashby',
|
|
3483
|
+
'workday',
|
|
3484
|
+
'smartrecruiters',
|
|
3485
|
+
'workable',
|
|
3486
|
+
'recruitee',
|
|
3487
|
+
'rippling',
|
|
3488
|
+
'personio',
|
|
3489
|
+
'teamtailor',
|
|
3490
|
+
'oracle',
|
|
3491
|
+
'ukg',
|
|
3492
|
+
'icims',
|
|
3493
|
+
'eightfold'],
|
|
3494
|
+
'in': 'query',
|
|
3495
|
+
'name': 'provider',
|
|
3496
|
+
'type': 'string'},
|
|
3465
3497
|
{'in': 'query', 'name': 'include_closed', 'type': 'boolean'},
|
|
3466
3498
|
{'in': 'query', 'name': 'page', 'type': 'integer'},
|
|
3467
3499
|
{'in': 'query', 'name': 'page_size', 'type': 'integer'}],
|
|
@@ -3478,7 +3510,23 @@ OPERATIONS = {'airbnb-host': {'bodyParam': None,
|
|
|
3478
3510
|
'produces': ['application/json'],
|
|
3479
3511
|
'queryParams': [{'in': 'query', 'name': 'q', 'type': 'string'},
|
|
3480
3512
|
{'in': 'query', 'name': 'company', 'type': 'string'},
|
|
3481
|
-
{'
|
|
3513
|
+
{'enum': ['greenhouse',
|
|
3514
|
+
'lever',
|
|
3515
|
+
'ashby',
|
|
3516
|
+
'workday',
|
|
3517
|
+
'smartrecruiters',
|
|
3518
|
+
'workable',
|
|
3519
|
+
'recruitee',
|
|
3520
|
+
'rippling',
|
|
3521
|
+
'personio',
|
|
3522
|
+
'teamtailor',
|
|
3523
|
+
'oracle',
|
|
3524
|
+
'ukg',
|
|
3525
|
+
'icims',
|
|
3526
|
+
'eightfold'],
|
|
3527
|
+
'in': 'query',
|
|
3528
|
+
'name': 'provider',
|
|
3529
|
+
'type': 'string'},
|
|
3482
3530
|
{'in': 'query', 'name': 'department', 'type': 'string'},
|
|
3483
3531
|
{'in': 'query', 'name': 'location', 'type': 'string'},
|
|
3484
3532
|
{'in': 'query', 'name': 'employment_type', 'type': 'string'},
|
|
@@ -11649,6 +11697,63 @@ OPERATIONS = {'airbnb-host': {'bodyParam': None,
|
|
|
11649
11697
|
'produces': ['application/json'],
|
|
11650
11698
|
'queryParams': [{'in': 'query', 'name': 'limit', 'type': 'integer'}],
|
|
11651
11699
|
'security': ['ApiKeyAuth']},
|
|
11700
|
+
'threads-post': {'bodyParam': None,
|
|
11701
|
+
'bodyRequired': False,
|
|
11702
|
+
'consumes': [],
|
|
11703
|
+
'formParams': [],
|
|
11704
|
+
'id': 'threads-post',
|
|
11705
|
+
'method': 'GET',
|
|
11706
|
+
'path': '/threads/post/{username}/{code}',
|
|
11707
|
+
'pathParams': ['username', 'code'],
|
|
11708
|
+
'produces': ['application/json'],
|
|
11709
|
+
'queryParams': [],
|
|
11710
|
+
'security': ['ApiKeyAuth']},
|
|
11711
|
+
'threads-post-replies': {'bodyParam': None,
|
|
11712
|
+
'bodyRequired': False,
|
|
11713
|
+
'consumes': [],
|
|
11714
|
+
'formParams': [],
|
|
11715
|
+
'id': 'threads-post-replies',
|
|
11716
|
+
'method': 'GET',
|
|
11717
|
+
'path': '/threads/post/{username}/{code}/replies',
|
|
11718
|
+
'pathParams': ['username', 'code'],
|
|
11719
|
+
'produces': ['application/json'],
|
|
11720
|
+
'queryParams': [],
|
|
11721
|
+
'security': ['ApiKeyAuth']},
|
|
11722
|
+
'threads-profile': {'bodyParam': None,
|
|
11723
|
+
'bodyRequired': False,
|
|
11724
|
+
'consumes': [],
|
|
11725
|
+
'formParams': [],
|
|
11726
|
+
'id': 'threads-profile',
|
|
11727
|
+
'method': 'GET',
|
|
11728
|
+
'path': '/threads/profile/{username}',
|
|
11729
|
+
'pathParams': ['username'],
|
|
11730
|
+
'produces': ['application/json'],
|
|
11731
|
+
'queryParams': [],
|
|
11732
|
+
'security': ['ApiKeyAuth']},
|
|
11733
|
+
'threads-profile-posts': {'bodyParam': None,
|
|
11734
|
+
'bodyRequired': False,
|
|
11735
|
+
'consumes': [],
|
|
11736
|
+
'cursorParams': ['cursor'],
|
|
11737
|
+
'formParams': [],
|
|
11738
|
+
'id': 'threads-profile-posts',
|
|
11739
|
+
'method': 'GET',
|
|
11740
|
+
'paginatable': True,
|
|
11741
|
+
'path': '/threads/profile/{username}/posts',
|
|
11742
|
+
'pathParams': ['username'],
|
|
11743
|
+
'produces': ['application/json'],
|
|
11744
|
+
'queryParams': [{'in': 'query', 'name': 'cursor', 'type': 'string'}],
|
|
11745
|
+
'security': ['ApiKeyAuth']},
|
|
11746
|
+
'threads-search': {'bodyParam': None,
|
|
11747
|
+
'bodyRequired': False,
|
|
11748
|
+
'consumes': [],
|
|
11749
|
+
'formParams': [],
|
|
11750
|
+
'id': 'threads-search',
|
|
11751
|
+
'method': 'GET',
|
|
11752
|
+
'path': '/threads/search',
|
|
11753
|
+
'pathParams': [],
|
|
11754
|
+
'produces': ['application/json'],
|
|
11755
|
+
'queryParams': [{'in': 'query', 'name': 'q', 'required': True, 'type': 'string'}],
|
|
11756
|
+
'security': ['ApiKeyAuth']},
|
|
11652
11757
|
'tiktok-category': {'bodyParam': None,
|
|
11653
11758
|
'bodyRequired': False,
|
|
11654
11759
|
'consumes': ['application/json'],
|
|
@@ -13916,6 +14021,11 @@ GROUPS = {'airbnb': {'host': 'airbnb-host',
|
|
|
13916
14021
|
'tagged': 'tcdb-tagged',
|
|
13917
14022
|
'team': 'tcdb-team',
|
|
13918
14023
|
'top_sets': 'tcdb-top-sets'},
|
|
14024
|
+
'threads': {'post': 'threads-post',
|
|
14025
|
+
'post_replies': 'threads-post-replies',
|
|
14026
|
+
'profile': 'threads-profile',
|
|
14027
|
+
'profile_posts': 'threads-profile-posts',
|
|
14028
|
+
'search': 'threads-search'},
|
|
13919
14029
|
'tiktok': {'category': 'tiktok-category',
|
|
13920
14030
|
'challenge': 'tiktok-challenge',
|
|
13921
14031
|
'challenge_list': 'tiktok-challenge-list',
|
|
@@ -14034,7 +14144,7 @@ GROUPS = {'airbnb': {'host': 'airbnb-host',
|
|
|
14034
14144
|
'video': 'youtube-video'},
|
|
14035
14145
|
'zillow': {'autocomplete': 'zillow-autocomplete', 'property': 'zillow-property', 'search': 'zillow-search'}}
|
|
14036
14146
|
|
|
14037
|
-
OPERATION_COUNT =
|
|
14147
|
+
OPERATION_COUNT = 787
|
|
14038
14148
|
|
|
14039
14149
|
class OperationId:
|
|
14040
14150
|
AIRBNB_HOST = 'airbnb-host'
|
|
@@ -14696,6 +14806,11 @@ class OperationId:
|
|
|
14696
14806
|
TCDB_TAGGED = 'tcdb-tagged'
|
|
14697
14807
|
TCDB_TEAM = 'tcdb-team'
|
|
14698
14808
|
TCDB_TOP_SETS = 'tcdb-top-sets'
|
|
14809
|
+
THREADS_POST = 'threads-post'
|
|
14810
|
+
THREADS_POST_REPLIES = 'threads-post-replies'
|
|
14811
|
+
THREADS_PROFILE = 'threads-profile'
|
|
14812
|
+
THREADS_PROFILE_POSTS = 'threads-profile-posts'
|
|
14813
|
+
THREADS_SEARCH = 'threads-search'
|
|
14699
14814
|
TIKTOK_CATEGORY = 'tiktok-category'
|
|
14700
14815
|
TIKTOK_CHALLENGE = 'tiktok-challenge'
|
|
14701
14816
|
TIKTOK_CHALLENGE_LIST = 'tiktok-challenge-list'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crawlora
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.22.0.dev1
|
|
4
4
|
Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
|
|
5
5
|
Author: Crawlora
|
|
6
6
|
License-Expression: MIT
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Generated from `openapi/public.json`. Deprecated, admin, and internal operations are excluded from this SDK contract.
|
|
4
4
|
|
|
5
|
-
Total operations: `
|
|
5
|
+
Total operations: `787`
|
|
6
6
|
|
|
7
7
|
| Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
|
|
8
8
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
@@ -148,12 +148,12 @@ Total operations: `782`
|
|
|
148
148
|
| datasets | `datasets.housing_markets_facets` | `datasets-housing-markets-facets` | `GET /datasets/housing-markets/facets` | `facet` (query str required)<br>`q` (query str)<br>`region_type` (query str)<br>`state_code` (query str)<br>`property_type` (query str)<br>`parent_metro_code` (query str)<br>`zip_code` (query str)<br>`period` (query str)<br>`latest` (query bool)<br>`min_median_sale_price` (query float)<br>`max_median_sale_price` (query float)<br>`min_median_list_price` (query float)<br>`max_median_list_price` (query float)<br>`min_price_to_income` (query float)<br>`max_price_to_income` (query float)<br>`min_salary_to_buy` (query int)<br>`max_salary_to_buy` (query int)<br>`min_median_dom` (query float)<br>`max_median_dom` (query float)<br>`min_inventory` (query int)<br>`max_inventory` (query int)<br>`min_homes_sold` (query int) | `ApiKeyAuth` | `DatasetsHousingMarketsFacetsResponse` | |
|
|
149
149
|
| datasets | `datasets.housing_markets_item` | `datasets-housing-markets-item` | `GET /datasets/housing-markets/items/{region_type}/{table_id}` | `region_type` (path str required)<br>`table_id` (path int required)<br>`period` (query str)<br>`property_type` (query str)<br>`history` (query bool) | `ApiKeyAuth` | `DatasetsHousingMarketsItemResponse` | |
|
|
150
150
|
| datasets | `datasets.housing_markets_search` | `datasets-housing-markets-search` | `GET /datasets/housing-markets/search` | `q` (query str)<br>`region_type` (query str)<br>`state_code` (query str)<br>`property_type` (query str)<br>`parent_metro_code` (query str)<br>`zip_code` (query str)<br>`period` (query str)<br>`latest` (query bool)<br>`min_median_sale_price` (query float)<br>`max_median_sale_price` (query float)<br>`min_median_list_price` (query float)<br>`max_median_list_price` (query float)<br>`min_price_to_income` (query float)<br>`max_price_to_income` (query float)<br>`min_salary_to_buy` (query int)<br>`max_salary_to_buy` (query int)<br>`min_median_dom` (query float)<br>`max_median_dom` (query float)<br>`min_inventory` (query int)<br>`max_inventory` (query int)<br>`min_homes_sold` (query int)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsHousingMarketsSearchResponse` | |
|
|
151
|
-
| datasets | `datasets.jobs_companies` | `datasets-jobs-companies` | `GET /datasets/jobs/companies` | `q` (query str)<br>`provider` (query
|
|
151
|
+
| datasets | `datasets.jobs_companies` | `datasets-jobs-companies` | `GET /datasets/jobs/companies` | `q` (query str)<br>`provider` (query Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold'])<br>`status` (query str)<br>`min_open_roles` (query int)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsJobsCompaniesResponse` | |
|
|
152
152
|
| datasets | `datasets.jobs_company_item` | `datasets-jobs-company-item` | `GET /datasets/jobs/companies/{id}` | `id` (path str required) | `ApiKeyAuth` | `DatasetsJobsCompanyItemResponse` | |
|
|
153
153
|
| datasets | `datasets.jobs_facets` | `datasets-jobs-facets` | `GET /datasets/jobs/facets` | `size` (query int) | `ApiKeyAuth` | `DatasetsJobsFacetsResponse` | |
|
|
154
154
|
| datasets | `datasets.jobs_item` | `datasets-jobs-item` | `GET /datasets/jobs/items/{id}` | `id` (path str required) | `ApiKeyAuth` | `DatasetsJobsItemResponse` | |
|
|
155
|
-
| datasets | `datasets.jobs_nearby` | `datasets-jobs-nearby` | `GET /datasets/jobs/nearby` | `lat` (query float required)<br>`lon` (query float required)<br>`radius_km` (query float)<br>`provider` (query
|
|
156
|
-
| datasets | `datasets.jobs_search` | `datasets-jobs-search` | `GET /datasets/jobs/search` | `q` (query str)<br>`company` (query str)<br>`provider` (query
|
|
155
|
+
| datasets | `datasets.jobs_nearby` | `datasets-jobs-nearby` | `GET /datasets/jobs/nearby` | `lat` (query float required)<br>`lon` (query float required)<br>`radius_km` (query float)<br>`provider` (query Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold'])<br>`include_closed` (query bool)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsJobsNearbyResponse` | |
|
|
156
|
+
| datasets | `datasets.jobs_search` | `datasets-jobs-search` | `GET /datasets/jobs/search` | `q` (query str)<br>`company` (query str)<br>`provider` (query Literal['greenhouse', 'lever', 'ashby', 'workday', 'smartrecruiters', 'workable', 'recruitee', 'rippling', 'personio', 'teamtailor', 'oracle', 'ukg', 'icims', 'eightfold'])<br>`department` (query str)<br>`location` (query str)<br>`employment_type` (query str)<br>`remote` (query bool)<br>`include_closed` (query bool)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsJobsSearchResponse` | |
|
|
157
157
|
| datasets | `datasets.journalists_facets` | `datasets-journalists-facets` | `GET /datasets/journalists/facets` | `facet` (query str required)<br>`q` (query str)<br>`outlet` (query str)<br>`vertical` (query str)<br>`topic` (query str)<br>`contact_type` (query str) | `ApiKeyAuth` | `DatasetsJournalistsFacetsResponse` | |
|
|
158
158
|
| datasets | `datasets.journalists_item` | `datasets-journalists-item` | `GET /datasets/journalists/items/{outlet}/{slug}` | `outlet` (path str required)<br>`slug` (path str required) | `ApiKeyAuth` | `DatasetsJournalistsItemResponse` | |
|
|
159
159
|
| datasets | `datasets.journalists_search` | `datasets-journalists-search` | `GET /datasets/journalists/search` | `q` (query str)<br>`outlet` (query str)<br>`vertical` (query str)<br>`topic` (query str)<br>`contact_type` (query str)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsJournalistsSearchResponse` | |
|
|
@@ -670,6 +670,11 @@ Total operations: `782`
|
|
|
670
670
|
| tcdb | `tcdb.tagged` | `tcdb-tagged` | `GET /tcdb/tagged` | `id` (query str)<br>`path` (query str)<br>`url` (query str)<br>`sport` (query Literal['Baseball', 'Basketball', 'Boxing', 'Cricket', 'Football', 'Gaming', 'Golf', 'Hockey', 'Misc Sports', 'MMA', 'Multi-Sport', 'Non-Sport', 'Racing', 'Soccer', 'Tennis', 'Wrestling'])<br>`page` (query int)<br>`limit` (query int) | `ApiKeyAuth` | `TcdbTaggedResponse` | |
|
|
671
671
|
| tcdb | `tcdb.team` | `tcdb-team` | `GET /tcdb/team` | `id` (query str)<br>`path` (query str)<br>`url` (query str)<br>`limit` (query int) | `ApiKeyAuth` | `TcdbTeamResponse` | |
|
|
672
672
|
| tcdb | `tcdb.top_sets` | `tcdb-top-sets` | `GET /tcdb/top-sets` | `limit` (query int) | `ApiKeyAuth` | `TcdbTopSetsResponse` | |
|
|
673
|
+
| threads | `threads.post` | `threads-post` | `GET /threads/post/{username}/{code}` | `username` (path str required)<br>`code` (path str required) | `ApiKeyAuth` | `ThreadsPostResponse` | |
|
|
674
|
+
| threads | `threads.post_replies` | `threads-post-replies` | `GET /threads/post/{username}/{code}/replies` | `username` (path str required)<br>`code` (path str required) | `ApiKeyAuth` | `ThreadsPostRepliesResponse` | |
|
|
675
|
+
| threads | `threads.profile` | `threads-profile` | `GET /threads/profile/{username}` | `username` (path str required) | `ApiKeyAuth` | `ThreadsProfileResponse` | |
|
|
676
|
+
| threads | `threads.profile_posts` | `threads-profile-posts` | `GET /threads/profile/{username}/posts` | `username` (path str required)<br>`cursor` (query str) | `ApiKeyAuth` | `ThreadsProfilePostsResponse` | |
|
|
677
|
+
| threads | `threads.search` | `threads-search` | `GET /threads/search` | `q` (query str required) | `ApiKeyAuth` | `ThreadsSearchResponse` | |
|
|
673
678
|
| tiktok | `tiktok.category` | `tiktok-category` | `GET /tiktok/category` | none | `ApiKeyAuth` | `TiktokCategoryResponse` | |
|
|
674
679
|
| tiktok | `tiktok.video_comments` | `tiktok-video-comments` | `GET /tiktok/comments` | `aweme_id` (query str required)<br>`cursor` (query int) | `ApiKeyAuth` | `TiktokVideoCommentsResponse` | |
|
|
675
680
|
| tiktok | `tiktok.explore` | `tiktok-explore` | `GET /tiktok/explore/{id}` | `id` (path int required) | `ApiKeyAuth` | `TiktokExploreResponse` | |
|
|
@@ -39,6 +39,16 @@ posts = crawlora.reddit.search(q="python", subreddit="programming")
|
|
|
39
39
|
brand = crawlora.brand.retrieve(domain="stripe.com")
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
## Threads Public Lookups
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
profile = crawlora.threads.profile(username="zuck")
|
|
46
|
+
post = crawlora.threads.post(username="zuck", code="DakyAavlKLZ")
|
|
47
|
+
results = crawlora.threads.search(q="openai")
|
|
48
|
+
posts = crawlora.threads.profile_posts(username="zuck")
|
|
49
|
+
replies = crawlora.threads.post_replies(username="zuck", code="DakyAavlKLZ")
|
|
50
|
+
```
|
|
51
|
+
|
|
42
52
|
## Software, Reviews, And Market Datasets
|
|
43
53
|
|
|
44
54
|
Build a Chrome extension competitive-intelligence view without downloading the
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crawlora"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.22.0.dev1"
|
|
8
8
|
description = "Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -267,7 +267,7 @@ class CrawloraClientTest(unittest.TestCase):
|
|
|
267
267
|
self.assertIs(raised.exception.__cause__, cause)
|
|
268
268
|
|
|
269
269
|
def test_operation_metadata_count(self):
|
|
270
|
-
self.assertEqual(OPERATION_COUNT,
|
|
270
|
+
self.assertEqual(OPERATION_COUNT, 787)
|
|
271
271
|
|
|
272
272
|
def test_deprecated_endpoints_are_not_generated(self):
|
|
273
273
|
self.assertFalse(hasattr(CrawloraClient(api_key="api_test", base_url=self.base_url).google, "lens"))
|
|
@@ -296,7 +296,7 @@ class CrawloraClientTest(unittest.TestCase):
|
|
|
296
296
|
recipes_doc = root.joinpath("docs", "recipes.md").read_text()
|
|
297
297
|
|
|
298
298
|
for expected in [
|
|
299
|
-
"Total operations: `
|
|
299
|
+
"Total operations: `787`",
|
|
300
300
|
"`bing-search`",
|
|
301
301
|
"`GET /bing/search`",
|
|
302
302
|
"`bing.search`",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|