getanyapi 0.71.0__tar.gz → 0.72.0__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.
- {getanyapi-0.71.0 → getanyapi-0.72.0}/PKG-INFO +1 -1
- {getanyapi-0.71.0 → getanyapi-0.72.0}/pyproject.toml +1 -1
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/realtor.py +1 -1
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/redfin.py +3 -1
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/tiktok.py +14 -4
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/tiktok_shop.py +14 -4
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/youtube.py +8 -3
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/zillow.py +3 -2
- {getanyapi-0.71.0 → getanyapi-0.72.0}/.gitignore +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/README.md +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/amazon.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/appstore.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/booking.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/capterra.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/chatgpt.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/company_identify.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/email.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/facebook.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/g2.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/google.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/google_shopping.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/instagram.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/linkedin.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/maps.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/playstore.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/property_records.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/reddit.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/seo.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/similarweb.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/substack.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/trustpilot.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/twitter.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/upwork.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/walmart.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/yelp.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/platforms/zhihu.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/src/getanyapi/types.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/conftest.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_account.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_client.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_envelope.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_errors.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_not_found_reason.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/tests/test_transport.py +0 -0
- {getanyapi-0.71.0 → getanyapi-0.72.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: getanyapi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.72.0
|
|
4
4
|
Summary: Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions.
|
|
5
5
|
Project-URL: Homepage, https://getanyapi.com
|
|
6
6
|
Project-URL: Documentation, https://getanyapi.com/docs
|
|
@@ -217,7 +217,7 @@ class RealtorSearchItem(BaseModel):
|
|
|
217
217
|
tax_assessed_value: float | None = Field(
|
|
218
218
|
default=None,
|
|
219
219
|
alias="taxAssessedValue",
|
|
220
|
-
description="Most recent assessed value from the county tax authority, in US dollars.",
|
|
220
|
+
description="Most recent assessed value from the county tax authority, in US dollars, or null when none is published (common on new construction).",
|
|
221
221
|
)
|
|
222
222
|
title: str | None = Field(
|
|
223
223
|
default=None,
|
|
@@ -221,7 +221,9 @@ class RedfinSearchItem(BaseModel):
|
|
|
221
221
|
default=None, description="Longitude of the home in decimal degrees."
|
|
222
222
|
)
|
|
223
223
|
lot_size: float | None = Field(
|
|
224
|
-
default=None,
|
|
224
|
+
default=None,
|
|
225
|
+
alias="lotSize",
|
|
226
|
+
description="Lot size in square feet, or null when the listing has no lot size (common on condos).",
|
|
225
227
|
)
|
|
226
228
|
mls_id: str | None = Field(
|
|
227
229
|
default=None, alias="mlsId", description="MLS number for the listing."
|
|
@@ -639,6 +639,8 @@ class TiktokVideoInput(TypedDict, total=False):
|
|
|
639
639
|
"""Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
|
|
640
640
|
preferLatencyUnderMs: NotRequired[int]
|
|
641
641
|
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
|
|
642
|
+
requireFields: NotRequired[list[Literal["comments", "likes", "shares", "views"]]]
|
|
643
|
+
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `views`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a video that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. A source that returns only a rounded or shortened value for a field does not count as returning it."""
|
|
642
644
|
source: NotRequired[list[str]]
|
|
643
645
|
"""Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
|
|
644
646
|
url: NotRequired[str]
|
|
@@ -2318,7 +2320,9 @@ class TiktokVideoData(BaseModel):
|
|
|
2318
2320
|
caption: str = Field(
|
|
2319
2321
|
description="Populated whenever the provider has data for the entity."
|
|
2320
2322
|
)
|
|
2321
|
-
comments: int
|
|
2323
|
+
comments: int = Field(
|
|
2324
|
+
description="Number of comments. Some sources round large counts (48.5K instead of 48,536); name `comments` in requireFields to be served only by a source that returns the exact count."
|
|
2325
|
+
)
|
|
2322
2326
|
created_utc: float | None = Field(
|
|
2323
2327
|
default=None,
|
|
2324
2328
|
alias="createdUtc",
|
|
@@ -2334,10 +2338,14 @@ class TiktokVideoData(BaseModel):
|
|
|
2334
2338
|
default=None,
|
|
2335
2339
|
description="URL of the video's cover/thumbnail image. A signed, short-lived TikTok CDN URL (typically expires within about a day; query params are load-bearing and kept intact), often served as HEIC rather than JPEG, so fetch it promptly and transcode if you need broad browser support. Absent when the upstream provides no cover.",
|
|
2336
2340
|
)
|
|
2337
|
-
likes: int
|
|
2341
|
+
likes: int = Field(
|
|
2342
|
+
description="Number of likes. Some sources round large counts (2.9M instead of 2,884,604); name `likes` in requireFields to be served only by a source that returns the exact count."
|
|
2343
|
+
)
|
|
2338
2344
|
region: str
|
|
2339
2345
|
saves: int
|
|
2340
|
-
shares: int
|
|
2346
|
+
shares: int = Field(
|
|
2347
|
+
description="Number of shares. Some sources round large counts (35.9K instead of 35,923); name `shares` in requireFields to be served only by a source that returns the exact count."
|
|
2348
|
+
)
|
|
2341
2349
|
url: str | None = Field(
|
|
2342
2350
|
default=None, description="Canonical TikTok URL of the video."
|
|
2343
2351
|
)
|
|
@@ -2346,7 +2354,9 @@ class TiktokVideoData(BaseModel):
|
|
|
2346
2354
|
alias="videoUrl",
|
|
2347
2355
|
description="Playable video URL. Signed and short-lived, so the query string is load-bearing and kept intact.",
|
|
2348
2356
|
)
|
|
2349
|
-
views: int
|
|
2357
|
+
views: int = Field(
|
|
2358
|
+
description="Number of plays. Some sources round large counts (32.7M instead of 32,736,400); name `views` in requireFields to be served only by a source that returns the exact count."
|
|
2359
|
+
)
|
|
2350
2360
|
|
|
2351
2361
|
|
|
2352
2362
|
class TiktokVideoCommentsData(BaseModel):
|
|
@@ -550,13 +550,18 @@ class TiktokShopShopProductsProduct(BaseModel):
|
|
|
550
550
|
|
|
551
551
|
currency: str
|
|
552
552
|
image: str | None = Field(default=None, description="Product image URL.")
|
|
553
|
-
original_price: float = Field(
|
|
553
|
+
original_price: float | None = Field(
|
|
554
|
+
alias="originalPrice",
|
|
555
|
+
description="Pre-discount list price, or null when the product is not on sale.",
|
|
556
|
+
)
|
|
554
557
|
price: float
|
|
555
558
|
product_id: str = Field(
|
|
556
559
|
alias="productId",
|
|
557
560
|
description="Populated whenever the provider has data for the entity.",
|
|
558
561
|
)
|
|
559
|
-
rating: float
|
|
562
|
+
rating: float | None = Field(
|
|
563
|
+
description="Average review score out of 5, or null when the product has no rating yet."
|
|
564
|
+
)
|
|
560
565
|
review_count: int = Field(alias="reviewCount")
|
|
561
566
|
sold_count: int = Field(alias="soldCount")
|
|
562
567
|
title: str = Field(
|
|
@@ -587,13 +592,18 @@ class TiktokShopUserShowcaseProduct(BaseModel):
|
|
|
587
592
|
alias="imageUrl",
|
|
588
593
|
description="Populated whenever the provider has data for the entity.",
|
|
589
594
|
)
|
|
590
|
-
original_price: str = Field(
|
|
595
|
+
original_price: str | None = Field(
|
|
596
|
+
alias="originalPrice",
|
|
597
|
+
description="Pre-discount list price, or null when the product is not on sale.",
|
|
598
|
+
)
|
|
591
599
|
price: str
|
|
592
600
|
product_id: str = Field(
|
|
593
601
|
alias="productId",
|
|
594
602
|
description="Populated whenever the provider has data for the entity.",
|
|
595
603
|
)
|
|
596
|
-
rating: float
|
|
604
|
+
rating: float | None = Field(
|
|
605
|
+
description="Average review score out of 5, or null when the product has no rating yet."
|
|
606
|
+
)
|
|
597
607
|
review_count: int = Field(alias="reviewCount")
|
|
598
608
|
seller_id: str | None = Field(
|
|
599
609
|
default=None,
|
|
@@ -148,6 +148,8 @@ class YoutubeChannelVideosInput(TypedDict, total=False):
|
|
|
148
148
|
"""Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
|
|
149
149
|
preferLatencyUnderMs: NotRequired[int]
|
|
150
150
|
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
|
|
151
|
+
requireFields: NotRequired[list[Literal["views"]]]
|
|
152
|
+
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `views`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a video that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted. A source that returns only a rounded or shortened value for a field does not count as returning it."""
|
|
151
153
|
sort: NotRequired[Literal["latest", "popular"]]
|
|
152
154
|
"""Sort order."""
|
|
153
155
|
source: NotRequired[list[str]]
|
|
@@ -631,7 +633,9 @@ class YoutubeChannelVideosVideo(BaseModel):
|
|
|
631
633
|
url: str = Field(
|
|
632
634
|
description="Populated whenever the provider has data for the entity."
|
|
633
635
|
)
|
|
634
|
-
views: int
|
|
636
|
+
views: int = Field(
|
|
637
|
+
description="Number of views. Some sources round large counts (6.4M instead of 6,474,059); name `views` in requireFields to be served only by a source that returns the exact count."
|
|
638
|
+
)
|
|
635
639
|
|
|
636
640
|
|
|
637
641
|
class YoutubeCommentRepliesData(BaseModel):
|
|
@@ -933,7 +937,7 @@ class YoutubeSearchShortsShort(BaseModel):
|
|
|
933
937
|
description="Watch URL for the Short. Populated whenever the provider has data for the entity."
|
|
934
938
|
)
|
|
935
939
|
views: int = Field(
|
|
936
|
-
description="View count, or 0 when the source did not publish one. Read viewsAvailable before trusting a 0."
|
|
940
|
+
description="View count, or 0 when the source did not publish one. Read viewsAvailable before trusting a 0. Rounded as YouTube shows it on Shorts (8.9M, 875K), so counts of 1,000 or more are approximate."
|
|
937
941
|
)
|
|
938
942
|
views_available: bool = Field(
|
|
939
943
|
alias="viewsAvailable",
|
|
@@ -973,7 +977,8 @@ class YoutubeTrendingShortsShort(BaseModel):
|
|
|
973
977
|
description="Populated whenever the provider has data for the entity.",
|
|
974
978
|
)
|
|
975
979
|
comments: int | None = Field(
|
|
976
|
-
default=None,
|
|
980
|
+
default=None,
|
|
981
|
+
description="Number of comments on the short. Rounded as YouTube shows it on Shorts (1.2K, 15K), so counts of 1,000 or more are approximate.",
|
|
977
982
|
)
|
|
978
983
|
created_utc: float | None = Field(
|
|
979
984
|
default=None,
|
|
@@ -279,7 +279,7 @@ class ZillowPropertyItem(BaseModel):
|
|
|
279
279
|
rent_zestimate: float | None = Field(
|
|
280
280
|
default=None,
|
|
281
281
|
alias="rentZestimate",
|
|
282
|
-
description="Zillow estimated monthly rent.",
|
|
282
|
+
description="Zillow estimated monthly rent, or null when Zillow shows no rent Zestimate for the property.",
|
|
283
283
|
)
|
|
284
284
|
sqft: float | None = Field(
|
|
285
285
|
default=None, description="Interior living area in square feet."
|
|
@@ -294,7 +294,8 @@ class ZillowPropertyItem(BaseModel):
|
|
|
294
294
|
description="Canonical Zillow property detail page URL. Populated whenever the provider has data for the entity."
|
|
295
295
|
)
|
|
296
296
|
zestimate: float | None = Field(
|
|
297
|
-
default=None,
|
|
297
|
+
default=None,
|
|
298
|
+
description="Zillow estimated market value, or null when Zillow shows no Zestimate for the property.",
|
|
298
299
|
)
|
|
299
300
|
zpid: str = Field(
|
|
300
301
|
description="Zillow property id (zpid), the stable identifier for the property. Populated whenever the provider has data for the entity."
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|