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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## v1.10.0-sdk.1

- Regenerated from the public API contract (525 to 529 operations). Adds the
**Airbnb Markets dataset** (4 endpoints): aggregate short-term-rental market
statistics -- listing supply, Superhost share, ratings, and nightly-price bands
-- rolled up by country, metro, and geo cell (search, item lookup, facets, and
nearby density). Aggregate-only: no individual listings or hosts.

## v1.9.0-sdk.1

- Regenerated from the public API contract (499 to 525 operations). Adds four
Expand Down
2 changes: 1 addition & 1 deletion crawlora/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from .operations import GROUPS, OPERATIONS

DEFAULT_BASE_URL = "https://api.crawlora.net/api/v1"
VERSION = "1.9.0-sdk.1"
VERSION = "1.10.0-sdk.1"
DEFAULT_USER_AGENT = f"crawlora-python-sdk/{VERSION}"
DEFAULT_MAX_RETRY_DELAY = 30.0
DEFAULT_RETRY_STATUSES = (408, 409, 425, 429)
Expand Down
265 changes: 265 additions & 0 deletions crawlora/client.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2590,6 +2590,33 @@ ModelContactContactResponseDoc = TypedDict('ModelContactContactResponseDoc', {
'msg': NotRequired[str],
}, total=False)

ModelDatasetsAirbnbMarketFacetResponse = TypedDict('ModelDatasetsAirbnbMarketFacetResponse', {
'dataset': NotRequired[str],
'facet': NotRequired[str],
'items': NotRequired[list[ModelEsAirbnbMarketFacetItem]],
}, total=False)

ModelDatasetsAirbnbMarketNearbyResponse = TypedDict('ModelDatasetsAirbnbMarketNearbyResponse', {
'cells': NotRequired[list[ModelEsAirbnbDensityCell]],
'dataset': NotRequired[str],
'lat': NotRequired[float],
'lon': NotRequired[float],
'precision': NotRequired[int],
'radius_m': NotRequired[int],
'total': NotRequired[int],
}, total=False)

ModelDatasetsAirbnbMarketSearchResponse = TypedDict('ModelDatasetsAirbnbMarketSearchResponse', {
'dataset': NotRequired[str],
'group_by': NotRequired[str],
'items': NotRequired[list[ModelEsAirbnbMarketCell]],
'min_listings': NotRequired[int],
'page': NotRequired[int],
'page_size': NotRequired[int],
'sort': NotRequired[str],
'total': NotRequired[int],
}, total=False)

ModelDatasetsAppsSearchResponse = TypedDict('ModelDatasetsAppsSearchResponse', {
'dataset': NotRequired[str],
'items': NotRequired[list[ModelEsAppRecord]],
Expand Down Expand Up @@ -2668,6 +2695,30 @@ ModelDatasetsReviewsSearchResponse = TypedDict('ModelDatasetsReviewsSearchRespon
'total': NotRequired[int],
}, total=False)

ModelDatasetsAirbnbMarketResponseDoc = TypedDict('ModelDatasetsAirbnbMarketResponseDoc', {
'code': NotRequired[int],
'data': NotRequired[ModelEsAirbnbMarketDetail],
'msg': NotRequired[str],
}, total=False)

ModelDatasetsAirbnbMarketsFacetResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsFacetResponseDoc', {
'code': NotRequired[int],
'data': NotRequired[ModelDatasetsAirbnbMarketFacetResponse],
'msg': NotRequired[str],
}, total=False)

ModelDatasetsAirbnbMarketsNearbyResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsNearbyResponseDoc', {
'code': NotRequired[int],
'data': NotRequired[ModelDatasetsAirbnbMarketNearbyResponse],
'msg': NotRequired[str],
}, total=False)

ModelDatasetsAirbnbMarketsSearchResponseDoc = TypedDict('ModelDatasetsAirbnbMarketsSearchResponseDoc', {
'code': NotRequired[int],
'data': NotRequired[ModelDatasetsAirbnbMarketSearchResponse],
'msg': NotRequired[str],
}, total=False)

ModelDatasetsAppsSearchResponseDoc = TypedDict('ModelDatasetsAppsSearchResponseDoc', {
'code': NotRequired[int],
'data': NotRequired[ModelDatasetsAppsSearchResponse],
Expand Down Expand Up @@ -2922,6 +2973,58 @@ ModelEbaySellerShopResponseDoc = TypedDict('ModelEbaySellerShopResponseDoc', {
'msg': NotRequired[Any],
}, total=False)

ModelEsAirbnbDensityCell = TypedDict('ModelEsAirbnbDensityCell', {
'geohash': NotRequired[str],
'lat': NotRequired[float],
'listings': NotRequired[int],
'lon': NotRequired[float],
'superhost_listings': NotRequired[int],
'superhost_pct': NotRequired[float],
}, total=False)

ModelEsAirbnbGeoBounds = TypedDict('ModelEsAirbnbGeoBounds', {
'bottom_right': NotRequired[ModelEsGeoPoint],
'top_left': NotRequired[ModelEsGeoPoint],
}, total=False)

ModelEsAirbnbMarketCell = TypedDict('ModelEsAirbnbMarketCell', {
'avg_rating': NotRequired[float],
'avg_review_count': NotRequired[float],
'key': NotRequired[str],
'last_seen': NotRequired[str],
'listings': NotRequired[int],
'rated_listings': NotRequired[int],
'superhost_listings': NotRequired[int],
'superhost_pct': NotRequired[float],
}, total=False)

ModelEsAirbnbMarketDetail = TypedDict('ModelEsAirbnbMarketDetail', {
'avg_rating': NotRequired[float],
'avg_review_count': NotRequired[float],
'bounds': NotRequired[ModelEsAirbnbGeoBounds],
'country': NotRequired[str],
'currencies': NotRequired[list[ModelEsAirbnbPriceStats]],
'last_seen': NotRequired[str],
'listings': NotRequired[int],
'metros': NotRequired[list[ModelEsAirbnbMarketCell]],
'rated_listings': NotRequired[int],
'superhost_listings': NotRequired[int],
'superhost_pct': NotRequired[float],
}, total=False)

ModelEsAirbnbMarketFacetItem = TypedDict('ModelEsAirbnbMarketFacetItem', {
'count': NotRequired[int],
'value': NotRequired[str],
}, total=False)

ModelEsAirbnbPriceStats = TypedDict('ModelEsAirbnbPriceStats', {
'currency': NotRequired[str],
'listings': NotRequired[int],
'p25': NotRequired[float],
'p50': NotRequired[float],
'p75': NotRequired[float],
}, total=False)

ModelEsAppRecord = TypedDict('ModelEsAppRecord', {
'android_max_installs': NotRequired[int],
'android_package': NotRequired[str],
Expand Down Expand Up @@ -13149,6 +13252,64 @@ DatasetsListParams = TypedDict('DatasetsListParams', {
'_headers': NotRequired[Mapping[str, str]],
}, total=False)

DatasetsAirbnbMarketsFacetsResponse = ModelDatasetsAirbnbMarketsFacetResponseDoc
DatasetsAirbnbMarketsFacetsParams = TypedDict('DatasetsAirbnbMarketsFacetsParams', {
'_response_type': NotRequired[ResponseType],
'_timeout': NotRequired[float],
'_headers': NotRequired[Mapping[str, str]],
'facet': Required[str],
'group_by': NotRequired[str],
'country': NotRequired[str],
'market': NotRequired[str],
'superhost': NotRequired[bool],
'min_rating': NotRequired[float],
'min_review_count': NotRequired[int],
'active_since': NotRequired[str],
'min_listings': NotRequired[int],
}, total=False)

DatasetsAirbnbMarketsItemResponse = ModelDatasetsAirbnbMarketResponseDoc
DatasetsAirbnbMarketsItemParams = TypedDict('DatasetsAirbnbMarketsItemParams', {
'_response_type': NotRequired[ResponseType],
'_timeout': NotRequired[float],
'_headers': NotRequired[Mapping[str, str]],
'country': Required[str],
}, total=False)

DatasetsAirbnbMarketsNearbyResponse = ModelDatasetsAirbnbMarketsNearbyResponseDoc
DatasetsAirbnbMarketsNearbyParams = TypedDict('DatasetsAirbnbMarketsNearbyParams', {
'_response_type': NotRequired[ResponseType],
'_timeout': NotRequired[float],
'_headers': NotRequired[Mapping[str, str]],
'lat': Required[float],
'lon': Required[float],
'radius_m': Required[int],
'precision': NotRequired[int],
'min_listings': NotRequired[int],
'country': NotRequired[str],
'superhost': NotRequired[bool],
'min_rating': NotRequired[float],
'active_since': NotRequired[str],
}, total=False)

DatasetsAirbnbMarketsSearchResponse = ModelDatasetsAirbnbMarketsSearchResponseDoc
DatasetsAirbnbMarketsSearchParams = TypedDict('DatasetsAirbnbMarketsSearchParams', {
'_response_type': NotRequired[ResponseType],
'_timeout': NotRequired[float],
'_headers': NotRequired[Mapping[str, str]],
'group_by': NotRequired[str],
'country': NotRequired[str],
'market': NotRequired[str],
'superhost': NotRequired[bool],
'min_rating': NotRequired[float],
'min_review_count': NotRequired[int],
'active_since': NotRequired[str],
'min_listings': NotRequired[int],
'sort': NotRequired[str],
'page': NotRequired[int],
'page_size': NotRequired[int],
}, total=False)

DatasetsAppsChartsSearchResponse = ModelDatasetsChartsSearchResponseDoc
DatasetsAppsChartsSearchParams = TypedDict('DatasetsAppsChartsSearchParams', {
'_response_type': NotRequired[ResponseType],
Expand Down Expand Up @@ -17722,6 +17883,10 @@ class WebGroup:

class DatasetsGroup:
def list(self, **params: Unpack[DatasetsListParams]) -> DatasetsListResponse: ...
def airbnb_markets_facets(self, **params: Unpack[DatasetsAirbnbMarketsFacetsParams]) -> DatasetsAirbnbMarketsFacetsResponse: ...
def airbnb_markets_item(self, **params: Unpack[DatasetsAirbnbMarketsItemParams]) -> DatasetsAirbnbMarketsItemResponse: ...
def airbnb_markets_nearby(self, **params: Unpack[DatasetsAirbnbMarketsNearbyParams]) -> DatasetsAirbnbMarketsNearbyResponse: ...
def airbnb_markets_search(self, **params: Unpack[DatasetsAirbnbMarketsSearchParams]) -> DatasetsAirbnbMarketsSearchResponse: ...
def apps_charts_search(self, **params: Unpack[DatasetsAppsChartsSearchParams]) -> DatasetsAppsChartsSearchResponse: ...
def apps_reviews_search(self, **params: Unpack[DatasetsAppsReviewsSearchParams]) -> DatasetsAppsReviewsSearchResponse: ...
def apps_search(self, **params: Unpack[DatasetsAppsSearchParams]) -> DatasetsAppsSearchResponse: ...
Expand Down Expand Up @@ -18311,6 +18476,10 @@ OperationId = Literal[
'coingecko-trending',
'contact',
'datasets-list',
'datasets-airbnb-markets-facets',
'datasets-airbnb-markets-item',
'datasets-airbnb-markets-nearby',
'datasets-airbnb-markets-search',
'datasets-apps-charts-search',
'datasets-apps-reviews-search',
'datasets-apps-search',
Expand Down Expand Up @@ -19899,6 +20068,54 @@ class CrawloraClient:
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsListResponse: ...
@overload
def operation(
self,
operation_id: Literal['datasets-airbnb-markets-facets'],
params: DatasetsAirbnbMarketsFacetsParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsFacetsResponse: ...
@overload
def operation(
self,
operation_id: Literal['datasets-airbnb-markets-item'],
params: DatasetsAirbnbMarketsItemParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsItemResponse: ...
@overload
def operation(
self,
operation_id: Literal['datasets-airbnb-markets-nearby'],
params: DatasetsAirbnbMarketsNearbyParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsNearbyResponse: ...
@overload
def operation(
self,
operation_id: Literal['datasets-airbnb-markets-search'],
params: DatasetsAirbnbMarketsSearchParams = ...,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsSearchResponse: ...
@overload
def operation(
self,
operation_id: Literal['datasets-apps-charts-search'],
Expand Down Expand Up @@ -26211,6 +26428,54 @@ class CrawloraClient:
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsListResponse: ...
@overload
def request(
self,
operation_id: Literal['datasets-airbnb-markets-facets'],
params: DatasetsAirbnbMarketsFacetsParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsFacetsResponse: ...
@overload
def request(
self,
operation_id: Literal['datasets-airbnb-markets-item'],
params: DatasetsAirbnbMarketsItemParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsItemResponse: ...
@overload
def request(
self,
operation_id: Literal['datasets-airbnb-markets-nearby'],
params: DatasetsAirbnbMarketsNearbyParams,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsNearbyResponse: ...
@overload
def request(
self,
operation_id: Literal['datasets-airbnb-markets-search'],
params: DatasetsAirbnbMarketsSearchParams = ...,
*,
response_type: ResponseType = ...,
timeout: float | None = ...,
headers: Mapping[str, str] | None = ...,
retries: int | None = ...,
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
) -> DatasetsAirbnbMarketsSearchResponse: ...
@overload
def request(
self,
operation_id: Literal['datasets-apps-charts-search'],
Expand Down
Loading
Loading