crawlora 1.7.0.dev1__tar.gz → 1.8.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.
Files changed (31) hide show
  1. {crawlora-1.7.0.dev1/crawlora.egg-info → crawlora-1.8.0.dev1}/PKG-INFO +3 -3
  2. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/README.md +2 -2
  3. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/client.py +1 -1
  4. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/client.pyi +544 -0
  5. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/operations.py +115 -1
  6. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1/crawlora.egg-info}/PKG-INFO +3 -3
  7. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/docs/operations.md +9 -1
  8. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/pyproject.toml +1 -1
  9. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/tests/test_client.py +2 -2
  10. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/LICENSE +0 -0
  11. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/MANIFEST.in +0 -0
  12. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/__init__.py +0 -0
  13. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/_pagination.py +0 -0
  14. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/_transport_sync.py +0 -0
  15. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/async_client.py +0 -0
  16. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora/py.typed +0 -0
  17. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora.egg-info/SOURCES.txt +0 -0
  18. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora.egg-info/dependency_links.txt +0 -0
  19. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora.egg-info/requires.txt +0 -0
  20. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/crawlora.egg-info/top_level.txt +0 -0
  21. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/docs/recipes.md +0 -0
  22. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/examples/async_search.py +0 -0
  23. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/examples/bing_search.py +0 -0
  24. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/examples/paginate.py +0 -0
  25. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/examples/youtube_transcript.py +0 -0
  26. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/setup.cfg +0 -0
  27. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/tests/test_async_httpx.py +0 -0
  28. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/tests/test_examples.py +0 -0
  29. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/tests/test_v14_features.py +0 -0
  30. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev1}/tests/test_v15_features.py +0 -0
  31. {crawlora-1.7.0.dev1 → crawlora-1.8.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.7.0.dev1
3
+ Version: 1.8.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
@@ -27,7 +27,7 @@ Dynamic: license-file
27
27
  # Crawlora Python SDK
28
28
 
29
29
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
30
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
30
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
31
31
  with generated type stubs for editor and type-checker support.
32
32
 
33
33
  - Runtime: Python 3.10+
@@ -38,7 +38,7 @@ with generated type stubs for editor and type-checker support.
38
38
  ## Install
39
39
 
40
40
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
41
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
41
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
42
42
 
43
43
  ```sh
44
44
  pip install --pre crawlora
@@ -1,7 +1,7 @@
1
1
  # Crawlora Python SDK
2
2
 
3
3
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
4
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
4
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
5
5
  with generated type stubs for editor and type-checker support.
6
6
 
7
7
  - Runtime: Python 3.10+
@@ -12,7 +12,7 @@ with generated type stubs for editor and type-checker support.
12
12
  ## Install
13
13
 
14
14
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
15
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
15
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
16
16
 
17
17
  ```sh
18
18
  pip install --pre crawlora
@@ -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.7.0-sdk.1"
23
+ VERSION = "1.8.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)
@@ -173,6 +173,43 @@ ModelAmazonSuggestResponseDoc = TypedDict('ModelAmazonSuggestResponseDoc', {
173
173
  'msg': NotRequired[str],
174
174
  }, total=False)
175
175
 
176
+ ModelAntibotBand = Literal['easy', 'medium', 'hard', 'very_hard', 'blocked', 'unknown']
177
+
178
+ ModelAntibotProtection = TypedDict('ModelAntibotProtection', {
179
+ 'confidence': NotRequired[str],
180
+ 'evidence': NotRequired[list[str]],
181
+ 'kind': NotRequired[str],
182
+ 'vendor': NotRequired[str],
183
+ }, total=False)
184
+
185
+ ModelAntibotSignals = TypedDict('ModelAntibotSignals', {
186
+ 'attempts_passed': NotRequired[int],
187
+ 'attempts_run': NotRequired[int],
188
+ 'attempts_skipped': NotRequired[int],
189
+ 'block_markers': NotRequired[list[str]],
190
+ 'blocked_status': NotRequired[bool],
191
+ 'captcha_detected': NotRequired[bool],
192
+ 'challenge_detected': NotRequired[bool],
193
+ 'js_render_likely': NotRequired[bool],
194
+ 'rate_limited': NotRequired[bool],
195
+ }, total=False)
196
+
197
+ ModelAntibotVerdict = TypedDict('ModelAntibotVerdict', {
198
+ 'coverage': NotRequired[str],
199
+ 'difficulty_band': NotRequired[ModelAntibotBand],
200
+ 'difficulty_score': NotRequired[int],
201
+ 'easiest_working_transport': NotRequired[str],
202
+ 'gated_layers': NotRequired[list[str]],
203
+ 'notes': NotRequired[list[str]],
204
+ 'protections': NotRequired[list[ModelAntibotProtection]],
205
+ 'recommended_approach': NotRequired[str],
206
+ 'recommended_profile': NotRequired[str],
207
+ 'scrapeable': NotRequired[bool],
208
+ 'signals': NotRequired[ModelAntibotSignals],
209
+ 'summary': NotRequired[str],
210
+ 'url': NotRequired[str],
211
+ }, total=False)
212
+
176
213
  ModelApiComponentStatus = TypedDict('ModelApiComponentStatus', {
177
214
  'error': NotRequired[str],
178
215
  'ready': NotRequired[bool],
@@ -2480,6 +2517,48 @@ ModelContactContact = TypedDict('ModelContactContact', {
2480
2517
  'url': NotRequired[str],
2481
2518
  }, total=False)
2482
2519
 
2520
+ ModelContactContactRequest = TypedDict('ModelContactContactRequest', {
2521
+ 'independents_only': NotRequired[bool],
2522
+ 'max_pages': NotRequired[int],
2523
+ 'url': Required[str],
2524
+ 'verify': NotRequired[bool],
2525
+ }, total=False)
2526
+
2527
+ ModelContactContactResult = TypedDict('ModelContactContactResult', {
2528
+ 'crawl_status': NotRequired[Literal['ok', 'blocked', 'unreachable']],
2529
+ 'crawled_pages': NotRequired[list[str]],
2530
+ 'domain': NotRequired[str],
2531
+ 'domain_type': NotRequired[Literal['independent', 'chain', 'social', 'builder', 'directory']],
2532
+ 'emails': NotRequired[list[ModelContactEmailContact]],
2533
+ 'phones': NotRequired[list[ModelContactPhoneContact]],
2534
+ 'socials': NotRequired[list[ModelContactSocialProfile]],
2535
+ 'website': NotRequired[str],
2536
+ }, total=False)
2537
+
2538
+ ModelContactEmailContact = TypedDict('ModelContactEmailContact', {
2539
+ 'address': NotRequired[str],
2540
+ 'source_page': NotRequired[str],
2541
+ 'status': NotRequired[Literal['verified', 'risky', 'unverified', 'invalid']],
2542
+ 'type': NotRequired[Literal['generic', 'role', 'personal']],
2543
+ }, total=False)
2544
+
2545
+ ModelContactPhoneContact = TypedDict('ModelContactPhoneContact', {
2546
+ 'number': NotRequired[str],
2547
+ 'source_page': NotRequired[str],
2548
+ }, total=False)
2549
+
2550
+ ModelContactSocialProfile = TypedDict('ModelContactSocialProfile', {
2551
+ 'handle': NotRequired[str],
2552
+ 'network': NotRequired[str],
2553
+ 'url': NotRequired[str],
2554
+ }, total=False)
2555
+
2556
+ ModelContactContactResponseDoc = TypedDict('ModelContactContactResponseDoc', {
2557
+ 'code': NotRequired[int],
2558
+ 'data': NotRequired[ModelContactContactResult],
2559
+ 'msg': NotRequired[str],
2560
+ }, total=False)
2561
+
2483
2562
  ModelDatasetsDatasetInfo = TypedDict('ModelDatasetsDatasetInfo', {
2484
2563
  'capabilities': NotRequired[list[str]],
2485
2564
  'description': NotRequired[str],
@@ -2530,6 +2609,17 @@ ModelDatasetsListResponseDoc = TypedDict('ModelDatasetsListResponseDoc', {
2530
2609
  'msg': NotRequired[str],
2531
2610
  }, total=False)
2532
2611
 
2612
+ ModelDiagnosticsAntibotCheckRequest = TypedDict('ModelDiagnosticsAntibotCheckRequest', {
2613
+ 'fast': NotRequired[bool],
2614
+ 'url': Required[str],
2615
+ }, total=False)
2616
+
2617
+ ModelDiagnosticsAntibotCheckResponseDoc = TypedDict('ModelDiagnosticsAntibotCheckResponseDoc', {
2618
+ 'code': NotRequired[int],
2619
+ 'data': NotRequired[ModelAntibotVerdict],
2620
+ 'msg': NotRequired[str],
2621
+ }, total=False)
2622
+
2533
2623
  ModelEbayItem = TypedDict('ModelEbayItem', {
2534
2624
  'availability': NotRequired[str],
2535
2625
  'condition': NotRequired[str],
@@ -7476,6 +7566,107 @@ ModelRedditUserPostsResponseDoc = TypedDict('ModelRedditUserPostsResponseDoc', {
7476
7566
  'msg': NotRequired[str],
7477
7567
  }, total=False)
7478
7568
 
7569
+ ModelRedfinEstimateResponse = TypedDict('ModelRedfinEstimateResponse', {
7570
+ 'address': NotRequired[str],
7571
+ 'baths': NotRequired[float],
7572
+ 'beds': NotRequired[float],
7573
+ 'city_time_series': NotRequired[list[float]],
7574
+ 'county_time_series': NotRequired[list[float]],
7575
+ 'estimate': NotRequired[float],
7576
+ 'estimate_text': NotRequired[str],
7577
+ 'latitude': NotRequired[float],
7578
+ 'listing_price': NotRequired[float],
7579
+ 'longitude': NotRequired[float],
7580
+ 'postal_code_time_series': NotRequired[list[float]],
7581
+ 'property_id': NotRequired[str],
7582
+ 'property_time_series': NotRequired[list[float]],
7583
+ 'sqft': NotRequired[float],
7584
+ 'updated_at': NotRequired[int],
7585
+ 'year_built': NotRequired[int],
7586
+ }, total=False)
7587
+
7588
+ ModelRedfinPropertyItem = TypedDict('ModelRedfinPropertyItem', {
7589
+ 'address': NotRequired[str],
7590
+ 'baths': NotRequired[float],
7591
+ 'beds': NotRequired[float],
7592
+ 'city': NotRequired[str],
7593
+ 'days_on_market': NotRequired[int],
7594
+ 'hoa_monthly': NotRequired[float],
7595
+ 'image': NotRequired[str],
7596
+ 'latitude': NotRequired[float],
7597
+ 'listing_id': NotRequired[str],
7598
+ 'longitude': NotRequired[float],
7599
+ 'lot_size': NotRequired[float],
7600
+ 'mls_number': NotRequired[str],
7601
+ 'price': NotRequired[float],
7602
+ 'price_per_sqft': NotRequired[float],
7603
+ 'property_id': NotRequired[str],
7604
+ 'property_type': NotRequired[str],
7605
+ 'sqft': NotRequired[float],
7606
+ 'state': NotRequired[str],
7607
+ 'status': NotRequired[str],
7608
+ 'url': NotRequired[str],
7609
+ 'year_built': NotRequired[int],
7610
+ 'zip': NotRequired[str],
7611
+ }, total=False)
7612
+
7613
+ ModelRedfinPropertyResponse = TypedDict('ModelRedfinPropertyResponse', {
7614
+ 'address': NotRequired[str],
7615
+ 'baths': NotRequired[float],
7616
+ 'beds': NotRequired[float],
7617
+ 'city': NotRequired[str],
7618
+ 'days_on_market': NotRequired[int],
7619
+ 'description': NotRequired[str],
7620
+ 'facts': NotRequired[list[str]],
7621
+ 'hoa_monthly': NotRequired[float],
7622
+ 'image': NotRequired[str],
7623
+ 'latitude': NotRequired[float],
7624
+ 'listing_id': NotRequired[str],
7625
+ 'longitude': NotRequired[float],
7626
+ 'lot_size': NotRequired[float],
7627
+ 'mls_number': NotRequired[str],
7628
+ 'price': NotRequired[float],
7629
+ 'price_per_sqft': NotRequired[float],
7630
+ 'property_id': NotRequired[str],
7631
+ 'property_type': NotRequired[str],
7632
+ 'sqft': NotRequired[float],
7633
+ 'state': NotRequired[str],
7634
+ 'status': NotRequired[str],
7635
+ 'url': NotRequired[str],
7636
+ 'year_built': NotRequired[int],
7637
+ 'zip': NotRequired[str],
7638
+ }, total=False)
7639
+
7640
+ ModelRedfinRegionTrendsResponse = TypedDict('ModelRedfinRegionTrendsResponse', {
7641
+ 'avg_days_on_market': NotRequired[str],
7642
+ 'avg_down_payment': NotRequired[str],
7643
+ 'avg_num_offers': NotRequired[str],
7644
+ 'median_list_per_sqft': NotRequired[str],
7645
+ 'median_list_price': NotRequired[str],
7646
+ 'median_sale_per_list': NotRequired[str],
7647
+ 'median_sale_per_sqft': NotRequired[str],
7648
+ 'median_sale_price': NotRequired[str],
7649
+ 'num_homes_on_market': NotRequired[str],
7650
+ 'num_homes_sold': NotRequired[str],
7651
+ 'region_id': NotRequired[int],
7652
+ 'region_type': NotRequired[int],
7653
+ 'yoy_sale_per_sqft': NotRequired[str],
7654
+ 'yoy_sale_price': NotRequired[str],
7655
+ }, total=False)
7656
+
7657
+ ModelRedfinSearchResponse = TypedDict('ModelRedfinSearchResponse', {
7658
+ 'location': NotRequired[str],
7659
+ 'page': NotRequired[int],
7660
+ 'region_id': NotRequired[int],
7661
+ 'region_type': NotRequired[int],
7662
+ 'results': NotRequired[list[ModelRedfinPropertyItem]],
7663
+ }, total=False)
7664
+
7665
+ ModelRedfinSimilarResponse = TypedDict('ModelRedfinSimilarResponse', {
7666
+ 'property_id': NotRequired[str],
7667
+ 'results': NotRequired[list[ModelRedfinPropertyItem]],
7668
+ }, total=False)
7669
+
7479
7670
  ModelReferralsReferralAttributionDoc = TypedDict('ModelReferralsReferralAttributionDoc', {
7480
7671
  'campaign': NotRequired[str],
7481
7672
  'code': NotRequired[str],
@@ -8816,6 +9007,7 @@ ModelSpotifyCountryHubContentMeta = TypedDict('ModelSpotifyCountryHubContentMeta
8816
9007
  'fetchedAt': NotRequired[str],
8817
9008
  'itemCount': NotRequired[int],
8818
9009
  'operationName': NotRequired[str],
9010
+ 'partialErrors': NotRequired[int],
8819
9011
  }, total=False)
8820
9012
 
8821
9013
  ModelSpotifyCountryHubContentResponse = TypedDict('ModelSpotifyCountryHubContentResponse', {
@@ -8850,6 +9042,7 @@ ModelSpotifyCountryHubMeta = TypedDict('ModelSpotifyCountryHubMeta', {
8850
9042
  'fetchedAt': NotRequired[str],
8851
9043
  'itemCount': NotRequired[int],
8852
9044
  'operationName': NotRequired[str],
9045
+ 'partialErrors': NotRequired[int],
8853
9046
  'sectionCount': NotRequired[int],
8854
9047
  }, total=False)
8855
9048
 
@@ -10697,6 +10890,65 @@ ModelUserUserRotateApikeyResponseDoc = TypedDict('ModelUserUserRotateApikeyRespo
10697
10890
  'msg': NotRequired[str],
10698
10891
  }, total=False)
10699
10892
 
10893
+ ModelWebScrapeInfo = TypedDict('ModelWebScrapeInfo', {
10894
+ 'backend': NotRequired[str],
10895
+ 'cache_state': NotRequired[str],
10896
+ 'cached_at': NotRequired[str],
10897
+ 'escalated': NotRequired[bool],
10898
+ 'method': NotRequired[str],
10899
+ }, total=False)
10900
+
10901
+ ModelWebScrapeLink = TypedDict('ModelWebScrapeLink', {
10902
+ 'href': NotRequired[str],
10903
+ 'rel': NotRequired[str],
10904
+ 'text': NotRequired[str],
10905
+ }, total=False)
10906
+
10907
+ ModelWebScrapeMetadata = TypedDict('ModelWebScrapeMetadata', {
10908
+ 'author': NotRequired[str],
10909
+ 'canonical_url': NotRequired[str],
10910
+ 'content_type': NotRequired[str],
10911
+ 'description': NotRequired[str],
10912
+ 'final_url': NotRequired[str],
10913
+ 'image': NotRequired[str],
10914
+ 'language': NotRequired[str],
10915
+ 'modified_at': NotRequired[str],
10916
+ 'published_at': NotRequired[str],
10917
+ 'section': NotRequired[str],
10918
+ 'site_name': NotRequired[str],
10919
+ 'source_url': NotRequired[str],
10920
+ 'status_code': NotRequired[int],
10921
+ 'title': NotRequired[str],
10922
+ }, total=False)
10923
+
10924
+ ModelWebScrapeOption = TypedDict('ModelWebScrapeOption', {
10925
+ 'backend': NotRequired[str],
10926
+ 'formats': NotRequired[list[str]],
10927
+ 'max_age': NotRequired[int],
10928
+ 'only_main_content': NotRequired[bool],
10929
+ 'proxy': NotRequired[str],
10930
+ 'render': NotRequired[Literal['auto', 'http', 'browser', 'unblocker']],
10931
+ 'store_in_cache': NotRequired[bool],
10932
+ 'url': Required[str],
10933
+ 'wait_for': NotRequired[int],
10934
+ }, total=False)
10935
+
10936
+ ModelWebScrapeResult = TypedDict('ModelWebScrapeResult', {
10937
+ 'html': NotRequired[str],
10938
+ 'link_details': NotRequired[list[ModelWebScrapeLink]],
10939
+ 'links': NotRequired[list[str]],
10940
+ 'markdown': NotRequired[str],
10941
+ 'metadata': NotRequired[ModelWebScrapeMetadata],
10942
+ 'raw_html': NotRequired[str],
10943
+ 'scrape': NotRequired[ModelWebScrapeInfo],
10944
+ }, total=False)
10945
+
10946
+ ModelWebScrapeResponseDoc = TypedDict('ModelWebScrapeResponseDoc', {
10947
+ 'code': NotRequired[int],
10948
+ 'data': NotRequired[ModelWebScrapeResult],
10949
+ 'msg': NotRequired[str],
10950
+ }, total=False)
10951
+
10700
10952
  ModelYahoofinanceActionEvents = TypedDict('ModelYahoofinanceActionEvents', {
10701
10953
  'capital_gains': NotRequired[list[dict[str, Any]]],
10702
10954
  'dividends': NotRequired[list[dict[str, Any]]],
@@ -12448,6 +12700,15 @@ CoinGeckoTrendingParams = TypedDict('CoinGeckoTrendingParams', {
12448
12700
  'vs_currency': NotRequired[Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']],
12449
12701
  }, total=False)
12450
12702
 
12703
+ WebContactBody = ModelContactContactRequest
12704
+ WebContactResponse = ModelContactContactResponseDoc
12705
+ WebContactParams = TypedDict('WebContactParams', {
12706
+ '_response_type': NotRequired[ResponseType],
12707
+ '_timeout': NotRequired[float],
12708
+ '_headers': NotRequired[Mapping[str, str]],
12709
+ 'option': Required[WebContactBody],
12710
+ }, total=False)
12711
+
12451
12712
  DatasetsListResponse = ModelDatasetsListResponseDoc
12452
12713
  DatasetsListParams = TypedDict('DatasetsListParams', {
12453
12714
  '_response_type': NotRequired[ResponseType],
@@ -12525,6 +12786,15 @@ DatasetsGoogleMapBusinessesSearchParams = TypedDict('DatasetsGoogleMapBusinesses
12525
12786
  'page_size': NotRequired[int],
12526
12787
  }, total=False)
12527
12788
 
12789
+ WebAntibotCheckBody = ModelDiagnosticsAntibotCheckRequest
12790
+ WebAntibotCheckResponse = ModelDiagnosticsAntibotCheckResponseDoc
12791
+ WebAntibotCheckParams = TypedDict('WebAntibotCheckParams', {
12792
+ '_response_type': NotRequired[ResponseType],
12793
+ '_timeout': NotRequired[float],
12794
+ '_headers': NotRequired[Mapping[str, str]],
12795
+ 'request': Required[WebAntibotCheckBody],
12796
+ }, total=False)
12797
+
12528
12798
  EBayEbayItemResponse = ModelEbayItemResponseDoc
12529
12799
  EBayEbayItemParams = TypedDict('EBayEbayItemParams', {
12530
12800
  '_response_type': NotRequired[ResponseType],
@@ -14706,6 +14976,57 @@ RedditUserPostsParams = TypedDict('RedditUserPostsParams', {
14706
14976
  'after': NotRequired[str],
14707
14977
  }, total=False)
14708
14978
 
14979
+ RedfinEstimateResponse = ModelRedfinEstimateResponse
14980
+ RedfinEstimateParams = TypedDict('RedfinEstimateParams', {
14981
+ '_response_type': NotRequired[ResponseType],
14982
+ '_timeout': NotRequired[float],
14983
+ '_headers': NotRequired[Mapping[str, str]],
14984
+ 'property_id': Required[str],
14985
+ }, total=False)
14986
+
14987
+ RedfinPropertyResponse = ModelRedfinPropertyResponse
14988
+ RedfinPropertyParams = TypedDict('RedfinPropertyParams', {
14989
+ '_response_type': NotRequired[ResponseType],
14990
+ '_timeout': NotRequired[float],
14991
+ '_headers': NotRequired[Mapping[str, str]],
14992
+ 'url': NotRequired[str],
14993
+ 'property_id': NotRequired[str],
14994
+ 'listing_id': NotRequired[str],
14995
+ }, total=False)
14996
+
14997
+ RedfinRegionTrendsResponse = ModelRedfinRegionTrendsResponse
14998
+ RedfinRegionTrendsParams = TypedDict('RedfinRegionTrendsParams', {
14999
+ '_response_type': NotRequired[ResponseType],
15000
+ '_timeout': NotRequired[float],
15001
+ '_headers': NotRequired[Mapping[str, str]],
15002
+ 'region_id': Required[int],
15003
+ 'region_type': NotRequired[int],
15004
+ }, total=False)
15005
+
15006
+ RedfinSearchResponse = ModelRedfinSearchResponse
15007
+ RedfinSearchParams = TypedDict('RedfinSearchParams', {
15008
+ '_response_type': NotRequired[ResponseType],
15009
+ '_timeout': NotRequired[float],
15010
+ '_headers': NotRequired[Mapping[str, str]],
15011
+ 'location': NotRequired[str],
15012
+ 'page': NotRequired[int],
15013
+ 'region_id': NotRequired[int],
15014
+ 'region_type': NotRequired[int],
15015
+ 'status': NotRequired[str],
15016
+ 'min_price': NotRequired[int],
15017
+ 'max_price': NotRequired[int],
15018
+ 'min_beds': NotRequired[int],
15019
+ 'min_baths': NotRequired[float],
15020
+ }, total=False)
15021
+
15022
+ RedfinSimilarResponse = ModelRedfinSimilarResponse
15023
+ RedfinSimilarParams = TypedDict('RedfinSimilarParams', {
15024
+ '_response_type': NotRequired[ResponseType],
15025
+ '_timeout': NotRequired[float],
15026
+ '_headers': NotRequired[Mapping[str, str]],
15027
+ 'property_id': Required[str],
15028
+ }, total=False)
15029
+
14709
15030
  ReferralsClickBody = ModelReferralsReferralClickRequestDoc
14710
15031
  ReferralsClickResponse = ModelReferralsReferralClickResponseDoc
14711
15032
  ReferralsClickParams = TypedDict('ReferralsClickParams', {
@@ -15989,6 +16310,15 @@ UserMeApiKeysRevealParams = TypedDict('UserMeApiKeysRevealParams', {
15989
16310
  'id': Required[str],
15990
16311
  }, total=False)
15991
16312
 
16313
+ WebScrapeBody = ModelWebScrapeOption
16314
+ WebScrapeResponse = ModelWebScrapeResponseDoc
16315
+ WebScrapeParams = TypedDict('WebScrapeParams', {
16316
+ '_response_type': NotRequired[ResponseType],
16317
+ '_timeout': NotRequired[float],
16318
+ '_headers': NotRequired[Mapping[str, str]],
16319
+ 'scrapeOption': Required[WebScrapeBody],
16320
+ }, total=False)
16321
+
15992
16322
  YahooFinanceCalendarsResponse = ModelYahoofinanceCalendarsResponseDoc
15993
16323
  YahooFinanceCalendarsParams = TypedDict('YahooFinanceCalendarsParams', {
15994
16324
  '_response_type': NotRequired[ResponseType],
@@ -16599,6 +16929,11 @@ class CoinGeckoGroup:
16599
16929
  def treasuries(self, **params: Unpack[CoinGeckoTreasuriesParams]) -> CoinGeckoTreasuriesResponse: ...
16600
16930
  def trending(self, **params: Unpack[CoinGeckoTrendingParams]) -> CoinGeckoTrendingResponse: ...
16601
16931
 
16932
+ class WebGroup:
16933
+ def contact(self, **params: Unpack[WebContactParams]) -> WebContactResponse: ...
16934
+ def antibot_check(self, **params: Unpack[WebAntibotCheckParams]) -> WebAntibotCheckResponse: ...
16935
+ def scrape(self, **params: Unpack[WebScrapeParams]) -> WebScrapeResponse: ...
16936
+
16602
16937
  class DatasetsGroup:
16603
16938
  def list(self, **params: Unpack[DatasetsListParams]) -> DatasetsListResponse: ...
16604
16939
  def google_map_businesses_facets(self, **params: Unpack[DatasetsGoogleMapBusinessesFacetsParams]) -> DatasetsGoogleMapBusinessesFacetsResponse: ...
@@ -16858,6 +17193,13 @@ class RedditGroup:
16858
17193
  def user_comments(self, **params: Unpack[RedditUserCommentsParams]) -> RedditUserCommentsResponse: ...
16859
17194
  def user_posts(self, **params: Unpack[RedditUserPostsParams]) -> RedditUserPostsResponse: ...
16860
17195
 
17196
+ class RedfinGroup:
17197
+ def estimate(self, **params: Unpack[RedfinEstimateParams]) -> RedfinEstimateResponse: ...
17198
+ def property(self, **params: Unpack[RedfinPropertyParams]) -> RedfinPropertyResponse: ...
17199
+ def region_trends(self, **params: Unpack[RedfinRegionTrendsParams]) -> RedfinRegionTrendsResponse: ...
17200
+ def search(self, **params: Unpack[RedfinSearchParams]) -> RedfinSearchResponse: ...
17201
+ def similar(self, **params: Unpack[RedfinSimilarParams]) -> RedfinSimilarResponse: ...
17202
+
16861
17203
  class ReferralsGroup:
16862
17204
  def click(self, **params: Unpack[ReferralsClickParams]) -> ReferralsClickResponse: ...
16863
17205
  def me(self, **params: Unpack[ReferralsMeParams]) -> ReferralsMeResponse: ...
@@ -17151,11 +17493,13 @@ OperationId = Literal[
17151
17493
  'coingecko-token-unlocks',
17152
17494
  'coingecko-treasuries',
17153
17495
  'coingecko-trending',
17496
+ 'contact',
17154
17497
  'datasets-list',
17155
17498
  'datasets-google-map-businesses-facets',
17156
17499
  'datasets-google-map-businesses-item',
17157
17500
  'datasets-google-map-businesses-nearby',
17158
17501
  'datasets-google-map-businesses-search',
17502
+ 'antibot-check',
17159
17503
  'ebay-item',
17160
17504
  'ebay-search',
17161
17505
  'ebay-seller',
@@ -17380,6 +17724,11 @@ OperationId = Literal[
17380
17724
  'reddit-trends',
17381
17725
  'reddit-user-comments',
17382
17726
  'reddit-user-posts',
17727
+ 'redfin-estimate',
17728
+ 'redfin-property',
17729
+ 'redfin-region-trends',
17730
+ 'redfin-search',
17731
+ 'redfin-similar',
17383
17732
  'referrals-click',
17384
17733
  'referrals-me',
17385
17734
  'referrals-me-events',
@@ -17504,6 +17853,7 @@ OperationId = Literal[
17504
17853
  'user-me-api-keys',
17505
17854
  'user-me-api-keys-rotate',
17506
17855
  'user-me-api-keys-reveal',
17856
+ 'web-scrape',
17507
17857
  'yahoo-finance-calendars',
17508
17858
  'yahoo-finance-calendar',
17509
17859
  'yahoo-finance-download',
@@ -17572,6 +17922,7 @@ class CrawloraClient:
17572
17922
  brand: BrandGroup
17573
17923
  brave: BraveGroup
17574
17924
  coin_gecko: CoinGeckoGroup
17925
+ web: WebGroup
17575
17926
  datasets: DatasetsGroup
17576
17927
  e_bay: EBayGroup
17577
17928
  geocoding: GeocodingGroup
@@ -17587,6 +17938,7 @@ class CrawloraClient:
17587
17938
  polymarket: PolymarketGroup
17588
17939
  product_hunt: ProductHuntGroup
17589
17940
  reddit: RedditGroup
17941
+ redfin: RedfinGroup
17590
17942
  referrals: ReferralsGroup
17591
17943
  rotten_tomatoes: RottenTomatoesGroup
17592
17944
  shop_app: ShopAppGroup
@@ -18679,6 +19031,18 @@ class CrawloraClient:
18679
19031
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
18680
19032
  ) -> CoinGeckoTrendingResponse: ...
18681
19033
  @overload
19034
+ def operation(
19035
+ self,
19036
+ operation_id: Literal['contact'],
19037
+ params: WebContactParams,
19038
+ *,
19039
+ response_type: ResponseType = ...,
19040
+ timeout: float | None = ...,
19041
+ headers: Mapping[str, str] | None = ...,
19042
+ retries: int | None = ...,
19043
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
19044
+ ) -> WebContactResponse: ...
19045
+ @overload
18682
19046
  def operation(
18683
19047
  self,
18684
19048
  operation_id: Literal['datasets-list'],
@@ -18739,6 +19103,18 @@ class CrawloraClient:
18739
19103
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
18740
19104
  ) -> DatasetsGoogleMapBusinessesSearchResponse: ...
18741
19105
  @overload
19106
+ def operation(
19107
+ self,
19108
+ operation_id: Literal['antibot-check'],
19109
+ params: WebAntibotCheckParams,
19110
+ *,
19111
+ response_type: ResponseType = ...,
19112
+ timeout: float | None = ...,
19113
+ headers: Mapping[str, str] | None = ...,
19114
+ retries: int | None = ...,
19115
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
19116
+ ) -> WebAntibotCheckResponse: ...
19117
+ @overload
18742
19118
  def operation(
18743
19119
  self,
18744
19120
  operation_id: Literal['ebay-item'],
@@ -21427,6 +21803,66 @@ class CrawloraClient:
21427
21803
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21428
21804
  ) -> RedditUserPostsResponse: ...
21429
21805
  @overload
21806
+ def operation(
21807
+ self,
21808
+ operation_id: Literal['redfin-estimate'],
21809
+ params: RedfinEstimateParams,
21810
+ *,
21811
+ response_type: ResponseType = ...,
21812
+ timeout: float | None = ...,
21813
+ headers: Mapping[str, str] | None = ...,
21814
+ retries: int | None = ...,
21815
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21816
+ ) -> RedfinEstimateResponse: ...
21817
+ @overload
21818
+ def operation(
21819
+ self,
21820
+ operation_id: Literal['redfin-property'],
21821
+ params: RedfinPropertyParams = ...,
21822
+ *,
21823
+ response_type: ResponseType = ...,
21824
+ timeout: float | None = ...,
21825
+ headers: Mapping[str, str] | None = ...,
21826
+ retries: int | None = ...,
21827
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21828
+ ) -> RedfinPropertyResponse: ...
21829
+ @overload
21830
+ def operation(
21831
+ self,
21832
+ operation_id: Literal['redfin-region-trends'],
21833
+ params: RedfinRegionTrendsParams,
21834
+ *,
21835
+ response_type: ResponseType = ...,
21836
+ timeout: float | None = ...,
21837
+ headers: Mapping[str, str] | None = ...,
21838
+ retries: int | None = ...,
21839
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21840
+ ) -> RedfinRegionTrendsResponse: ...
21841
+ @overload
21842
+ def operation(
21843
+ self,
21844
+ operation_id: Literal['redfin-search'],
21845
+ params: RedfinSearchParams = ...,
21846
+ *,
21847
+ response_type: ResponseType = ...,
21848
+ timeout: float | None = ...,
21849
+ headers: Mapping[str, str] | None = ...,
21850
+ retries: int | None = ...,
21851
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21852
+ ) -> RedfinSearchResponse: ...
21853
+ @overload
21854
+ def operation(
21855
+ self,
21856
+ operation_id: Literal['redfin-similar'],
21857
+ params: RedfinSimilarParams,
21858
+ *,
21859
+ response_type: ResponseType = ...,
21860
+ timeout: float | None = ...,
21861
+ headers: Mapping[str, str] | None = ...,
21862
+ retries: int | None = ...,
21863
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21864
+ ) -> RedfinSimilarResponse: ...
21865
+ @overload
21430
21866
  def operation(
21431
21867
  self,
21432
21868
  operation_id: Literal['referrals-click'],
@@ -22915,6 +23351,18 @@ class CrawloraClient:
22915
23351
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
22916
23352
  ) -> UserMeApiKeysRevealResponse: ...
22917
23353
  @overload
23354
+ def operation(
23355
+ self,
23356
+ operation_id: Literal['web-scrape'],
23357
+ params: WebScrapeParams,
23358
+ *,
23359
+ response_type: ResponseType = ...,
23360
+ timeout: float | None = ...,
23361
+ headers: Mapping[str, str] | None = ...,
23362
+ retries: int | None = ...,
23363
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
23364
+ ) -> WebScrapeResponse: ...
23365
+ @overload
22918
23366
  def operation(
22919
23367
  self,
22920
23368
  operation_id: Literal['yahoo-finance-calendars'],
@@ -24583,6 +25031,18 @@ class CrawloraClient:
24583
25031
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
24584
25032
  ) -> CoinGeckoTrendingResponse: ...
24585
25033
  @overload
25034
+ def request(
25035
+ self,
25036
+ operation_id: Literal['contact'],
25037
+ params: WebContactParams,
25038
+ *,
25039
+ response_type: ResponseType = ...,
25040
+ timeout: float | None = ...,
25041
+ headers: Mapping[str, str] | None = ...,
25042
+ retries: int | None = ...,
25043
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
25044
+ ) -> WebContactResponse: ...
25045
+ @overload
24586
25046
  def request(
24587
25047
  self,
24588
25048
  operation_id: Literal['datasets-list'],
@@ -24643,6 +25103,18 @@ class CrawloraClient:
24643
25103
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
24644
25104
  ) -> DatasetsGoogleMapBusinessesSearchResponse: ...
24645
25105
  @overload
25106
+ def request(
25107
+ self,
25108
+ operation_id: Literal['antibot-check'],
25109
+ params: WebAntibotCheckParams,
25110
+ *,
25111
+ response_type: ResponseType = ...,
25112
+ timeout: float | None = ...,
25113
+ headers: Mapping[str, str] | None = ...,
25114
+ retries: int | None = ...,
25115
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
25116
+ ) -> WebAntibotCheckResponse: ...
25117
+ @overload
24646
25118
  def request(
24647
25119
  self,
24648
25120
  operation_id: Literal['ebay-item'],
@@ -27331,6 +27803,66 @@ class CrawloraClient:
27331
27803
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27332
27804
  ) -> RedditUserPostsResponse: ...
27333
27805
  @overload
27806
+ def request(
27807
+ self,
27808
+ operation_id: Literal['redfin-estimate'],
27809
+ params: RedfinEstimateParams,
27810
+ *,
27811
+ response_type: ResponseType = ...,
27812
+ timeout: float | None = ...,
27813
+ headers: Mapping[str, str] | None = ...,
27814
+ retries: int | None = ...,
27815
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27816
+ ) -> RedfinEstimateResponse: ...
27817
+ @overload
27818
+ def request(
27819
+ self,
27820
+ operation_id: Literal['redfin-property'],
27821
+ params: RedfinPropertyParams = ...,
27822
+ *,
27823
+ response_type: ResponseType = ...,
27824
+ timeout: float | None = ...,
27825
+ headers: Mapping[str, str] | None = ...,
27826
+ retries: int | None = ...,
27827
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27828
+ ) -> RedfinPropertyResponse: ...
27829
+ @overload
27830
+ def request(
27831
+ self,
27832
+ operation_id: Literal['redfin-region-trends'],
27833
+ params: RedfinRegionTrendsParams,
27834
+ *,
27835
+ response_type: ResponseType = ...,
27836
+ timeout: float | None = ...,
27837
+ headers: Mapping[str, str] | None = ...,
27838
+ retries: int | None = ...,
27839
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27840
+ ) -> RedfinRegionTrendsResponse: ...
27841
+ @overload
27842
+ def request(
27843
+ self,
27844
+ operation_id: Literal['redfin-search'],
27845
+ params: RedfinSearchParams = ...,
27846
+ *,
27847
+ response_type: ResponseType = ...,
27848
+ timeout: float | None = ...,
27849
+ headers: Mapping[str, str] | None = ...,
27850
+ retries: int | None = ...,
27851
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27852
+ ) -> RedfinSearchResponse: ...
27853
+ @overload
27854
+ def request(
27855
+ self,
27856
+ operation_id: Literal['redfin-similar'],
27857
+ params: RedfinSimilarParams,
27858
+ *,
27859
+ response_type: ResponseType = ...,
27860
+ timeout: float | None = ...,
27861
+ headers: Mapping[str, str] | None = ...,
27862
+ retries: int | None = ...,
27863
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27864
+ ) -> RedfinSimilarResponse: ...
27865
+ @overload
27334
27866
  def request(
27335
27867
  self,
27336
27868
  operation_id: Literal['referrals-click'],
@@ -28819,6 +29351,18 @@ class CrawloraClient:
28819
29351
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
28820
29352
  ) -> UserMeApiKeysRevealResponse: ...
28821
29353
  @overload
29354
+ def request(
29355
+ self,
29356
+ operation_id: Literal['web-scrape'],
29357
+ params: WebScrapeParams,
29358
+ *,
29359
+ response_type: ResponseType = ...,
29360
+ timeout: float | None = ...,
29361
+ headers: Mapping[str, str] | None = ...,
29362
+ retries: int | None = ...,
29363
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
29364
+ ) -> WebScrapeResponse: ...
29365
+ @overload
28822
29366
  def request(
28823
29367
  self,
28824
29368
  operation_id: Literal['yahoo-finance-calendars'],
@@ -92,6 +92,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
92
92
  'produces': ['application/json'],
93
93
  'queryParams': [],
94
94
  'security': ['ApiKeyAuth']},
95
+ 'antibot-check': {'bodyParam': 'request',
96
+ 'bodyRequired': True,
97
+ 'consumes': ['application/json'],
98
+ 'formParams': [],
99
+ 'id': 'antibot-check',
100
+ 'method': 'POST',
101
+ 'path': '/diagnostics/antibot-check',
102
+ 'pathParams': [],
103
+ 'produces': ['application/json'],
104
+ 'queryParams': [],
105
+ 'security': ['ApiKeyAuth']},
95
106
  'apple-podcasts-charts': {'bodyParam': None,
96
107
  'bodyRequired': False,
97
108
  'consumes': ['application/json'],
@@ -2413,6 +2424,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
2413
2424
  'name': 'vs_currency',
2414
2425
  'type': 'string'}],
2415
2426
  'security': ['ApiKeyAuth']},
2427
+ 'contact': {'bodyParam': 'option',
2428
+ 'bodyRequired': True,
2429
+ 'consumes': ['application/json'],
2430
+ 'formParams': [],
2431
+ 'id': 'contact',
2432
+ 'method': 'POST',
2433
+ 'path': '/contact',
2434
+ 'pathParams': [],
2435
+ 'produces': ['application/json'],
2436
+ 'queryParams': [],
2437
+ 'security': ['ApiKeyAuth']},
2416
2438
  'datasets-google-map-businesses-facets': {'bodyParam': None,
2417
2439
  'bodyRequired': False,
2418
2440
  'consumes': ['application/json'],
@@ -5938,6 +5960,73 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
5938
5960
  'queryParams': [{'in': 'query', 'name': 'limit', 'type': 'integer'},
5939
5961
  {'in': 'query', 'name': 'after', 'type': 'string'}],
5940
5962
  'security': ['ApiKeyAuth']},
5963
+ 'redfin-estimate': {'bodyParam': None,
5964
+ 'bodyRequired': False,
5965
+ 'consumes': ['application/json'],
5966
+ 'formParams': [],
5967
+ 'id': 'redfin-estimate',
5968
+ 'method': 'GET',
5969
+ 'path': '/redfin/estimate',
5970
+ 'pathParams': [],
5971
+ 'produces': ['application/json'],
5972
+ 'queryParams': [{'in': 'query', 'name': 'property_id', 'required': True, 'type': 'string'}],
5973
+ 'security': ['ApiKeyAuth']},
5974
+ 'redfin-property': {'bodyParam': None,
5975
+ 'bodyRequired': False,
5976
+ 'consumes': ['application/json'],
5977
+ 'formParams': [],
5978
+ 'id': 'redfin-property',
5979
+ 'method': 'GET',
5980
+ 'path': '/redfin/property',
5981
+ 'pathParams': [],
5982
+ 'produces': ['application/json'],
5983
+ 'queryParams': [{'in': 'query', 'name': 'url', 'type': 'string'},
5984
+ {'in': 'query', 'name': 'property_id', 'type': 'string'},
5985
+ {'in': 'query', 'name': 'listing_id', 'type': 'string'}],
5986
+ 'security': ['ApiKeyAuth']},
5987
+ 'redfin-region-trends': {'bodyParam': None,
5988
+ 'bodyRequired': False,
5989
+ 'consumes': ['application/json'],
5990
+ 'formParams': [],
5991
+ 'id': 'redfin-region-trends',
5992
+ 'method': 'GET',
5993
+ 'path': '/redfin/region-trends',
5994
+ 'pathParams': [],
5995
+ 'produces': ['application/json'],
5996
+ 'queryParams': [{'in': 'query', 'name': 'region_id', 'required': True, 'type': 'integer'},
5997
+ {'in': 'query', 'name': 'region_type', 'type': 'integer'}],
5998
+ 'security': ['ApiKeyAuth']},
5999
+ 'redfin-search': {'bodyParam': None,
6000
+ 'bodyRequired': False,
6001
+ 'consumes': ['application/json'],
6002
+ 'formParams': [],
6003
+ 'id': 'redfin-search',
6004
+ 'method': 'GET',
6005
+ 'paginatable': True,
6006
+ 'path': '/redfin/search',
6007
+ 'pathParams': [],
6008
+ 'produces': ['application/json'],
6009
+ 'queryParams': [{'in': 'query', 'name': 'location', 'type': 'string'},
6010
+ {'in': 'query', 'name': 'page', 'type': 'integer'},
6011
+ {'in': 'query', 'name': 'region_id', 'type': 'integer'},
6012
+ {'in': 'query', 'name': 'region_type', 'type': 'integer'},
6013
+ {'in': 'query', 'name': 'status', 'type': 'string'},
6014
+ {'in': 'query', 'name': 'min_price', 'type': 'integer'},
6015
+ {'in': 'query', 'name': 'max_price', 'type': 'integer'},
6016
+ {'in': 'query', 'name': 'min_beds', 'type': 'integer'},
6017
+ {'in': 'query', 'name': 'min_baths', 'type': 'number'}],
6018
+ 'security': ['ApiKeyAuth']},
6019
+ 'redfin-similar': {'bodyParam': None,
6020
+ 'bodyRequired': False,
6021
+ 'consumes': ['application/json'],
6022
+ 'formParams': [],
6023
+ 'id': 'redfin-similar',
6024
+ 'method': 'GET',
6025
+ 'path': '/redfin/similar',
6026
+ 'pathParams': [],
6027
+ 'produces': ['application/json'],
6028
+ 'queryParams': [{'in': 'query', 'name': 'property_id', 'required': True, 'type': 'string'}],
6029
+ 'security': ['ApiKeyAuth']},
5941
6030
  'referrals-click': {'bodyParam': 'request',
5942
6031
  'bodyRequired': True,
5943
6032
  'consumes': ['application/json'],
@@ -7763,6 +7852,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
7763
7852
  'produces': ['application/json'],
7764
7853
  'queryParams': [],
7765
7854
  'security': ['JWTAuth']},
7855
+ 'web-scrape': {'bodyParam': 'scrapeOption',
7856
+ 'bodyRequired': True,
7857
+ 'consumes': ['application/json'],
7858
+ 'formParams': [],
7859
+ 'id': 'web-scrape',
7860
+ 'method': 'POST',
7861
+ 'path': '/web/scrape',
7862
+ 'pathParams': [],
7863
+ 'produces': ['application/json'],
7864
+ 'queryParams': [],
7865
+ 'security': ['ApiKeyAuth']},
7766
7866
  'yahoo-finance-calendar': {'bodyParam': None,
7767
7867
  'bodyRequired': False,
7768
7868
  'consumes': ['application/json'],
@@ -8762,6 +8862,11 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8762
8862
  'trends': 'reddit-trends',
8763
8863
  'user_comments': 'reddit-user-comments',
8764
8864
  'user_posts': 'reddit-user-posts'},
8865
+ 'redfin': {'estimate': 'redfin-estimate',
8866
+ 'property': 'redfin-property',
8867
+ 'region_trends': 'redfin-region-trends',
8868
+ 'search': 'redfin-search',
8869
+ 'similar': 'redfin-similar'},
8765
8870
  'referrals': {'click': 'referrals-click', 'me': 'referrals-me', 'me_events': 'referrals-me-events'},
8766
8871
  'rotten_tomatoes': {'rottentomatoes_browse_movies': 'rottentomatoes-browse-movies',
8767
8872
  'rottentomatoes_browse_tv': 'rottentomatoes-browse-tv',
@@ -8883,6 +8988,7 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8883
8988
  'me_api_keys': 'user-me-api-keys',
8884
8989
  'me_api_keys_reveal': 'user-me-api-keys-reveal',
8885
8990
  'me_api_keys_rotate': 'user-me-api-keys-rotate'},
8991
+ 'web': {'antibot_check': 'antibot-check', 'contact': 'contact', 'scrape': 'web-scrape'},
8886
8992
  'yahoo_finance': {'calendar': 'yahoo-finance-calendar',
8887
8993
  'calendars': 'yahoo-finance-calendars',
8888
8994
  'download': 'yahoo-finance-download',
@@ -8937,7 +9043,7 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8937
9043
  'video': 'youtube-video'},
8938
9044
  'zillow': {'autocomplete': 'zillow-autocomplete', 'property': 'zillow-property', 'search': 'zillow-search'}}
8939
9045
 
8940
- OPERATION_COUNT = 491
9046
+ OPERATION_COUNT = 499
8941
9047
 
8942
9048
  class OperationId:
8943
9049
  AIRBNB_ROOM = 'airbnb-room'
@@ -9252,6 +9358,11 @@ class OperationId:
9252
9358
  REDDIT_TRENDS = 'reddit-trends'
9253
9359
  REDDIT_USER_COMMENTS = 'reddit-user-comments'
9254
9360
  REDDIT_USER_POSTS = 'reddit-user-posts'
9361
+ REDFIN_ESTIMATE = 'redfin-estimate'
9362
+ REDFIN_PROPERTY = 'redfin-property'
9363
+ REDFIN_REGION_TRENDS = 'redfin-region-trends'
9364
+ REDFIN_SEARCH = 'redfin-search'
9365
+ REDFIN_SIMILAR = 'redfin-similar'
9255
9366
  REFERRALS_CLICK = 'referrals-click'
9256
9367
  REFERRALS_ME = 'referrals-me'
9257
9368
  REFERRALS_ME_EVENTS = 'referrals-me-events'
@@ -9376,6 +9487,9 @@ class OperationId:
9376
9487
  USER_ME_API_KEYS = 'user-me-api-keys'
9377
9488
  USER_ME_API_KEYS_REVEAL = 'user-me-api-keys-reveal'
9378
9489
  USER_ME_API_KEYS_ROTATE = 'user-me-api-keys-rotate'
9490
+ WEB_ANTIBOT_CHECK = 'antibot-check'
9491
+ WEB_CONTACT = 'contact'
9492
+ WEB_SCRAPE = 'web-scrape'
9379
9493
  YAHOO_FINANCE_CALENDAR = 'yahoo-finance-calendar'
9380
9494
  YAHOO_FINANCE_CALENDARS = 'yahoo-finance-calendars'
9381
9495
  YAHOO_FINANCE_DOWNLOAD = 'yahoo-finance-download'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crawlora
3
- Version: 1.7.0.dev1
3
+ Version: 1.8.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
@@ -27,7 +27,7 @@ Dynamic: license-file
27
27
  # Crawlora Python SDK
28
28
 
29
29
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
30
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
30
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
31
31
  with generated type stubs for editor and type-checker support.
32
32
 
33
33
  - Runtime: Python 3.10+
@@ -38,7 +38,7 @@ with generated type stubs for editor and type-checker support.
38
38
  ## Install
39
39
 
40
40
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
41
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
41
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
42
42
 
43
43
  ```sh
44
44
  pip install --pre crawlora
@@ -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: `491`
5
+ Total operations: `499`
6
6
 
7
7
  | Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
8
8
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -89,6 +89,9 @@ Total operations: `491`
89
89
  | coin_gecko | `coin_gecko.token_unlocks` | `coingecko-token-unlocks` | `GET /coingecko/token-unlocks` | `limit` (query int) | `ApiKeyAuth` | `CoinGeckoTokenUnlocksResponse` | |
90
90
  | coin_gecko | `coin_gecko.treasuries` | `coingecko-treasuries` | `GET /coingecko/treasuries` | `asset` (query Literal['all', 'bitcoin', 'ethereum', 'solana', 'bnb', 'xrp', 'tron'])<br>`holder_type` (query Literal['all', 'companies', 'governments'])<br>`limit` (query int)<br>`vs_currency` (query Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']) | `ApiKeyAuth` | `CoinGeckoTreasuriesResponse` | |
91
91
  | coin_gecko | `coin_gecko.trending` | `coingecko-trending` | `GET /coingecko/trending` | `limit` (query int)<br>`vs_currency` (query Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']) | `ApiKeyAuth` | `CoinGeckoTrendingResponse` | |
92
+ | web | `web.contact` | `contact` | `POST /contact` | `option` (body str required) | `ApiKeyAuth` | `WebContactResponse` | |
93
+ | web | `web.antibot_check` | `antibot-check` | `POST /diagnostics/antibot-check` | `request` (body str required) | `ApiKeyAuth` | `WebAntibotCheckResponse` | |
94
+ | web | `web.scrape` | `web-scrape` | `POST /web/scrape` | `scrapeOption` (body str required) | `ApiKeyAuth` | `WebScrapeResponse` | |
92
95
  | datasets | `datasets.list` | `datasets-list` | `GET /datasets` | none | `ApiKeyAuth` | `DatasetsListResponse` | |
93
96
  | datasets | `datasets.google_map_businesses_facets` | `datasets-google-map-businesses-facets` | `GET /datasets/google-map-businesses/facets` | `facet` (query str required)<br>`q` (query str)<br>`category` (query str)<br>`country` (query str)<br>`state` (query str)<br>`county` (query str)<br>`city` (query str)<br>`town` (query str)<br>`min_rating` (query float)<br>`min_review_count` (query int)<br>`has_website` (query bool)<br>`has_phone` (query bool)<br>`lat` (query float)<br>`lon` (query float)<br>`radius_m` (query int)<br>`sort` (query str) | `ApiKeyAuth` | `DatasetsGoogleMapBusinessesFacetsResponse` | |
94
97
  | datasets | `datasets.google_map_businesses_item` | `datasets-google-map-businesses-item` | `GET /datasets/google-map-businesses/items/{place_id}` | `place_id` (path str required) | `ApiKeyAuth` | `DatasetsGoogleMapBusinessesItemResponse` | |
@@ -318,6 +321,11 @@ Total operations: `491`
318
321
  | reddit | `reddit.trends` | `reddit-trends` | `GET /reddit/trends` | `sort` (query Literal['hot', 'new', 'rising', 'top'])<br>`time` (query Literal['hour', 'day', 'week', 'month', 'year', 'all'])<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditTrendsResponse` | |
319
322
  | reddit | `reddit.user_comments` | `reddit-user-comments` | `GET /reddit/user/{username}/comments` | `username` (path str required)<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditUserCommentsResponse` | |
320
323
  | reddit | `reddit.user_posts` | `reddit-user-posts` | `GET /reddit/user/{username}/posts` | `username` (path str required)<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditUserPostsResponse` | |
324
+ | redfin | `redfin.estimate` | `redfin-estimate` | `GET /redfin/estimate` | `property_id` (query str required) | `ApiKeyAuth` | `RedfinEstimateResponse` | |
325
+ | redfin | `redfin.property` | `redfin-property` | `GET /redfin/property` | `url` (query str)<br>`property_id` (query str)<br>`listing_id` (query str) | `ApiKeyAuth` | `RedfinPropertyResponse` | |
326
+ | redfin | `redfin.region_trends` | `redfin-region-trends` | `GET /redfin/region-trends` | `region_id` (query int required)<br>`region_type` (query int) | `ApiKeyAuth` | `RedfinRegionTrendsResponse` | |
327
+ | redfin | `redfin.search` | `redfin-search` | `GET /redfin/search` | `location` (query str)<br>`page` (query int)<br>`region_id` (query int)<br>`region_type` (query int)<br>`status` (query str)<br>`min_price` (query int)<br>`max_price` (query int)<br>`min_beds` (query int)<br>`min_baths` (query float) | `ApiKeyAuth` | `RedfinSearchResponse` | |
328
+ | redfin | `redfin.similar` | `redfin-similar` | `GET /redfin/similar` | `property_id` (query str required) | `ApiKeyAuth` | `RedfinSimilarResponse` | |
321
329
  | referrals | `referrals.click` | `referrals-click` | `POST /referrals/click` | `request` (body str required) | none | `ReferralsClickResponse` | |
322
330
  | referrals | `referrals.me` | `referrals-me` | `GET /referrals/me` | none | `JWTAuth` | `ReferralsMeResponse` | |
323
331
  | referrals | `referrals.me_events` | `referrals-me-events` | `GET /referrals/me/events` | `limit` (query int) | `JWTAuth` | `ReferralsMeEventsResponse` | |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "crawlora"
7
- version = "1.7.0.dev1"
7
+ version = "1.8.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, 491)
270
+ self.assertEqual(OPERATION_COUNT, 499)
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: `491`",
299
+ "Total operations: `499`",
300
300
  "`bing-search`",
301
301
  "`GET /bing/search`",
302
302
  "`bing.search`",
File without changes
File without changes
File without changes