crawlora 1.9.0.dev1__tar.gz → 1.10.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.9.0.dev1/crawlora.egg-info → crawlora-1.10.0.dev1}/PKG-INFO +1 -1
  2. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/client.py +1 -1
  3. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/client.pyi +265 -0
  4. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/operations.py +87 -2
  5. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1/crawlora.egg-info}/PKG-INFO +1 -1
  6. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/docs/operations.md +5 -1
  7. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/pyproject.toml +1 -1
  8. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/tests/test_client.py +2 -2
  9. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/LICENSE +0 -0
  10. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/MANIFEST.in +0 -0
  11. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/README.md +0 -0
  12. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/__init__.py +0 -0
  13. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/_pagination.py +0 -0
  14. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/_transport_sync.py +0 -0
  15. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/async_client.py +0 -0
  16. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora/py.typed +0 -0
  17. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora.egg-info/SOURCES.txt +0 -0
  18. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora.egg-info/dependency_links.txt +0 -0
  19. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora.egg-info/requires.txt +0 -0
  20. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/crawlora.egg-info/top_level.txt +0 -0
  21. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/docs/recipes.md +0 -0
  22. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/examples/async_search.py +0 -0
  23. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/examples/bing_search.py +0 -0
  24. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/examples/paginate.py +0 -0
  25. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/examples/youtube_transcript.py +0 -0
  26. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/setup.cfg +0 -0
  27. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/tests/test_async_httpx.py +0 -0
  28. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/tests/test_examples.py +0 -0
  29. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/tests/test_v14_features.py +0 -0
  30. {crawlora-1.9.0.dev1 → crawlora-1.10.0.dev1}/tests/test_v15_features.py +0 -0
  31. {crawlora-1.9.0.dev1 → crawlora-1.10.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.9.0.dev1
3
+ Version: 1.10.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.9.0-sdk.1"
23
+ VERSION = "1.10.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)
@@ -2590,6 +2590,33 @@ ModelContactContactResponseDoc = TypedDict('ModelContactContactResponseDoc', {
2590
2590
  'msg': NotRequired[str],
2591
2591
  }, total=False)
2592
2592
 
2593
+ ModelDatasetsAirbnbMarketFacetResponse = TypedDict('ModelDatasetsAirbnbMarketFacetResponse', {
2594
+ 'dataset': NotRequired[str],
2595
+ 'facet': NotRequired[str],
2596
+ 'items': NotRequired[list[ModelEsAirbnbMarketFacetItem]],
2597
+ }, total=False)
2598
+
2599
+ ModelDatasetsAirbnbMarketNearbyResponse = TypedDict('ModelDatasetsAirbnbMarketNearbyResponse', {
2600
+ 'cells': NotRequired[list[ModelEsAirbnbDensityCell]],
2601
+ 'dataset': NotRequired[str],
2602
+ 'lat': NotRequired[float],
2603
+ 'lon': NotRequired[float],
2604
+ 'precision': NotRequired[int],
2605
+ 'radius_m': NotRequired[int],
2606
+ 'total': NotRequired[int],
2607
+ }, total=False)
2608
+
2609
+ ModelDatasetsAirbnbMarketSearchResponse = TypedDict('ModelDatasetsAirbnbMarketSearchResponse', {
2610
+ 'dataset': NotRequired[str],
2611
+ 'group_by': NotRequired[str],
2612
+ 'items': NotRequired[list[ModelEsAirbnbMarketCell]],
2613
+ 'min_listings': NotRequired[int],
2614
+ 'page': NotRequired[int],
2615
+ 'page_size': NotRequired[int],
2616
+ 'sort': NotRequired[str],
2617
+ 'total': NotRequired[int],
2618
+ }, total=False)
2619
+
2593
2620
  ModelDatasetsAppsSearchResponse = TypedDict('ModelDatasetsAppsSearchResponse', {
2594
2621
  'dataset': NotRequired[str],
2595
2622
  'items': NotRequired[list[ModelEsAppRecord]],
@@ -2668,6 +2695,30 @@ ModelDatasetsReviewsSearchResponse = TypedDict('ModelDatasetsReviewsSearchRespon
2668
2695
  'total': NotRequired[int],
2669
2696
  }, total=False)
2670
2697
 
2698
+ ModelDatasetsAirbnbMarketResponseDoc = TypedDict('ModelDatasetsAirbnbMarketResponseDoc', {
2699
+ 'code': NotRequired[int],
2700
+ 'data': NotRequired[ModelEsAirbnbMarketDetail],
2701
+ 'msg': NotRequired[str],
2702
+ }, total=False)
2703
+
2704
+ ModelDatasetsAirbnbMarketsFacetResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsFacetResponseDoc', {
2705
+ 'code': NotRequired[int],
2706
+ 'data': NotRequired[ModelDatasetsAirbnbMarketFacetResponse],
2707
+ 'msg': NotRequired[str],
2708
+ }, total=False)
2709
+
2710
+ ModelDatasetsAirbnbMarketsNearbyResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsNearbyResponseDoc', {
2711
+ 'code': NotRequired[int],
2712
+ 'data': NotRequired[ModelDatasetsAirbnbMarketNearbyResponse],
2713
+ 'msg': NotRequired[str],
2714
+ }, total=False)
2715
+
2716
+ ModelDatasetsAirbnbMarketsSearchResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsSearchResponseDoc', {
2717
+ 'code': NotRequired[int],
2718
+ 'data': NotRequired[ModelDatasetsAirbnbMarketSearchResponse],
2719
+ 'msg': NotRequired[str],
2720
+ }, total=False)
2721
+
2671
2722
  ModelDatasetsAppsSearchResponseDoc = TypedDict('ModelDatasetsAppsSearchResponseDoc', {
2672
2723
  'code': NotRequired[int],
2673
2724
  'data': NotRequired[ModelDatasetsAppsSearchResponse],
@@ -2922,6 +2973,58 @@ ModelEbaySellerShopResponseDoc = TypedDict('ModelEbaySellerShopResponseDoc', {
2922
2973
  'msg': NotRequired[Any],
2923
2974
  }, total=False)
2924
2975
 
2976
+ ModelEsAirbnbDensityCell = TypedDict('ModelEsAirbnbDensityCell', {
2977
+ 'geohash': NotRequired[str],
2978
+ 'lat': NotRequired[float],
2979
+ 'listings': NotRequired[int],
2980
+ 'lon': NotRequired[float],
2981
+ 'superhost_listings': NotRequired[int],
2982
+ 'superhost_pct': NotRequired[float],
2983
+ }, total=False)
2984
+
2985
+ ModelEsAirbnbGeoBounds = TypedDict('ModelEsAirbnbGeoBounds', {
2986
+ 'bottom_right': NotRequired[ModelEsGeoPoint],
2987
+ 'top_left': NotRequired[ModelEsGeoPoint],
2988
+ }, total=False)
2989
+
2990
+ ModelEsAirbnbMarketCell = TypedDict('ModelEsAirbnbMarketCell', {
2991
+ 'avg_rating': NotRequired[float],
2992
+ 'avg_review_count': NotRequired[float],
2993
+ 'key': NotRequired[str],
2994
+ 'last_seen': NotRequired[str],
2995
+ 'listings': NotRequired[int],
2996
+ 'rated_listings': NotRequired[int],
2997
+ 'superhost_listings': NotRequired[int],
2998
+ 'superhost_pct': NotRequired[float],
2999
+ }, total=False)
3000
+
3001
+ ModelEsAirbnbMarketDetail = TypedDict('ModelEsAirbnbMarketDetail', {
3002
+ 'avg_rating': NotRequired[float],
3003
+ 'avg_review_count': NotRequired[float],
3004
+ 'bounds': NotRequired[ModelEsAirbnbGeoBounds],
3005
+ 'country': NotRequired[str],
3006
+ 'currencies': NotRequired[list[ModelEsAirbnbPriceStats]],
3007
+ 'last_seen': NotRequired[str],
3008
+ 'listings': NotRequired[int],
3009
+ 'metros': NotRequired[list[ModelEsAirbnbMarketCell]],
3010
+ 'rated_listings': NotRequired[int],
3011
+ 'superhost_listings': NotRequired[int],
3012
+ 'superhost_pct': NotRequired[float],
3013
+ }, total=False)
3014
+
3015
+ ModelEsAirbnbMarketFacetItem = TypedDict('ModelEsAirbnbMarketFacetItem', {
3016
+ 'count': NotRequired[int],
3017
+ 'value': NotRequired[str],
3018
+ }, total=False)
3019
+
3020
+ ModelEsAirbnbPriceStats = TypedDict('ModelEsAirbnbPriceStats', {
3021
+ 'currency': NotRequired[str],
3022
+ 'listings': NotRequired[int],
3023
+ 'p25': NotRequired[float],
3024
+ 'p50': NotRequired[float],
3025
+ 'p75': NotRequired[float],
3026
+ }, total=False)
3027
+
2925
3028
  ModelEsAppRecord = TypedDict('ModelEsAppRecord', {
2926
3029
  'android_max_installs': NotRequired[int],
2927
3030
  'android_package': NotRequired[str],
@@ -13149,6 +13252,64 @@ DatasetsListParams = TypedDict('DatasetsListParams', {
13149
13252
  '_headers': NotRequired[Mapping[str, str]],
13150
13253
  }, total=False)
13151
13254
 
13255
+ DatasetsAirbnbMarketsFacetsResponse = ModelDatasetsAirbnbMarketsFacetResponseDoc
13256
+ DatasetsAirbnbMarketsFacetsParams = TypedDict('DatasetsAirbnbMarketsFacetsParams', {
13257
+ '_response_type': NotRequired[ResponseType],
13258
+ '_timeout': NotRequired[float],
13259
+ '_headers': NotRequired[Mapping[str, str]],
13260
+ 'facet': Required[str],
13261
+ 'group_by': NotRequired[str],
13262
+ 'country': NotRequired[str],
13263
+ 'market': NotRequired[str],
13264
+ 'superhost': NotRequired[bool],
13265
+ 'min_rating': NotRequired[float],
13266
+ 'min_review_count': NotRequired[int],
13267
+ 'active_since': NotRequired[str],
13268
+ 'min_listings': NotRequired[int],
13269
+ }, total=False)
13270
+
13271
+ DatasetsAirbnbMarketsItemResponse = ModelDatasetsAirbnbMarketResponseDoc
13272
+ DatasetsAirbnbMarketsItemParams = TypedDict('DatasetsAirbnbMarketsItemParams', {
13273
+ '_response_type': NotRequired[ResponseType],
13274
+ '_timeout': NotRequired[float],
13275
+ '_headers': NotRequired[Mapping[str, str]],
13276
+ 'country': Required[str],
13277
+ }, total=False)
13278
+
13279
+ DatasetsAirbnbMarketsNearbyResponse = ModelDatasetsAirbnbMarketsNearbyResponseDoc
13280
+ DatasetsAirbnbMarketsNearbyParams = TypedDict('DatasetsAirbnbMarketsNearbyParams', {
13281
+ '_response_type': NotRequired[ResponseType],
13282
+ '_timeout': NotRequired[float],
13283
+ '_headers': NotRequired[Mapping[str, str]],
13284
+ 'lat': Required[float],
13285
+ 'lon': Required[float],
13286
+ 'radius_m': Required[int],
13287
+ 'precision': NotRequired[int],
13288
+ 'min_listings': NotRequired[int],
13289
+ 'country': NotRequired[str],
13290
+ 'superhost': NotRequired[bool],
13291
+ 'min_rating': NotRequired[float],
13292
+ 'active_since': NotRequired[str],
13293
+ }, total=False)
13294
+
13295
+ DatasetsAirbnbMarketsSearchResponse = ModelDatasetsAirbnbMarketsSearchResponseDoc
13296
+ DatasetsAirbnbMarketsSearchParams = TypedDict('DatasetsAirbnbMarketsSearchParams', {
13297
+ '_response_type': NotRequired[ResponseType],
13298
+ '_timeout': NotRequired[float],
13299
+ '_headers': NotRequired[Mapping[str, str]],
13300
+ 'group_by': NotRequired[str],
13301
+ 'country': NotRequired[str],
13302
+ 'market': NotRequired[str],
13303
+ 'superhost': NotRequired[bool],
13304
+ 'min_rating': NotRequired[float],
13305
+ 'min_review_count': NotRequired[int],
13306
+ 'active_since': NotRequired[str],
13307
+ 'min_listings': NotRequired[int],
13308
+ 'sort': NotRequired[str],
13309
+ 'page': NotRequired[int],
13310
+ 'page_size': NotRequired[int],
13311
+ }, total=False)
13312
+
13152
13313
  DatasetsAppsChartsSearchResponse = ModelDatasetsChartsSearchResponseDoc
13153
13314
  DatasetsAppsChartsSearchParams = TypedDict('DatasetsAppsChartsSearchParams', {
13154
13315
  '_response_type': NotRequired[ResponseType],
@@ -17722,6 +17883,10 @@ class WebGroup:
17722
17883
 
17723
17884
  class DatasetsGroup:
17724
17885
  def list(self, **params: Unpack[DatasetsListParams]) -> DatasetsListResponse: ...
17886
+ def airbnb_markets_facets(self, **params: Unpack[DatasetsAirbnbMarketsFacetsParams]) -> DatasetsAirbnbMarketsFacetsResponse: ...
17887
+ def airbnb_markets_item(self, **params: Unpack[DatasetsAirbnbMarketsItemParams]) -> DatasetsAirbnbMarketsItemResponse: ...
17888
+ def airbnb_markets_nearby(self, **params: Unpack[DatasetsAirbnbMarketsNearbyParams]) -> DatasetsAirbnbMarketsNearbyResponse: ...
17889
+ def airbnb_markets_search(self, **params: Unpack[DatasetsAirbnbMarketsSearchParams]) -> DatasetsAirbnbMarketsSearchResponse: ...
17725
17890
  def apps_charts_search(self, **params: Unpack[DatasetsAppsChartsSearchParams]) -> DatasetsAppsChartsSearchResponse: ...
17726
17891
  def apps_reviews_search(self, **params: Unpack[DatasetsAppsReviewsSearchParams]) -> DatasetsAppsReviewsSearchResponse: ...
17727
17892
  def apps_search(self, **params: Unpack[DatasetsAppsSearchParams]) -> DatasetsAppsSearchResponse: ...
@@ -18311,6 +18476,10 @@ OperationId = Literal[
18311
18476
  'coingecko-trending',
18312
18477
  'contact',
18313
18478
  'datasets-list',
18479
+ 'datasets-airbnb-markets-facets',
18480
+ 'datasets-airbnb-markets-item',
18481
+ 'datasets-airbnb-markets-nearby',
18482
+ 'datasets-airbnb-markets-search',
18314
18483
  'datasets-apps-charts-search',
18315
18484
  'datasets-apps-reviews-search',
18316
18485
  'datasets-apps-search',
@@ -19899,6 +20068,54 @@ class CrawloraClient:
19899
20068
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
19900
20069
  ) -> DatasetsListResponse: ...
19901
20070
  @overload
20071
+ def operation(
20072
+ self,
20073
+ operation_id: Literal['datasets-airbnb-markets-facets'],
20074
+ params: DatasetsAirbnbMarketsFacetsParams,
20075
+ *,
20076
+ response_type: ResponseType = ...,
20077
+ timeout: float | None = ...,
20078
+ headers: Mapping[str, str] | None = ...,
20079
+ retries: int | None = ...,
20080
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
20081
+ ) -> DatasetsAirbnbMarketsFacetsResponse: ...
20082
+ @overload
20083
+ def operation(
20084
+ self,
20085
+ operation_id: Literal['datasets-airbnb-markets-item'],
20086
+ params: DatasetsAirbnbMarketsItemParams,
20087
+ *,
20088
+ response_type: ResponseType = ...,
20089
+ timeout: float | None = ...,
20090
+ headers: Mapping[str, str] | None = ...,
20091
+ retries: int | None = ...,
20092
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
20093
+ ) -> DatasetsAirbnbMarketsItemResponse: ...
20094
+ @overload
20095
+ def operation(
20096
+ self,
20097
+ operation_id: Literal['datasets-airbnb-markets-nearby'],
20098
+ params: DatasetsAirbnbMarketsNearbyParams,
20099
+ *,
20100
+ response_type: ResponseType = ...,
20101
+ timeout: float | None = ...,
20102
+ headers: Mapping[str, str] | None = ...,
20103
+ retries: int | None = ...,
20104
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
20105
+ ) -> DatasetsAirbnbMarketsNearbyResponse: ...
20106
+ @overload
20107
+ def operation(
20108
+ self,
20109
+ operation_id: Literal['datasets-airbnb-markets-search'],
20110
+ params: DatasetsAirbnbMarketsSearchParams = ...,
20111
+ *,
20112
+ response_type: ResponseType = ...,
20113
+ timeout: float | None = ...,
20114
+ headers: Mapping[str, str] | None = ...,
20115
+ retries: int | None = ...,
20116
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
20117
+ ) -> DatasetsAirbnbMarketsSearchResponse: ...
20118
+ @overload
19902
20119
  def operation(
19903
20120
  self,
19904
20121
  operation_id: Literal['datasets-apps-charts-search'],
@@ -26211,6 +26428,54 @@ class CrawloraClient:
26211
26428
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
26212
26429
  ) -> DatasetsListResponse: ...
26213
26430
  @overload
26431
+ def request(
26432
+ self,
26433
+ operation_id: Literal['datasets-airbnb-markets-facets'],
26434
+ params: DatasetsAirbnbMarketsFacetsParams,
26435
+ *,
26436
+ response_type: ResponseType = ...,
26437
+ timeout: float | None = ...,
26438
+ headers: Mapping[str, str] | None = ...,
26439
+ retries: int | None = ...,
26440
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
26441
+ ) -> DatasetsAirbnbMarketsFacetsResponse: ...
26442
+ @overload
26443
+ def request(
26444
+ self,
26445
+ operation_id: Literal['datasets-airbnb-markets-item'],
26446
+ params: DatasetsAirbnbMarketsItemParams,
26447
+ *,
26448
+ response_type: ResponseType = ...,
26449
+ timeout: float | None = ...,
26450
+ headers: Mapping[str, str] | None = ...,
26451
+ retries: int | None = ...,
26452
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
26453
+ ) -> DatasetsAirbnbMarketsItemResponse: ...
26454
+ @overload
26455
+ def request(
26456
+ self,
26457
+ operation_id: Literal['datasets-airbnb-markets-nearby'],
26458
+ params: DatasetsAirbnbMarketsNearbyParams,
26459
+ *,
26460
+ response_type: ResponseType = ...,
26461
+ timeout: float | None = ...,
26462
+ headers: Mapping[str, str] | None = ...,
26463
+ retries: int | None = ...,
26464
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
26465
+ ) -> DatasetsAirbnbMarketsNearbyResponse: ...
26466
+ @overload
26467
+ def request(
26468
+ self,
26469
+ operation_id: Literal['datasets-airbnb-markets-search'],
26470
+ params: DatasetsAirbnbMarketsSearchParams = ...,
26471
+ *,
26472
+ response_type: ResponseType = ...,
26473
+ timeout: float | None = ...,
26474
+ headers: Mapping[str, str] | None = ...,
26475
+ retries: int | None = ...,
26476
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
26477
+ ) -> DatasetsAirbnbMarketsSearchResponse: ...
26478
+ @overload
26214
26479
  def request(
26215
26480
  self,
26216
26481
  operation_id: Literal['datasets-apps-charts-search'],
@@ -2435,6 +2435,83 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
2435
2435
  'produces': ['application/json'],
2436
2436
  'queryParams': [],
2437
2437
  'security': ['ApiKeyAuth']},
2438
+ 'datasets-airbnb-markets-facets': {'bodyParam': None,
2439
+ 'bodyRequired': False,
2440
+ 'consumes': ['application/json'],
2441
+ 'formParams': [],
2442
+ 'id': 'datasets-airbnb-markets-facets',
2443
+ 'method': 'GET',
2444
+ 'path': '/datasets/airbnb-markets/facets',
2445
+ 'pathParams': [],
2446
+ 'produces': ['application/json'],
2447
+ 'queryParams': [{'in': 'query',
2448
+ 'name': 'facet',
2449
+ 'required': True,
2450
+ 'type': 'string'},
2451
+ {'in': 'query', 'name': 'group_by', 'type': 'string'},
2452
+ {'in': 'query', 'name': 'country', 'type': 'string'},
2453
+ {'in': 'query', 'name': 'market', 'type': 'string'},
2454
+ {'in': 'query', 'name': 'superhost', 'type': 'boolean'},
2455
+ {'in': 'query', 'name': 'min_rating', 'type': 'number'},
2456
+ {'in': 'query', 'name': 'min_review_count', 'type': 'integer'},
2457
+ {'in': 'query', 'name': 'active_since', 'type': 'string'},
2458
+ {'in': 'query', 'name': 'min_listings', 'type': 'integer'}],
2459
+ 'security': ['ApiKeyAuth']},
2460
+ 'datasets-airbnb-markets-item': {'bodyParam': None,
2461
+ 'bodyRequired': False,
2462
+ 'consumes': ['application/json'],
2463
+ 'formParams': [],
2464
+ 'id': 'datasets-airbnb-markets-item',
2465
+ 'method': 'GET',
2466
+ 'path': '/datasets/airbnb-markets/items/{country}',
2467
+ 'pathParams': ['country'],
2468
+ 'produces': ['application/json'],
2469
+ 'queryParams': [],
2470
+ 'security': ['ApiKeyAuth']},
2471
+ 'datasets-airbnb-markets-nearby': {'bodyParam': None,
2472
+ 'bodyRequired': False,
2473
+ 'consumes': ['application/json'],
2474
+ 'formParams': [],
2475
+ 'id': 'datasets-airbnb-markets-nearby',
2476
+ 'method': 'GET',
2477
+ 'path': '/datasets/airbnb-markets/nearby',
2478
+ 'pathParams': [],
2479
+ 'produces': ['application/json'],
2480
+ 'queryParams': [{'in': 'query', 'name': 'lat', 'required': True, 'type': 'number'},
2481
+ {'in': 'query', 'name': 'lon', 'required': True, 'type': 'number'},
2482
+ {'in': 'query',
2483
+ 'name': 'radius_m',
2484
+ 'required': True,
2485
+ 'type': 'integer'},
2486
+ {'in': 'query', 'name': 'precision', 'type': 'integer'},
2487
+ {'in': 'query', 'name': 'min_listings', 'type': 'integer'},
2488
+ {'in': 'query', 'name': 'country', 'type': 'string'},
2489
+ {'in': 'query', 'name': 'superhost', 'type': 'boolean'},
2490
+ {'in': 'query', 'name': 'min_rating', 'type': 'number'},
2491
+ {'in': 'query', 'name': 'active_since', 'type': 'string'}],
2492
+ 'security': ['ApiKeyAuth']},
2493
+ 'datasets-airbnb-markets-search': {'bodyParam': None,
2494
+ 'bodyRequired': False,
2495
+ 'consumes': ['application/json'],
2496
+ 'formParams': [],
2497
+ 'id': 'datasets-airbnb-markets-search',
2498
+ 'method': 'GET',
2499
+ 'paginatable': True,
2500
+ 'path': '/datasets/airbnb-markets/search',
2501
+ 'pathParams': [],
2502
+ 'produces': ['application/json'],
2503
+ 'queryParams': [{'in': 'query', 'name': 'group_by', 'type': 'string'},
2504
+ {'in': 'query', 'name': 'country', 'type': 'string'},
2505
+ {'in': 'query', 'name': 'market', 'type': 'string'},
2506
+ {'in': 'query', 'name': 'superhost', 'type': 'boolean'},
2507
+ {'in': 'query', 'name': 'min_rating', 'type': 'number'},
2508
+ {'in': 'query', 'name': 'min_review_count', 'type': 'integer'},
2509
+ {'in': 'query', 'name': 'active_since', 'type': 'string'},
2510
+ {'in': 'query', 'name': 'min_listings', 'type': 'integer'},
2511
+ {'in': 'query', 'name': 'sort', 'type': 'string'},
2512
+ {'in': 'query', 'name': 'page', 'type': 'integer'},
2513
+ {'in': 'query', 'name': 'page_size', 'type': 'integer'}],
2514
+ 'security': ['ApiKeyAuth']},
2438
2515
  'datasets-apps-charts-search': {'bodyParam': None,
2439
2516
  'bodyRequired': False,
2440
2517
  'consumes': ['application/json'],
@@ -9094,7 +9171,11 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
9094
9171
  'token_unlocks': 'coingecko-token-unlocks',
9095
9172
  'treasuries': 'coingecko-treasuries',
9096
9173
  'trending': 'coingecko-trending'},
9097
- 'datasets': {'apps_charts_search': 'datasets-apps-charts-search',
9174
+ 'datasets': {'airbnb_markets_facets': 'datasets-airbnb-markets-facets',
9175
+ 'airbnb_markets_item': 'datasets-airbnb-markets-item',
9176
+ 'airbnb_markets_nearby': 'datasets-airbnb-markets-nearby',
9177
+ 'airbnb_markets_search': 'datasets-airbnb-markets-search',
9178
+ 'apps_charts_search': 'datasets-apps-charts-search',
9098
9179
  'apps_reviews_search': 'datasets-apps-reviews-search',
9099
9180
  'apps_search': 'datasets-apps-search',
9100
9181
  'creators_search': 'datasets-creators-search',
@@ -9523,7 +9604,7 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
9523
9604
  'video': 'youtube-video'},
9524
9605
  'zillow': {'autocomplete': 'zillow-autocomplete', 'property': 'zillow-property', 'search': 'zillow-search'}}
9525
9606
 
9526
- OPERATION_COUNT = 525
9607
+ OPERATION_COUNT = 529
9527
9608
 
9528
9609
  class OperationId:
9529
9610
  AIRBNB_ROOM = 'airbnb-room'
@@ -9609,6 +9690,10 @@ class OperationId:
9609
9690
  COIN_GECKO_TOKEN_UNLOCKS = 'coingecko-token-unlocks'
9610
9691
  COIN_GECKO_TREASURIES = 'coingecko-treasuries'
9611
9692
  COIN_GECKO_TRENDING = 'coingecko-trending'
9693
+ DATASETS_AIRBNB_MARKETS_FACETS = 'datasets-airbnb-markets-facets'
9694
+ DATASETS_AIRBNB_MARKETS_ITEM = 'datasets-airbnb-markets-item'
9695
+ DATASETS_AIRBNB_MARKETS_NEARBY = 'datasets-airbnb-markets-nearby'
9696
+ DATASETS_AIRBNB_MARKETS_SEARCH = 'datasets-airbnb-markets-search'
9612
9697
  DATASETS_APPS_CHARTS_SEARCH = 'datasets-apps-charts-search'
9613
9698
  DATASETS_APPS_REVIEWS_SEARCH = 'datasets-apps-reviews-search'
9614
9699
  DATASETS_APPS_SEARCH = 'datasets-apps-search'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crawlora
3
- Version: 1.9.0.dev1
3
+ Version: 1.10.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: `525`
5
+ Total operations: `529`
6
6
 
7
7
  | Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
8
8
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -93,6 +93,10 @@ Total operations: `525`
93
93
  | web | `web.antibot_check` | `antibot-check` | `POST /diagnostics/antibot-check` | `request` (body str required) | `ApiKeyAuth` | `WebAntibotCheckResponse` | |
94
94
  | web | `web.scrape` | `web-scrape` | `POST /web/scrape` | `scrapeOption` (body str required) | `ApiKeyAuth` | `WebScrapeResponse` | |
95
95
  | datasets | `datasets.list` | `datasets-list` | `GET /datasets` | none | `ApiKeyAuth` | `DatasetsListResponse` | |
96
+ | datasets | `datasets.airbnb_markets_facets` | `datasets-airbnb-markets-facets` | `GET /datasets/airbnb-markets/facets` | `facet` (query str required)<br>`group_by` (query str)<br>`country` (query str)<br>`market` (query str)<br>`superhost` (query bool)<br>`min_rating` (query float)<br>`min_review_count` (query int)<br>`active_since` (query str)<br>`min_listings` (query int) | `ApiKeyAuth` | `DatasetsAirbnbMarketsFacetsResponse` | |
97
+ | datasets | `datasets.airbnb_markets_item` | `datasets-airbnb-markets-item` | `GET /datasets/airbnb-markets/items/{country}` | `country` (path str required) | `ApiKeyAuth` | `DatasetsAirbnbMarketsItemResponse` | |
98
+ | datasets | `datasets.airbnb_markets_nearby` | `datasets-airbnb-markets-nearby` | `GET /datasets/airbnb-markets/nearby` | `lat` (query float required)<br>`lon` (query float required)<br>`radius_m` (query int required)<br>`precision` (query int)<br>`min_listings` (query int)<br>`country` (query str)<br>`superhost` (query bool)<br>`min_rating` (query float)<br>`active_since` (query str) | `ApiKeyAuth` | `DatasetsAirbnbMarketsNearbyResponse` | |
99
+ | datasets | `datasets.airbnb_markets_search` | `datasets-airbnb-markets-search` | `GET /datasets/airbnb-markets/search` | `group_by` (query str)<br>`country` (query str)<br>`market` (query str)<br>`superhost` (query bool)<br>`min_rating` (query float)<br>`min_review_count` (query int)<br>`active_since` (query str)<br>`min_listings` (query int)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsAirbnbMarketsSearchResponse` | |
96
100
  | datasets | `datasets.apps_charts_search` | `datasets-apps-charts-search` | `GET /datasets/apps-charts/search` | `q` (query str)<br>`store` (query str)<br>`chart_type` (query str)<br>`collection` (query str)<br>`category` (query str)<br>`country` (query str)<br>`app_id` (query str)<br>`date` (query str)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsAppsChartsSearchResponse` | |
97
101
  | datasets | `datasets.apps_reviews_search` | `datasets-apps-reviews-search` | `GET /datasets/apps-reviews/search` | `q` (query str)<br>`store` (query str)<br>`app_id` (query str)<br>`country` (query str)<br>`min_score` (query int)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsAppsReviewsSearchResponse` | |
98
102
  | datasets | `datasets.apps_search` | `datasets-apps-search` | `GET /datasets/apps/search` | `q` (query str)<br>`store` (query str)<br>`category` (query str)<br>`country` (query str)<br>`developer` (query str)<br>`free` (query bool)<br>`min_rating` (query float)<br>`min_reviews` (query int)<br>`sort` (query str)<br>`page` (query int)<br>`page_size` (query int) | `ApiKeyAuth` | `DatasetsAppsSearchResponse` | |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "crawlora"
7
- version = "1.9.0.dev1"
7
+ version = "1.10.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, 525)
270
+ self.assertEqual(OPERATION_COUNT, 529)
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: `525`",
299
+ "Total operations: `529`",
300
300
  "`bing-search`",
301
301
  "`GET /bing/search`",
302
302
  "`bing.search`",
File without changes
File without changes
File without changes