getanyapi 0.93.3__tar.gz → 0.94.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.93.3 → getanyapi-0.94.0}/PKG-INFO +1 -1
- {getanyapi-0.93.3 → getanyapi-0.94.0}/pyproject.toml +1 -1
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/booking.py +2 -2
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/email.py +2 -2
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/google.py +3 -3
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/google_hotels.py +4 -4
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/linkedin.py +2 -2
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/upwork.py +2 -2
- getanyapi-0.94.0/src/getanyapi/platforms/walmart.py +484 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/zhihu.py +7 -26
- getanyapi-0.93.3/src/getanyapi/platforms/walmart.py +0 -169
- {getanyapi-0.93.3 → getanyapi-0.94.0}/.gitignore +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/README.md +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/amazon.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/appstore.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/capterra.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/chatgpt.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/company_identify.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/facebook.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/g2.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/google_shopping.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/instagram.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/maps.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/pexels.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/playstore.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/property_records.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/realtor.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/reddit.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/redfin.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/seo.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/similarweb.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/substack.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/tiktok.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/trustpilot.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/twitter.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/unsplash.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/yelp.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/youtube.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/platforms/zillow.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/src/getanyapi/types.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/conftest.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_account.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_client.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_envelope.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_errors.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_not_found_reason.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.0}/tests/test_transport.py +0 -0
- {getanyapi-0.93.3 → getanyapi-0.94.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.94.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
|
|
@@ -153,7 +153,7 @@ class BookingNamespace:
|
|
|
153
153
|
Price: $0.0022 per request plus $0.00495 per result (maximum $0.102).
|
|
154
154
|
|
|
155
155
|
Example:
|
|
156
|
-
res = client.booking.search(adults=2, checkIn="2026-11-
|
|
156
|
+
res = client.booking.search(adults=2, checkIn="2026-11-07", checkOut="2026-11-09", limit=3, query="New York")
|
|
157
157
|
"""
|
|
158
158
|
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
159
159
|
"booking.search", dict(input), options
|
|
@@ -182,7 +182,7 @@ class AsyncBookingNamespace:
|
|
|
182
182
|
Price: $0.0022 per request plus $0.00495 per result (maximum $0.102).
|
|
183
183
|
|
|
184
184
|
Example:
|
|
185
|
-
res = client.booking.search(adults=2, checkIn="2026-11-
|
|
185
|
+
res = client.booking.search(adults=2, checkIn="2026-11-07", checkOut="2026-11-09", limit=3, query="New York")
|
|
186
186
|
"""
|
|
187
187
|
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
188
188
|
"booking.search", dict(input), options
|
|
@@ -121,7 +121,7 @@ class EmailNamespace:
|
|
|
121
121
|
|
|
122
122
|
Find a person's work email address from their name and company domain.
|
|
123
123
|
|
|
124
|
-
Price: $0.
|
|
124
|
+
Price: $0.0154 per request.
|
|
125
125
|
|
|
126
126
|
Example:
|
|
127
127
|
res = client.email.find(person={"domain": "google.com", "firstName": "Damien", "surname": "Neil"})
|
|
@@ -169,7 +169,7 @@ class AsyncEmailNamespace:
|
|
|
169
169
|
|
|
170
170
|
Find a person's work email address from their name and company domain.
|
|
171
171
|
|
|
172
|
-
Price: $0.
|
|
172
|
+
Price: $0.0154 per request.
|
|
173
173
|
|
|
174
174
|
Example:
|
|
175
175
|
res = client.email.find(person={"domain": "google.com", "firstName": "Damien", "surname": "Neil"})
|
|
@@ -299,7 +299,7 @@ class GoogleAiOverviewData(BaseModel):
|
|
|
299
299
|
description="The same answer in Markdown, preserving the headings and lists Google rendered. Populated whenever the provider has data for the entity.",
|
|
300
300
|
)
|
|
301
301
|
citations: list[GoogleAiOverviewCitation] = Field(
|
|
302
|
-
description="Every source Google listed for this overview, in Google's own order. This is the full list behind the overview, not only the few sources Google renders inline before the list is expanded, so it is routinely longer than what a reader sees at a glance."
|
|
302
|
+
description="Every source Google listed with a usable URL for this overview, in Google's own order. References without a URL are omitted. This is the full list behind the overview, not only the few sources Google renders inline before the list is expanded, so it is routinely longer than what a reader sees at a glance."
|
|
303
303
|
)
|
|
304
304
|
language: str | None = Field(
|
|
305
305
|
default=None,
|
|
@@ -852,7 +852,7 @@ class GoogleNamespace:
|
|
|
852
852
|
further, or use google.search_100 for up to 100 ranked results in one call,
|
|
853
853
|
which is cheaper past roughly 20 results.
|
|
854
854
|
|
|
855
|
-
Price: $0.
|
|
855
|
+
Price: $0.0005 per request.
|
|
856
856
|
|
|
857
857
|
Example:
|
|
858
858
|
res = client.google.search(gl="us", hl="en", limit=10, query="best coffee maker")
|
|
@@ -1141,7 +1141,7 @@ class AsyncGoogleNamespace:
|
|
|
1141
1141
|
further, or use google.search_100 for up to 100 ranked results in one call,
|
|
1142
1142
|
which is cheaper past roughly 20 results.
|
|
1143
1143
|
|
|
1144
|
-
Price: $0.
|
|
1144
|
+
Price: $0.0005 per request.
|
|
1145
1145
|
|
|
1146
1146
|
Example:
|
|
1147
1147
|
res = client.google.search(gl="us", hl="en", limit=10, query="best coffee maker")
|
|
@@ -695,7 +695,7 @@ class GoogleHotelsNamespace:
|
|
|
695
695
|
Price: $0.0015 per request.
|
|
696
696
|
|
|
697
697
|
Example:
|
|
698
|
-
res = client.google_hotels.details(checkIn="2026-11-
|
|
698
|
+
res = client.google_hotels.details(checkIn="2026-11-07", checkOut="2026-11-09", country="us", propertyToken="ChcImaG28Zbom8uuARoKL20vMDNncTd2NBAB")
|
|
699
699
|
"""
|
|
700
700
|
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
701
701
|
"google_hotels.details", dict(input), options
|
|
@@ -717,7 +717,7 @@ class GoogleHotelsNamespace:
|
|
|
717
717
|
Price: $0.0015 per request.
|
|
718
718
|
|
|
719
719
|
Example:
|
|
720
|
-
res = client.google_hotels.search(checkIn="2026-11-
|
|
720
|
+
res = client.google_hotels.search(checkIn="2026-11-07", checkOut="2026-11-09", country="us", query="hotels near times square new york")
|
|
721
721
|
"""
|
|
722
722
|
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
723
723
|
"google_hotels.search", dict(input), options
|
|
@@ -746,7 +746,7 @@ class AsyncGoogleHotelsNamespace:
|
|
|
746
746
|
Price: $0.0015 per request.
|
|
747
747
|
|
|
748
748
|
Example:
|
|
749
|
-
res = client.google_hotels.details(checkIn="2026-11-
|
|
749
|
+
res = client.google_hotels.details(checkIn="2026-11-07", checkOut="2026-11-09", country="us", propertyToken="ChcImaG28Zbom8uuARoKL20vMDNncTd2NBAB")
|
|
750
750
|
"""
|
|
751
751
|
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
752
752
|
"google_hotels.details", dict(input), options
|
|
@@ -768,7 +768,7 @@ class AsyncGoogleHotelsNamespace:
|
|
|
768
768
|
Price: $0.0015 per request.
|
|
769
769
|
|
|
770
770
|
Example:
|
|
771
|
-
res = client.google_hotels.search(checkIn="2026-11-
|
|
771
|
+
res = client.google_hotels.search(checkIn="2026-11-07", checkOut="2026-11-09", country="us", query="hotels near times square new york")
|
|
772
772
|
"""
|
|
773
773
|
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
774
774
|
"google_hotels.search", dict(input), options
|
|
@@ -65,7 +65,7 @@ class LinkedinAdsSearchInput(TypedDict, total=False):
|
|
|
65
65
|
countries: NotRequired[str]
|
|
66
66
|
"""Comma-separated two-letter country codes (e.g. "US,CA,MX")."""
|
|
67
67
|
endDate: NotRequired[str]
|
|
68
|
-
"""Search end date in YYYY-MM-DD format."""
|
|
68
|
+
"""Search end date in YYYY-MM-DD format. Today or a later date is moved back to yesterday in UTC when your range overlaps LinkedIn's accepted dates."""
|
|
69
69
|
ignoreSources: NotRequired[list[str]]
|
|
70
70
|
"""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."""
|
|
71
71
|
keyword: NotRequired[str]
|
|
@@ -77,7 +77,7 @@ class LinkedinAdsSearchInput(TypedDict, total=False):
|
|
|
77
77
|
source: NotRequired[list[str]]
|
|
78
78
|
"""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`."""
|
|
79
79
|
startDate: NotRequired[str]
|
|
80
|
-
"""Search start date in YYYY-MM-DD format."""
|
|
80
|
+
"""Search start date in YYYY-MM-DD format. An earlier date is moved up to one year ago in UTC when your range overlaps LinkedIn's accepted dates."""
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
class LinkedinArticleInput(TypedDict, total=False):
|
|
@@ -149,7 +149,7 @@ class UpworkNamespace:
|
|
|
149
149
|
Search Upwork job postings by keyword, with up to 25 fresh listings per
|
|
150
150
|
request.
|
|
151
151
|
|
|
152
|
-
Price: $0.
|
|
152
|
+
Price: $0.0011 per request plus $0.0011 per result (maximum $0.0286).
|
|
153
153
|
|
|
154
154
|
Example:
|
|
155
155
|
res = client.upwork.jobs(jobType="fixed", limit=10, query="web developer")
|
|
@@ -174,7 +174,7 @@ class AsyncUpworkNamespace:
|
|
|
174
174
|
Search Upwork job postings by keyword, with up to 25 fresh listings per
|
|
175
175
|
request.
|
|
176
176
|
|
|
177
|
-
Price: $0.
|
|
177
|
+
Price: $0.0011 per request plus $0.0011 per result (maximum $0.0286).
|
|
178
178
|
|
|
179
179
|
Example:
|
|
180
180
|
res = client.upwork.jobs(jobType="fixed", limit=10, query="web developer")
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
# Generated - do not edit. Regenerate with: pnpm generate
|
|
2
|
+
"""Generated namespace module for the walmart platform."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from typing import Literal, TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
9
|
+
from typing_extensions import NotRequired, Required, TypedDict, Unpack
|
|
10
|
+
|
|
11
|
+
from ..types import RequestOptions, RunResult
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from .._async_client import AsyncAnyAPI
|
|
15
|
+
from .._client import AnyAPI
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class WalmartProductInput(TypedDict, total=False):
|
|
19
|
+
"""Input for Walmart Product."""
|
|
20
|
+
|
|
21
|
+
allowFallbacks: NotRequired[bool]
|
|
22
|
+
"""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."""
|
|
23
|
+
ignoreSources: NotRequired[list[str]]
|
|
24
|
+
"""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."""
|
|
25
|
+
preferLatencyUnderMs: NotRequired[int]
|
|
26
|
+
"""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."""
|
|
27
|
+
requireFields: NotRequired[list[Literal["productId"]]]
|
|
28
|
+
"""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 `productId`, 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 product that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
29
|
+
source: NotRequired[list[str]]
|
|
30
|
+
"""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`."""
|
|
31
|
+
url: Required[str]
|
|
32
|
+
"""Walmart product page URL."""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class WalmartReviewsInput(TypedDict, total=False):
|
|
36
|
+
"""Input for Walmart Reviews."""
|
|
37
|
+
|
|
38
|
+
allowFallbacks: NotRequired[bool]
|
|
39
|
+
"""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."""
|
|
40
|
+
ignoreSources: NotRequired[list[str]]
|
|
41
|
+
"""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."""
|
|
42
|
+
page: NotRequired[int]
|
|
43
|
+
"""1-based page of 10 reviews, Walmart's fixed page size; Walmart serves at most 100 pages. Each page is billed as one request; keep url and sort the same while walking pages. Range: 1 to 100. Default: 1."""
|
|
44
|
+
preferLatencyUnderMs: NotRequired[int]
|
|
45
|
+
"""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."""
|
|
46
|
+
requireFields: NotRequired[list[Literal["totalPages"]]]
|
|
47
|
+
"""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 `totalPages`, 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. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
48
|
+
sort: NotRequired[
|
|
49
|
+
Literal["recent", "oldest", "relevancy", "helpful", "rating_high", "rating_low"]
|
|
50
|
+
]
|
|
51
|
+
"""Review order: recent (newest first, the default), oldest, relevancy, helpful, rating_high, or rating_low (e.g. helpful). Default: recent."""
|
|
52
|
+
source: NotRequired[list[str]]
|
|
53
|
+
"""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`."""
|
|
54
|
+
url: Required[str]
|
|
55
|
+
"""Walmart product page URL (e.g. https://www.walmart.com/ip/Apple-AirPods-Pro-2/5689919121)."""
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class WalmartSearchInput(TypedDict, total=False):
|
|
59
|
+
"""Input for Walmart Search."""
|
|
60
|
+
|
|
61
|
+
allowFallbacks: NotRequired[bool]
|
|
62
|
+
"""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."""
|
|
63
|
+
facet: NotRequired[str]
|
|
64
|
+
"""Optional Walmart facet filter token, e.g. brand:HP to keep only HP products."""
|
|
65
|
+
ignoreSources: NotRequired[list[str]]
|
|
66
|
+
"""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."""
|
|
67
|
+
maxPrice: NotRequired[float]
|
|
68
|
+
"""Optional maximum product price in USD. Minimum: 0."""
|
|
69
|
+
minPrice: NotRequired[float]
|
|
70
|
+
"""Optional minimum product price in USD. Minimum: 0."""
|
|
71
|
+
page: NotRequired[int]
|
|
72
|
+
"""1-based results page of about 40 to 60 products; Walmart serves no products past page 10. Each page is billed as one request. Walmart re-ranks between requests, so consecutive pages can repeat a product: deduplicate on itemId. Range: 1 to 10. Default: 1."""
|
|
73
|
+
preferLatencyUnderMs: NotRequired[int]
|
|
74
|
+
"""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."""
|
|
75
|
+
query: Required[str]
|
|
76
|
+
"""Search keywords, e.g. "airpods" or "paper towels"."""
|
|
77
|
+
requireFields: NotRequired[list[Literal["totalPages"]]]
|
|
78
|
+
"""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 `totalPages`, 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. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
79
|
+
sort: NotRequired[
|
|
80
|
+
Literal[
|
|
81
|
+
"best_match", "best_seller", "price_low", "price_high", "rating_high", "new"
|
|
82
|
+
]
|
|
83
|
+
]
|
|
84
|
+
"""Result sort order; omit for Walmart's Best Match (e.g. price_low sorts by lowest price first)."""
|
|
85
|
+
source: NotRequired[list[str]]
|
|
86
|
+
"""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`."""
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class WalmartProductData(BaseModel):
|
|
90
|
+
items: list[WalmartProductItem] = Field(
|
|
91
|
+
description="Product detail records (one per requested product URL). Populated whenever the provider has data for the entity."
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class WalmartProductItem(BaseModel):
|
|
96
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
97
|
+
|
|
98
|
+
availability: str | None = Field(
|
|
99
|
+
default=None, description='Stock status, e.g. "IN_STOCK".'
|
|
100
|
+
)
|
|
101
|
+
brand: str | None = Field(
|
|
102
|
+
default=None, description="Brand name; empty when not reported."
|
|
103
|
+
)
|
|
104
|
+
description: str | None = Field(
|
|
105
|
+
default=None,
|
|
106
|
+
description="Short product description; empty when the listing has none.",
|
|
107
|
+
)
|
|
108
|
+
image: str | None = Field(
|
|
109
|
+
default=None,
|
|
110
|
+
description="Primary product image URL. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
111
|
+
)
|
|
112
|
+
images: list[str] | None = Field(
|
|
113
|
+
default=None, description="All product image URLs."
|
|
114
|
+
)
|
|
115
|
+
item_id: str | None = Field(
|
|
116
|
+
default=None,
|
|
117
|
+
alias="itemId",
|
|
118
|
+
description="Walmart US item id (usItemId). Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
119
|
+
)
|
|
120
|
+
model: str | None = Field(
|
|
121
|
+
default=None, description="Manufacturer model number; empty when not reported."
|
|
122
|
+
)
|
|
123
|
+
order_limit: int | None = Field(
|
|
124
|
+
default=None,
|
|
125
|
+
alias="orderLimit",
|
|
126
|
+
description="Maximum units of this item one order may contain.",
|
|
127
|
+
)
|
|
128
|
+
price_text: str | None = Field(
|
|
129
|
+
default=None,
|
|
130
|
+
alias="priceText",
|
|
131
|
+
description='Current price as displayed, e.g. "$125.00"; empty when unavailable (Walmart returns a formatted string, not a numeric value).',
|
|
132
|
+
)
|
|
133
|
+
product_id: str | None = Field(
|
|
134
|
+
default=None, alias="productId", description="Walmart internal product id."
|
|
135
|
+
)
|
|
136
|
+
rating: float | None = Field(
|
|
137
|
+
default=None, description="Average customer rating, 0-5; 0 when unrated."
|
|
138
|
+
)
|
|
139
|
+
return_window: int | None = Field(
|
|
140
|
+
default=None,
|
|
141
|
+
alias="returnWindow",
|
|
142
|
+
description="Days the buyer has to return the item.",
|
|
143
|
+
)
|
|
144
|
+
reviews_count: int | None = Field(
|
|
145
|
+
default=None,
|
|
146
|
+
alias="reviewsCount",
|
|
147
|
+
description="Number of customer reviews; 0 when none.",
|
|
148
|
+
)
|
|
149
|
+
seller_id: str | None = Field(
|
|
150
|
+
default=None,
|
|
151
|
+
alias="sellerId",
|
|
152
|
+
description="Identifier of the seller fulfilling the offer.",
|
|
153
|
+
)
|
|
154
|
+
seller_name: str | None = Field(
|
|
155
|
+
default=None,
|
|
156
|
+
alias="sellerName",
|
|
157
|
+
description="Name of the seller fulfilling the offer.",
|
|
158
|
+
)
|
|
159
|
+
title: str = Field(
|
|
160
|
+
description="Product title. Populated whenever the provider has data for the entity."
|
|
161
|
+
)
|
|
162
|
+
upc: str | None = Field(
|
|
163
|
+
default=None, description="Universal Product Code; empty when not reported."
|
|
164
|
+
)
|
|
165
|
+
url: str = Field(
|
|
166
|
+
description="Canonical Walmart product page URL (condition query param retained, as it selects the offer). Populated whenever the provider has data for the entity."
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
class WalmartReviewsData(BaseModel):
|
|
171
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
172
|
+
|
|
173
|
+
items: list[WalmartReviewsItem] = Field(
|
|
174
|
+
description="Customer review records for the requested page. Populated whenever the provider has data for the entity."
|
|
175
|
+
)
|
|
176
|
+
rating: float | None = Field(
|
|
177
|
+
default=None,
|
|
178
|
+
description="Overall product score (1-5), or null when the serving source does not report it.",
|
|
179
|
+
)
|
|
180
|
+
rating_distribution: WalmartReviewsRatingDistribution | None = Field(
|
|
181
|
+
default=None,
|
|
182
|
+
alias="ratingDistribution",
|
|
183
|
+
description='Number of reviews at each star rating, keyed "1" through "5".',
|
|
184
|
+
)
|
|
185
|
+
total_pages: int | None = Field(
|
|
186
|
+
default=None,
|
|
187
|
+
alias="totalPages",
|
|
188
|
+
description="Number of 10-review pages Walmart reports for the product (it can exceed the 100 pages this SKU serves), or absent or null when the serving source does not report it.",
|
|
189
|
+
)
|
|
190
|
+
total_reviews: int | None = Field(
|
|
191
|
+
default=None,
|
|
192
|
+
alias="totalReviews",
|
|
193
|
+
description="Total number of reviews for the product, or null when the serving source does not report it.",
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class WalmartReviewsItem(BaseModel):
|
|
198
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
199
|
+
|
|
200
|
+
created_utc: float | None = Field(
|
|
201
|
+
default=None,
|
|
202
|
+
alias="createdUtc",
|
|
203
|
+
description="UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Walmart publishes the review date only, so this is midnight UTC of that date; null when not reported. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
204
|
+
)
|
|
205
|
+
helpful_votes: int | None = Field(
|
|
206
|
+
default=None,
|
|
207
|
+
alias="helpfulVotes",
|
|
208
|
+
description='Number of "helpful" votes the review received, or null when not reported.',
|
|
209
|
+
)
|
|
210
|
+
rating: float = Field(description="Star rating the reviewer gave, 1-5.")
|
|
211
|
+
review_id: str = Field(
|
|
212
|
+
alias="reviewId",
|
|
213
|
+
description="Walmart review id; use it to deduplicate across pages. Populated whenever the provider has data for the entity.",
|
|
214
|
+
)
|
|
215
|
+
reviewer: str | None = Field(
|
|
216
|
+
default=None,
|
|
217
|
+
description='Reviewer display name as Walmart shows it, e.g. "anonymous"; empty when withheld.',
|
|
218
|
+
)
|
|
219
|
+
text: str = Field(
|
|
220
|
+
description="Full review body text. Populated whenever the provider has data for the entity."
|
|
221
|
+
)
|
|
222
|
+
title: str | None = Field(
|
|
223
|
+
default=None, description="Review headline; empty when the review has none."
|
|
224
|
+
)
|
|
225
|
+
verified_purchase: bool | None = Field(
|
|
226
|
+
default=None,
|
|
227
|
+
alias="verifiedPurchase",
|
|
228
|
+
description="True when Walmart marks the review a verified purchase; null when the serving source reports no badge either way.",
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class WalmartReviewsRatingDistribution(BaseModel):
|
|
233
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
234
|
+
|
|
235
|
+
field_1: int | None = Field(
|
|
236
|
+
default=None, alias="1", description="Number of 1-star reviews."
|
|
237
|
+
)
|
|
238
|
+
field_2: int | None = Field(
|
|
239
|
+
default=None, alias="2", description="Number of 2-star reviews."
|
|
240
|
+
)
|
|
241
|
+
field_3: int | None = Field(
|
|
242
|
+
default=None, alias="3", description="Number of 3-star reviews."
|
|
243
|
+
)
|
|
244
|
+
field_4: int | None = Field(
|
|
245
|
+
default=None, alias="4", description="Number of 4-star reviews."
|
|
246
|
+
)
|
|
247
|
+
field_5: int | None = Field(
|
|
248
|
+
default=None, alias="5", description="Number of 5-star reviews."
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
class WalmartSearchData(BaseModel):
|
|
253
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
254
|
+
|
|
255
|
+
items: list[WalmartSearchItem] = Field(
|
|
256
|
+
description="Matching Walmart product records for the requested page. Populated whenever the provider has data for the entity."
|
|
257
|
+
)
|
|
258
|
+
total_pages: int | None = Field(
|
|
259
|
+
default=None,
|
|
260
|
+
alias="totalPages",
|
|
261
|
+
description="Highest page number available for the query; request pages 1 through this value. Absent or null when the serving source does not report it.",
|
|
262
|
+
)
|
|
263
|
+
total_results: int | None = Field(
|
|
264
|
+
default=None,
|
|
265
|
+
alias="totalResults",
|
|
266
|
+
description="Total number of matching products Walmart reports for the query, or null when not reported.",
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class WalmartSearchItem(BaseModel):
|
|
271
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
272
|
+
|
|
273
|
+
availability: str | None = Field(
|
|
274
|
+
default=None,
|
|
275
|
+
description='Stock status as Walmart reports it, e.g. "IN_STOCK" or "OUT_OF_STOCK".',
|
|
276
|
+
)
|
|
277
|
+
brand: str | None = Field(
|
|
278
|
+
default=None,
|
|
279
|
+
description="Brand name, or null when Walmart omits it from the search grid (it publishes brand on clothing-style grids and on no row elsewhere; the Walmart Product SKU always carries it).",
|
|
280
|
+
)
|
|
281
|
+
currency: str | None = Field(
|
|
282
|
+
default=None,
|
|
283
|
+
description='Price currency code, e.g. "USD"; empty when no price is shown.',
|
|
284
|
+
)
|
|
285
|
+
image: str | None = Field(
|
|
286
|
+
default=None,
|
|
287
|
+
description="Primary product image URL. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
288
|
+
)
|
|
289
|
+
in_stock: bool | None = Field(
|
|
290
|
+
default=None,
|
|
291
|
+
alias="inStock",
|
|
292
|
+
description="True when the product is in stock, false when it is not, or null when not reported.",
|
|
293
|
+
)
|
|
294
|
+
is_sponsored: bool | None = Field(
|
|
295
|
+
default=None,
|
|
296
|
+
alias="isSponsored",
|
|
297
|
+
description="True when the result is a sponsored placement.",
|
|
298
|
+
)
|
|
299
|
+
item_id: str = Field(
|
|
300
|
+
alias="itemId",
|
|
301
|
+
description="Walmart US item id (usItemId), the number in a walmart.com/ip/ URL; use the product URL with the Walmart Product or Walmart Reviews SKU. Populated whenever the provider has data for the entity.",
|
|
302
|
+
)
|
|
303
|
+
list_price: float | None = Field(
|
|
304
|
+
default=None,
|
|
305
|
+
alias="listPrice",
|
|
306
|
+
description='Pre-discount "was" price when the product is on sale, or null when it is not discounted.',
|
|
307
|
+
)
|
|
308
|
+
position: int | None = Field(
|
|
309
|
+
default=None, description="1-based position of the result in this page."
|
|
310
|
+
)
|
|
311
|
+
price: float | None = Field(
|
|
312
|
+
default=None,
|
|
313
|
+
description="Current price in USD as a number, or null when the result shows no current price. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
314
|
+
)
|
|
315
|
+
rating: float | None = Field(
|
|
316
|
+
default=None,
|
|
317
|
+
description="Average customer rating, 0-5, or null when the product is unrated.",
|
|
318
|
+
)
|
|
319
|
+
reviews_count: int | None = Field(
|
|
320
|
+
default=None,
|
|
321
|
+
alias="reviewsCount",
|
|
322
|
+
description="Number of customer ratings, or null when the product has none.",
|
|
323
|
+
)
|
|
324
|
+
seller_id: str | None = Field(
|
|
325
|
+
default=None,
|
|
326
|
+
alias="sellerId",
|
|
327
|
+
description="Identifier of the seller fulfilling the shown offer.",
|
|
328
|
+
)
|
|
329
|
+
seller_name: str | None = Field(
|
|
330
|
+
default=None,
|
|
331
|
+
alias="sellerName",
|
|
332
|
+
description="Name of the seller fulfilling the shown offer.",
|
|
333
|
+
)
|
|
334
|
+
title: str = Field(
|
|
335
|
+
description="Product title. Populated whenever the provider has data for the entity."
|
|
336
|
+
)
|
|
337
|
+
url: str | None = Field(
|
|
338
|
+
default=None,
|
|
339
|
+
description="Walmart product page URL with tracking query parameters removed. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
class WalmartNamespace:
|
|
344
|
+
"""Typed methods for this platform. Attached lazily to the client."""
|
|
345
|
+
|
|
346
|
+
def __init__(self, client: "AnyAPI") -> None:
|
|
347
|
+
self._client = client
|
|
348
|
+
|
|
349
|
+
def product(
|
|
350
|
+
self,
|
|
351
|
+
*,
|
|
352
|
+
options: RequestOptions | None = None,
|
|
353
|
+
**input: Unpack[WalmartProductInput],
|
|
354
|
+
) -> RunResult[WalmartProductData]:
|
|
355
|
+
"""Walmart Product
|
|
356
|
+
|
|
357
|
+
Fetch a Walmart product page by URL and get full product details (title,
|
|
358
|
+
price, availability, ratings, images, and specs) in one normalized response.
|
|
359
|
+
|
|
360
|
+
Price: $0.001 per request.
|
|
361
|
+
|
|
362
|
+
Example:
|
|
363
|
+
res = client.walmart.product(url="https://www.walmart.com/ip/Apple-AirPods-Pro-2/5689919121")
|
|
364
|
+
"""
|
|
365
|
+
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
366
|
+
"walmart.product", dict(input), options
|
|
367
|
+
)
|
|
368
|
+
return RunResult[WalmartProductData].model_validate(raw)
|
|
369
|
+
|
|
370
|
+
def reviews(
|
|
371
|
+
self,
|
|
372
|
+
*,
|
|
373
|
+
options: RequestOptions | None = None,
|
|
374
|
+
**input: Unpack[WalmartReviewsInput],
|
|
375
|
+
) -> RunResult[WalmartReviewsData]:
|
|
376
|
+
"""Walmart Reviews
|
|
377
|
+
|
|
378
|
+
Pull a page of 10 customer reviews for any Walmart product by URL, newest
|
|
379
|
+
first or by relevance, helpfulness, or rating: rating, title, text, date,
|
|
380
|
+
reviewer, and verified-purchase badge.
|
|
381
|
+
|
|
382
|
+
Price: $0.00125 per request.
|
|
383
|
+
|
|
384
|
+
Example:
|
|
385
|
+
res = client.walmart.reviews(url="https://www.walmart.com/ip/Apple-AirPods-Pro-2/5689919121")
|
|
386
|
+
"""
|
|
387
|
+
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
388
|
+
"walmart.reviews", dict(input), options
|
|
389
|
+
)
|
|
390
|
+
return RunResult[WalmartReviewsData].model_validate(raw)
|
|
391
|
+
|
|
392
|
+
def search(
|
|
393
|
+
self,
|
|
394
|
+
*,
|
|
395
|
+
options: RequestOptions | None = None,
|
|
396
|
+
**input: Unpack[WalmartSearchInput],
|
|
397
|
+
) -> RunResult[WalmartSearchData]:
|
|
398
|
+
"""Walmart Search
|
|
399
|
+
|
|
400
|
+
Search Walmart by keyword with optional sort, price-range, facet, and page
|
|
401
|
+
filters and get title, price, rating, seller, and availability for each
|
|
402
|
+
product in one normalized response.
|
|
403
|
+
|
|
404
|
+
Price: $0.0009 per request.
|
|
405
|
+
|
|
406
|
+
Example:
|
|
407
|
+
res = client.walmart.search(query="airpods", sort="best_seller")
|
|
408
|
+
"""
|
|
409
|
+
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
410
|
+
"walmart.search", dict(input), options
|
|
411
|
+
)
|
|
412
|
+
return RunResult[WalmartSearchData].model_validate(raw)
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
class AsyncWalmartNamespace:
|
|
416
|
+
"""Typed methods for this platform. Attached lazily to the client."""
|
|
417
|
+
|
|
418
|
+
def __init__(self, client: "AsyncAnyAPI") -> None:
|
|
419
|
+
self._client = client
|
|
420
|
+
|
|
421
|
+
async def product(
|
|
422
|
+
self,
|
|
423
|
+
*,
|
|
424
|
+
options: RequestOptions | None = None,
|
|
425
|
+
**input: Unpack[WalmartProductInput],
|
|
426
|
+
) -> RunResult[WalmartProductData]:
|
|
427
|
+
"""Walmart Product
|
|
428
|
+
|
|
429
|
+
Fetch a Walmart product page by URL and get full product details (title,
|
|
430
|
+
price, availability, ratings, images, and specs) in one normalized response.
|
|
431
|
+
|
|
432
|
+
Price: $0.001 per request.
|
|
433
|
+
|
|
434
|
+
Example:
|
|
435
|
+
res = client.walmart.product(url="https://www.walmart.com/ip/Apple-AirPods-Pro-2/5689919121")
|
|
436
|
+
"""
|
|
437
|
+
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
438
|
+
"walmart.product", dict(input), options
|
|
439
|
+
)
|
|
440
|
+
return RunResult[WalmartProductData].model_validate(raw)
|
|
441
|
+
|
|
442
|
+
async def reviews(
|
|
443
|
+
self,
|
|
444
|
+
*,
|
|
445
|
+
options: RequestOptions | None = None,
|
|
446
|
+
**input: Unpack[WalmartReviewsInput],
|
|
447
|
+
) -> RunResult[WalmartReviewsData]:
|
|
448
|
+
"""Walmart Reviews
|
|
449
|
+
|
|
450
|
+
Pull a page of 10 customer reviews for any Walmart product by URL, newest
|
|
451
|
+
first or by relevance, helpfulness, or rating: rating, title, text, date,
|
|
452
|
+
reviewer, and verified-purchase badge.
|
|
453
|
+
|
|
454
|
+
Price: $0.00125 per request.
|
|
455
|
+
|
|
456
|
+
Example:
|
|
457
|
+
res = client.walmart.reviews(url="https://www.walmart.com/ip/Apple-AirPods-Pro-2/5689919121")
|
|
458
|
+
"""
|
|
459
|
+
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
460
|
+
"walmart.reviews", dict(input), options
|
|
461
|
+
)
|
|
462
|
+
return RunResult[WalmartReviewsData].model_validate(raw)
|
|
463
|
+
|
|
464
|
+
async def search(
|
|
465
|
+
self,
|
|
466
|
+
*,
|
|
467
|
+
options: RequestOptions | None = None,
|
|
468
|
+
**input: Unpack[WalmartSearchInput],
|
|
469
|
+
) -> RunResult[WalmartSearchData]:
|
|
470
|
+
"""Walmart Search
|
|
471
|
+
|
|
472
|
+
Search Walmart by keyword with optional sort, price-range, facet, and page
|
|
473
|
+
filters and get title, price, rating, seller, and availability for each
|
|
474
|
+
product in one normalized response.
|
|
475
|
+
|
|
476
|
+
Price: $0.0009 per request.
|
|
477
|
+
|
|
478
|
+
Example:
|
|
479
|
+
res = client.walmart.search(query="airpods", sort="best_seller")
|
|
480
|
+
"""
|
|
481
|
+
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
482
|
+
"walmart.search", dict(input), options
|
|
483
|
+
)
|
|
484
|
+
return RunResult[WalmartSearchData].model_validate(raw)
|