getanyapi 0.95.3__tar.gz → 0.97.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.95.3 → getanyapi-0.97.0}/PKG-INFO +1 -1
- {getanyapi-0.95.3 → getanyapi-0.97.0}/pyproject.toml +1 -1
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/reddit.py +3 -13
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/seo.py +89 -50
- {getanyapi-0.95.3 → getanyapi-0.97.0}/.gitignore +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/README.md +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/amazon.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/appstore.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/booking.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/capterra.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/chatgpt.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/company_identify.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/email.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/facebook.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/g2.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/google.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/google_hotels.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/google_shopping.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/instagram.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/linkedin.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/maps.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/pexels.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/playstore.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/property_records.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/realtor.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/redfin.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/similarweb.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/substack.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/tiktok.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/trustpilot.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/twitter.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/unsplash.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/upwork.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/walmart.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/yelp.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/youtube.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/zhihu.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/platforms/zillow.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/src/getanyapi/types.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/conftest.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_account.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_client.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_envelope.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_errors.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_not_found_reason.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.0}/tests/test_transport.py +0 -0
- {getanyapi-0.95.3 → getanyapi-0.97.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.97.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
|
|
@@ -115,9 +115,7 @@ class RedditSearchInput(TypedDict, total=False):
|
|
|
115
115
|
"""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."""
|
|
116
116
|
query: Required[str]
|
|
117
117
|
"""Free-text search across all of Reddit. Reddit's field operators are supported inside the string: subreddit:<name> to scope to one subreddit, author:<user>, title:<text>, selftext:<text>, self:yes|no, nsfw:yes|no, and boolean AND/OR/NOT. To restrict to a single subreddit you can use subreddit:<name> here, or use the reddit.subreddit_posts SKU for a plain subreddit listing."""
|
|
118
|
-
requireFields: NotRequired[
|
|
119
|
-
list[Literal["authorId", "isArchived", "isLocked", "media", "nsfw"]]
|
|
120
|
-
]
|
|
118
|
+
requireFields: NotRequired[list[Literal["isArchived", "isLocked", "media"]]]
|
|
121
119
|
"""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 `isArchived` or `media`, 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 post 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."""
|
|
122
120
|
sort: NotRequired[Literal["relevance", "hot", "top", "new", "comments"]]
|
|
123
121
|
"""Result sort order."""
|
|
@@ -159,13 +157,7 @@ class RedditSubredditPostsInput(TypedDict, total=False):
|
|
|
159
157
|
"""Page size to ask for (up to 100). Some sources honor it; others always return their whole page of about 25 posts. A page is never trimmed after the call, so pass nextCursor back as cursor to continue exactly where this response ended. Range: 1 to 100. Default: 25."""
|
|
160
158
|
preferLatencyUnderMs: NotRequired[int]
|
|
161
159
|
"""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."""
|
|
162
|
-
requireFields: NotRequired[
|
|
163
|
-
list[
|
|
164
|
-
Literal[
|
|
165
|
-
"authorId", "isArchived", "isLocked", "nsfw", "selftext", "upvoteRatio"
|
|
166
|
-
]
|
|
167
|
-
]
|
|
168
|
-
]
|
|
160
|
+
requireFields: NotRequired[list[Literal["isArchived", "isLocked", "selftext"]]]
|
|
169
161
|
"""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 `isArchived` or `selftext`, 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 post 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."""
|
|
170
162
|
sort: NotRequired[Literal["hot", "new", "top"]]
|
|
171
163
|
"""Listing sort order. Default: hot."""
|
|
@@ -190,9 +182,7 @@ class RedditSubredditSearchInput(TypedDict, total=False):
|
|
|
190
182
|
"""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."""
|
|
191
183
|
query: NotRequired[str]
|
|
192
184
|
"""Optional search query to match posts (e.g. 'push ups')."""
|
|
193
|
-
requireFields: NotRequired[
|
|
194
|
-
list[Literal["authorId", "isArchived", "isLocked", "selftext"]]
|
|
195
|
-
]
|
|
185
|
+
requireFields: NotRequired[list[Literal["isArchived", "isLocked", "selftext"]]]
|
|
196
186
|
"""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 `isArchived` or `selftext`, 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 post 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."""
|
|
197
187
|
sort: NotRequired[Literal["relevance", "hot", "top", "new", "comments"]]
|
|
198
188
|
"""Optional sort order: relevance, hot, top, new, comments."""
|
|
@@ -449,24 +449,40 @@ class SeoLlmTopPagesInput(TypedDict, total=False):
|
|
|
449
449
|
|
|
450
450
|
|
|
451
451
|
class SeoLocalPackInput(TypedDict, total=False):
|
|
452
|
-
"""Input for
|
|
452
|
+
"""Input for Google Local Pack."""
|
|
453
453
|
|
|
454
454
|
allowFallbacks: NotRequired[bool]
|
|
455
455
|
"""Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
|
|
456
456
|
ignoreSources: NotRequired[list[str]]
|
|
457
457
|
"""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."""
|
|
458
458
|
keyword: Required[str]
|
|
459
|
-
"""
|
|
459
|
+
"""Search keyword, for example coffee shop or plumber."""
|
|
460
460
|
language: NotRequired[str]
|
|
461
|
-
"""Language code for
|
|
461
|
+
"""Language code for the search results. Default: en."""
|
|
462
462
|
limit: NotRequired[int]
|
|
463
|
-
"""Maximum number of local pack
|
|
464
|
-
location:
|
|
465
|
-
"""
|
|
466
|
-
locationCoordinate: NotRequired[str]
|
|
467
|
-
"""Precise geo target as latitude,longitude or latitude,longitude,radius (radius in meters); for example, 40.7580,-73.9855 or 40.7580,-73.9855,1000. Supply either location or locationCoordinate, not both."""
|
|
463
|
+
"""Maximum number of local pack businesses to return. Google usually shows three. Billing is flat per request. Range: 1 to 100."""
|
|
464
|
+
location: Required[str]
|
|
465
|
+
"""Location to search from, formatted like City,Region,Country; for example, New York,New York,United States."""
|
|
468
466
|
preferLatencyUnderMs: NotRequired[int]
|
|
469
467
|
"""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."""
|
|
468
|
+
requireFields: NotRequired[
|
|
469
|
+
list[
|
|
470
|
+
Literal[
|
|
471
|
+
"address",
|
|
472
|
+
"bookingUrl",
|
|
473
|
+
"category",
|
|
474
|
+
"cid",
|
|
475
|
+
"description",
|
|
476
|
+
"directionsUrl",
|
|
477
|
+
"hours",
|
|
478
|
+
"image",
|
|
479
|
+
"knowledgeGraphId",
|
|
480
|
+
"priceLevel",
|
|
481
|
+
"rankGroup",
|
|
482
|
+
]
|
|
483
|
+
]
|
|
484
|
+
]
|
|
485
|
+
"""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 `address` or `cid`, 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 business that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
470
486
|
source: NotRequired[list[str]]
|
|
471
487
|
"""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`."""
|
|
472
488
|
|
|
@@ -2991,7 +3007,7 @@ class SeoLlmTopPagesSearchResultDomain(BaseModel):
|
|
|
2991
3007
|
|
|
2992
3008
|
class SeoLocalPackData(BaseModel):
|
|
2993
3009
|
places: list[SeoLocalPackPlace] = Field(
|
|
2994
|
-
description="
|
|
3010
|
+
description="Businesses in the Google local pack, in the order Google shows them. Populated whenever the provider has data for the entity."
|
|
2995
3011
|
)
|
|
2996
3012
|
|
|
2997
3013
|
|
|
@@ -3000,66 +3016,83 @@ class SeoLocalPackPlace(BaseModel):
|
|
|
3000
3016
|
|
|
3001
3017
|
address: str | None = Field(
|
|
3002
3018
|
default=None,
|
|
3003
|
-
description="
|
|
3019
|
+
description="The address line Google shows for the business in the pack. For a business that serves an area rather than a storefront, Google shows years in business and the city here instead.",
|
|
3020
|
+
)
|
|
3021
|
+
booking_url: str | None = Field(
|
|
3022
|
+
default=None,
|
|
3023
|
+
alias="bookingUrl",
|
|
3024
|
+
description="Booking link Google shows for the business, when it has one. The query string carries the booking session, so it is kept.",
|
|
3004
3025
|
)
|
|
3005
|
-
category: str | None = Field(
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
default=None, description="True when the place listing is claimed."
|
|
3026
|
+
category: str | None = Field(
|
|
3027
|
+
default=None,
|
|
3028
|
+
description="Business category Google shows, such as Coffee shop or Plumber.",
|
|
3009
3029
|
)
|
|
3010
|
-
|
|
3011
|
-
default=None,
|
|
3030
|
+
cid: str | None = Field(
|
|
3031
|
+
default=None, description="Google customer id (CID) of the business listing."
|
|
3032
|
+
)
|
|
3033
|
+
description: str | None = Field(
|
|
3034
|
+
default=None,
|
|
3035
|
+
description="The text Google prints under the business name in the pack. Usually it is every line: the street address or years in business, opening hours, and a review quote. On some responses it is only the review quote, with the address and hours in their own fields.",
|
|
3036
|
+
)
|
|
3037
|
+
directions_url: str | None = Field(
|
|
3038
|
+
default=None,
|
|
3039
|
+
alias="directionsUrl",
|
|
3040
|
+
description="Google Maps directions link to the business, with tracking query parameters removed.",
|
|
3012
3041
|
)
|
|
3013
3042
|
domain: str | None = Field(
|
|
3014
|
-
default=None,
|
|
3043
|
+
default=None,
|
|
3044
|
+
description="Host name of the business website, such as www.example.com.",
|
|
3015
3045
|
)
|
|
3016
|
-
|
|
3046
|
+
hours: str | None = Field(
|
|
3017
3047
|
default=None,
|
|
3018
|
-
description="
|
|
3048
|
+
description="Opening hours text Google shows, such as Open 24 hours or Closed - Opens 7 AM.",
|
|
3019
3049
|
)
|
|
3020
|
-
|
|
3021
|
-
default=None, description="
|
|
3050
|
+
image: str | None = Field(
|
|
3051
|
+
default=None, description="Thumbnail photo URL Google shows for the business."
|
|
3022
3052
|
)
|
|
3023
|
-
|
|
3024
|
-
default=None,
|
|
3053
|
+
knowledge_graph_id: str | None = Field(
|
|
3054
|
+
default=None,
|
|
3055
|
+
alias="knowledgeGraphId",
|
|
3056
|
+
description="Google Knowledge Graph id of the business, such as /g/11vb1r7rlr.",
|
|
3025
3057
|
)
|
|
3026
3058
|
name: str = Field(
|
|
3027
|
-
description="
|
|
3059
|
+
description="Business name. Populated whenever the provider has data for the entity."
|
|
3028
3060
|
)
|
|
3029
3061
|
phone: str | None = Field(
|
|
3030
|
-
default=None,
|
|
3031
|
-
|
|
3032
|
-
place_id: str | None = Field(
|
|
3033
|
-
default=None, alias="placeId", description="Place identifier."
|
|
3062
|
+
default=None,
|
|
3063
|
+
description="Business phone number, when Google shows one, as Google prints it: national format such as (512) 890-2933 or international format such as +1 512-890-2933.",
|
|
3034
3064
|
)
|
|
3035
|
-
|
|
3036
|
-
|
|
3065
|
+
position: int = Field(
|
|
3066
|
+
description="One-based position of the business in the local pack, counting only unpaid listings. Populated whenever the provider has data for the entity."
|
|
3037
3067
|
)
|
|
3038
3068
|
price_level: str | None = Field(
|
|
3039
3069
|
default=None,
|
|
3040
3070
|
alias="priceLevel",
|
|
3041
|
-
description="Price
|
|
3071
|
+
description="Price range Google shows for the business, such as $10-20.",
|
|
3042
3072
|
)
|
|
3043
|
-
rank_absolute: int = Field(
|
|
3073
|
+
rank_absolute: int | None = Field(
|
|
3074
|
+
default=None,
|
|
3044
3075
|
alias="rankAbsolute",
|
|
3045
|
-
description="
|
|
3076
|
+
description="Position of the business among every element of the Google results page, counting from the top.",
|
|
3046
3077
|
)
|
|
3047
3078
|
rank_group: int | None = Field(
|
|
3048
3079
|
default=None,
|
|
3049
3080
|
alias="rankGroup",
|
|
3050
|
-
description="
|
|
3081
|
+
description="Position Google gives the business inside the local pack, counting sponsored listings, so it can be higher than position when an ad sits above it.",
|
|
3051
3082
|
)
|
|
3052
3083
|
rating: float | None = Field(
|
|
3053
3084
|
default=None,
|
|
3054
|
-
description="Average star rating out of 5. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
3055
|
-
)
|
|
3056
|
-
region: str | None = Field(
|
|
3057
|
-
default=None, description="State or region the place is in."
|
|
3085
|
+
description="Average Google star rating out of 5. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
3058
3086
|
)
|
|
3059
3087
|
reviews_count: int | None = Field(
|
|
3060
|
-
default=None,
|
|
3088
|
+
default=None,
|
|
3089
|
+
alias="reviewsCount",
|
|
3090
|
+
description="Number of Google reviews behind the rating. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
3091
|
+
)
|
|
3092
|
+
url: str | None = Field(
|
|
3093
|
+
default=None,
|
|
3094
|
+
description="Business website URL, when listed, with tracking query parameters removed.",
|
|
3061
3095
|
)
|
|
3062
|
-
url: str | None = Field(default=None, description="Canonical place URL.")
|
|
3063
3096
|
|
|
3064
3097
|
|
|
3065
3098
|
class SeoRankedKeywordsData(BaseModel):
|
|
@@ -4076,15 +4109,18 @@ class SeoNamespace:
|
|
|
4076
4109
|
options: RequestOptions | None = None,
|
|
4077
4110
|
**input: Unpack[SeoLocalPackInput],
|
|
4078
4111
|
) -> RunResult[SeoLocalPackData]:
|
|
4079
|
-
"""
|
|
4112
|
+
"""Google Local Pack
|
|
4080
4113
|
|
|
4081
|
-
|
|
4082
|
-
|
|
4114
|
+
Get the Google local pack for a keyword in a city: the short list of
|
|
4115
|
+
businesses Google shows in the map box on its normal search results page, in
|
|
4116
|
+
pack order, with rating, review count, address, category, opening hours,
|
|
4117
|
+
phone, website, booking link, and Google listing ids. Sponsored listings are
|
|
4118
|
+
left out. For the full Google Maps results list, use maps.search.
|
|
4083
4119
|
|
|
4084
|
-
Price: $0.
|
|
4120
|
+
Price: $0.0015 per request.
|
|
4085
4121
|
|
|
4086
4122
|
Example:
|
|
4087
|
-
res = client.seo.local_pack(keyword="coffee shop", language="en",
|
|
4123
|
+
res = client.seo.local_pack(keyword="coffee shop", language="en", location="New York,New York,United States")
|
|
4088
4124
|
"""
|
|
4089
4125
|
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
4090
4126
|
"seo.local_pack", dict(input), options
|
|
@@ -4639,15 +4675,18 @@ class AsyncSeoNamespace:
|
|
|
4639
4675
|
options: RequestOptions | None = None,
|
|
4640
4676
|
**input: Unpack[SeoLocalPackInput],
|
|
4641
4677
|
) -> RunResult[SeoLocalPackData]:
|
|
4642
|
-
"""
|
|
4678
|
+
"""Google Local Pack
|
|
4643
4679
|
|
|
4644
|
-
|
|
4645
|
-
|
|
4680
|
+
Get the Google local pack for a keyword in a city: the short list of
|
|
4681
|
+
businesses Google shows in the map box on its normal search results page, in
|
|
4682
|
+
pack order, with rating, review count, address, category, opening hours,
|
|
4683
|
+
phone, website, booking link, and Google listing ids. Sponsored listings are
|
|
4684
|
+
left out. For the full Google Maps results list, use maps.search.
|
|
4646
4685
|
|
|
4647
|
-
Price: $0.
|
|
4686
|
+
Price: $0.0015 per request.
|
|
4648
4687
|
|
|
4649
4688
|
Example:
|
|
4650
|
-
res = client.seo.local_pack(keyword="coffee shop", language="en",
|
|
4689
|
+
res = client.seo.local_pack(keyword="coffee shop", language="en", location="New York,New York,United States")
|
|
4651
4690
|
"""
|
|
4652
4691
|
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
4653
4692
|
"seo.local_pack", dict(input), options
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|