scavio 0.20.1 → 0.21.1
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.
- package/README.md +84 -40
- package/dist/index.cjs +75 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +164 -2
- package/dist/index.d.ts +164 -2
- package/dist/index.js +74 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# Scavio
|
|
2
2
|
|
|
3
|
-
TypeScript SDK for the [Scavio API](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — real-time web
|
|
4
|
-
|
|
3
|
+
TypeScript SDK for the [Scavio API](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — real-time structured web
|
|
4
|
+
data across 36 platforms on one API key, plus `extract()` to read
|
|
5
5
|
any URL as clean Markdown.
|
|
6
6
|
|
|
7
|
-
Structured JSON in, structured JSON out. No
|
|
8
|
-
per-site parsers to maintain.
|
|
7
|
+
Structured JSON in, structured JSON out. No per-site parsers to maintain.
|
|
9
8
|
|
|
10
9
|
- **Search and SERP** — Google (organic, news, maps, shopping, flights, hotels, trends, AI Mode)
|
|
11
|
-
- **E-commerce** — Amazon, Walmart, Costco, eBay, Target, Home Depot, TikTok Shop
|
|
10
|
+
- **E-commerce** — Amazon, Walmart, Costco, Mercado Libre, eBay, Target, Home Depot, TikTok Shop
|
|
12
11
|
- **Real estate and travel** — Zillow, Redfin, Realtor.com, Rightmove, Booking, Airbnb, Tripadvisor
|
|
13
12
|
- **Reviews and local** — Trustpilot, Yelp, G2, Capterra, Glassdoor, App Store, Google Play
|
|
14
13
|
- **Jobs and companies** — Indeed, Glassdoor, SEC EDGAR, Companies House
|
|
@@ -93,11 +92,11 @@ Credits depend on `mode`, not on a flat per-call price: `normal` costs 1,
|
|
|
93
92
|
`advanced` costs 1, `ultra` costs 2. Billing happens only on a successful
|
|
94
93
|
extraction — a dead link, bot wall or timeout costs nothing.
|
|
95
94
|
|
|
96
|
-
- `normal` is
|
|
97
|
-
- `advanced` renders the page
|
|
98
|
-
|
|
99
|
-
- `ultra`
|
|
100
|
-
|
|
95
|
+
- `normal` is the default. Start here.
|
|
96
|
+
- `advanced` renders the page's JavaScript. Use it when the content is built
|
|
97
|
+
client-side.
|
|
98
|
+
- `ultra` is the hardest-page tier. Use it only when a page blocks the other
|
|
99
|
+
two.
|
|
101
100
|
|
|
102
101
|
`html` is the raw page. `markdown` is a readability extraction with the
|
|
103
102
|
boilerplate stripped. `text` is that markdown flattened to plain text. URLs are
|
|
@@ -169,8 +168,8 @@ silently does nothing.
|
|
|
169
168
|
|
|
170
169
|
#### Amazon changed in 0.12.0 (breaking)
|
|
171
170
|
|
|
172
|
-
Amazon
|
|
173
|
-
|
|
171
|
+
The Amazon API now returns a normalized shape instead of the previous raw
|
|
172
|
+
payload.
|
|
174
173
|
|
|
175
174
|
- `search` returns `{query, page, total_results, total_results_text, count, products[], filters[], related_searches[]}`.
|
|
176
175
|
Each product is `{asin, title, url, image, price, currency, rating, reviews_count, is_sponsored, position, badge, sales_volume, delivery{is_free, date, fastest_date}}`.
|
|
@@ -308,6 +307,53 @@ warehouses on us and 2 per warehouse on ca). The clearance price codes are the
|
|
|
308
307
|
member-community decode of Costco shelf prices; Costco does not publish them,
|
|
309
308
|
and only items Costco lists online are covered.
|
|
310
309
|
|
|
310
|
+
### [Mercado Libre](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme)
|
|
311
|
+
|
|
312
|
+
Five endpoints, new in 0.21.0: `reviews` costs 1 credit, the other four 2. The
|
|
313
|
+
`best-sellers` endpoint is `bestSellers()`. Mexico (`mx`), Brazil (`br`,
|
|
314
|
+
Mercado Livre), Argentina (`ar`) and Colombia (`co`); prices come back in MXN,
|
|
315
|
+
BRL, ARS or COP. Chile is not supported. Docs: [search](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [product](https://scavio.dev/docs/mercadolibre-product?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [reviews](https://scavio.dev/docs/mercadolibre-reviews?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [questions](https://scavio.dev/docs/mercadolibre-questions?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [best sellers](https://scavio.dev/docs/mercadolibre-best-sellers?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme); overview at the [Mercado Libre API](https://scavio.dev/mercadolibre-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) page.
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
// Keyword search: about 48 rows per page, up to 42 pages.
|
|
319
|
+
const found = await client.mercadolibre.search({
|
|
320
|
+
country: "mx",
|
|
321
|
+
query: "iphone 15",
|
|
322
|
+
condition: "new",
|
|
323
|
+
free_shipping: true,
|
|
324
|
+
sort: "price_asc", // relevance (default), price_asc or price_desc
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
// A seller's catalogue: by numeric seller_id (filters and paging work), or by
|
|
328
|
+
// nickname (first page, unfiltered, plus the seller_id).
|
|
329
|
+
await client.mercadolibre.search({ country: "mx", seller_id: "527927603", min_discount: 20 });
|
|
330
|
+
await client.mercadolibre.search({ country: "mx", seller_nickname: "MERCADOLIBRE ELECTRONICA_MX" });
|
|
331
|
+
|
|
332
|
+
// One product or listing: buy-box seller with reputation, variations, star
|
|
333
|
+
// distribution, specs. Exactly one of url, product_id or item_id.
|
|
334
|
+
await client.mercadolibre.product({ product_id: "MLM1027172667" });
|
|
335
|
+
|
|
336
|
+
// Reviews, 15 per page, optionally by star rating (1 credit).
|
|
337
|
+
await client.mercadolibre.reviews({ product_id: "MLM1027172667", rating: 1 });
|
|
338
|
+
|
|
339
|
+
// Buyer questions with the seller's answers; page with next_offset.
|
|
340
|
+
await client.mercadolibre.questions({ item_id: "MLM3571336480" });
|
|
341
|
+
|
|
342
|
+
// Top 20 best sellers in a category (mx, ar or co; not Brazil).
|
|
343
|
+
await client.mercadolibre.bestSellers({ country: "mx", category_id: "MLM1055" });
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
A query reaches about 2,000 results (42 pages of 48), so slice by price range,
|
|
347
|
+
condition or seller to go further. Units sold are lower bounds
|
|
348
|
+
(`sold_quantity_min`, e.g. "+1000 vendidos"), not exact counts, and sort is
|
|
349
|
+
relevance or price only. Mercado Libre may narrow a query to a category, brand
|
|
350
|
+
or line on its own, and Brazil and Argentina may auto-apply a "new" condition;
|
|
351
|
+
`auto_applied_filters` lists what it applied. `product` returns only the
|
|
352
|
+
buy-box seller. Reviews translated into the site's language keep
|
|
353
|
+
`original_text`. Questions carry answer dates but no question dates. A
|
|
354
|
+
zero-result search is an empty, billed page; an unknown product, item or seller
|
|
355
|
+
nickname, or a listing with no public questions, is a billed 404.
|
|
356
|
+
|
|
311
357
|
### YouTube
|
|
312
358
|
|
|
313
359
|
Credit cost varies by endpoint: `transcript` costs 8; `streams` costs 3;
|
|
@@ -363,7 +409,7 @@ await client.youtube.channelResolve({ channel: "@mkbhd" }); // handle/URL -> id
|
|
|
363
409
|
Every Reddit endpoint costs 1 credit.
|
|
364
410
|
|
|
365
411
|
`search()` takes only `query` and `cursor` — there is no result-type or sort
|
|
366
|
-
filter
|
|
412
|
+
filter, so anything else is dropped server-side. It returns
|
|
367
413
|
`data.results` with `next_cursor` and `has_more`. `post()` returns a flat post
|
|
368
414
|
object under `data` and carries no comments; use `postComments()` for those.
|
|
369
415
|
The subreddit and user feeds return `data.posts`.
|
|
@@ -449,9 +495,9 @@ Credit cost varies by endpoint: `job` costs 30; `personPosts`, `companyPosts`,
|
|
|
449
495
|
`searchJobs` and `postComments` cost 10 per page; `person`, `personAbout`,
|
|
450
496
|
`company` and `post` cost 1.
|
|
451
497
|
|
|
452
|
-
> **Retired endpoints.** The
|
|
453
|
-
> `
|
|
454
|
-
>
|
|
498
|
+
> **Retired endpoints.** The LinkedIn data behind `personContact`,
|
|
499
|
+
> `companyPeople`, `companyJobs`, `searchPeople` and `searchPosts` is no longer
|
|
500
|
+
> available. They remain callable but always return HTTP 410 and are never
|
|
455
501
|
> billed. `company()` returns `featured_employees` (a small sample of staff), and
|
|
456
502
|
> `searchJobs()` with a company name substitutes for `companyJobs()`.
|
|
457
503
|
|
|
@@ -502,7 +548,7 @@ await client.tiktok.userFollowings({ sec_user_id: "abc123" });
|
|
|
502
548
|
Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
|
|
503
549
|
|
|
504
550
|
- `product()` resolves only about 44% of the product ids returned by `search()`.
|
|
505
|
-
|
|
551
|
+
TikTok Shop has no detail data for the rest, so an HTTP 404 is a normal outcome, not an
|
|
506
552
|
error — skip the item instead of retrying. Search to product is not a reliable
|
|
507
553
|
pipeline. `product()` **throws** `NotFoundError` on that 404 (there is no `data`
|
|
508
554
|
field in the body to test), so a loop over search ids must catch it:
|
|
@@ -514,7 +560,7 @@ Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
|
|
|
514
560
|
try {
|
|
515
561
|
const detail = await client.tiktokShop.product({ product_id: productId });
|
|
516
562
|
} catch (e) {
|
|
517
|
-
if (e instanceof NotFoundError) continue; // no detail
|
|
563
|
+
if (e instanceof NotFoundError) continue; // no detail data; skip
|
|
518
564
|
throw e;
|
|
519
565
|
}
|
|
520
566
|
}
|
|
@@ -523,7 +569,7 @@ Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
|
|
|
523
569
|
`productReviews()` often works for ids `product()` cannot resolve: of 8 such ids
|
|
524
570
|
tested, 8 returned HTTP 200 and 7 carried at least one review, so it is a useful
|
|
525
571
|
fallback source of product detail.
|
|
526
|
-
- `product()` does not return a price;
|
|
572
|
+
- `product()` does not return a price; TikTok masks it on the product page. Exact
|
|
527
573
|
prices come from `search()`, `shopProducts()`, and `categoryProducts()`.
|
|
528
574
|
|
|
529
575
|
```typescript
|
|
@@ -566,9 +612,6 @@ Credit cost varies by endpoint, in three tiers:
|
|
|
566
612
|
| 8 | `post`, `commentReplies` |
|
|
567
613
|
| 10 | `profile`, `userReels`, `userTagged`, `userStories`, `postComments`, `searchUsers`, `searchHashtags`, `userFollowers`, `userFollowings` |
|
|
568
614
|
|
|
569
|
-
The 10-credit endpoints run two upstream providers in parallel and bill both
|
|
570
|
-
legs; the 8-credit ones have no fallback leg to hedge against.
|
|
571
|
-
|
|
572
615
|
```typescript
|
|
573
616
|
// User profile
|
|
574
617
|
await client.instagram.profile({ username: "instagram" });
|
|
@@ -600,8 +643,8 @@ await client.instagram.userFollowings({ username: "instagram" });
|
|
|
600
643
|
### Threads
|
|
601
644
|
|
|
602
645
|
Six endpoints, and the credit cost is a function of the body: **2 credits when
|
|
603
|
-
you address a user by `user_id`, 4 when you address them by `username`.**
|
|
604
|
-
|
|
646
|
+
you address a user by `user_id`, 4 when you address them by `username`.** A
|
|
647
|
+
handle needs an extra lookup, so it costs a second call. Only `profile`,
|
|
605
648
|
`userPosts` and `userReplies` are username-keyed; `post`, `postComments` and
|
|
606
649
|
`searchUsers` always cost 2.
|
|
607
650
|
|
|
@@ -732,7 +775,8 @@ const comps = await client.realtor.search({
|
|
|
732
775
|
page_size: 200,
|
|
733
776
|
});
|
|
734
777
|
|
|
735
|
-
// Listing-text keyword watch
|
|
778
|
+
// Listing-text keyword watch (a listing must contain ALL the keywords, so each
|
|
779
|
+
// extra keyword narrows the results), a radius search, or one agent's listings.
|
|
736
780
|
await client.realtor.search({ location: "Austin, TX", keywords: ["workshop"] });
|
|
737
781
|
await client.realtor.search({ latitude: 30.27, longitude: -97.74, radius_miles: 5 });
|
|
738
782
|
await client.realtor.search({ agent_id: "1918615" });
|
|
@@ -808,8 +852,8 @@ await client.booking.reviews({ hotel: "the-independente" });
|
|
|
808
852
|
1 credit per call. `checkin` and `checkout` must be sent together — Booking
|
|
809
853
|
ignores a lone check-in and prices its own date range. `hotel` and `reviews`
|
|
810
854
|
take dates for the same reason: Booking prices a stay, and the response echoes
|
|
811
|
-
whichever dates were used. `currency` defaults to USD; without it Booking
|
|
812
|
-
|
|
855
|
+
whichever dates were used. `currency` defaults to USD; without it Booking picks
|
|
856
|
+
a currency itself and two identical requests can disagree. A search with neither
|
|
813
857
|
`destination` nor `dest_id` returns Booking's homepage and still costs a credit.
|
|
814
858
|
|
|
815
859
|
### Airbnb
|
|
@@ -861,7 +905,7 @@ await client.yelp.reviews({ business_id: "...", page: 2 }); // page 2, not 1
|
|
|
861
905
|
```
|
|
862
906
|
|
|
863
907
|
2 credits per call. `location` is effectively required — without it Yelp
|
|
864
|
-
|
|
908
|
+
picks a location itself and the same request can answer about a different
|
|
865
909
|
metro run to run. **Reviews page 1 is redundant**: it re-fetches the document
|
|
866
910
|
`business()` already returned and costs another 2 credits, so start at page 2.
|
|
867
911
|
Page size is fixed at 10 and a page past the last is a 404.
|
|
@@ -896,7 +940,7 @@ only exists inside Glassdoor's `/Overview/` URLs.
|
|
|
896
940
|
const hits = await client.glassdoor.companies({ query: "Stripe" });
|
|
897
941
|
const company = await client.glassdoor.company({ employer_id: "671932" });
|
|
898
942
|
|
|
899
|
-
// Pass the URLs the company response returns -
|
|
943
|
+
// Pass the URLs the company response returns - saves a lookup
|
|
900
944
|
await client.glassdoor.reviews({ url: company.reviews_url as string });
|
|
901
945
|
await client.glassdoor.salaries({ url: company.salaries_url as string });
|
|
902
946
|
```
|
|
@@ -904,8 +948,8 @@ await client.glassdoor.salaries({ url: company.salaries_url as string });
|
|
|
904
948
|
1 credit per call. Glassdoor's login wall caps `reviews` at **three reviews per
|
|
905
949
|
response** — there is deliberately no `page` param; move the window with
|
|
906
950
|
`category` and `employment_status` and read `filtered_review_count` to see how
|
|
907
|
-
many match. Addressing `reviews` or `salaries` by `employer_id`
|
|
908
|
-
|
|
951
|
+
many match. Addressing `reviews` or `salaries` by `employer_id` needs an
|
|
952
|
+
extra lookup because the slugs are case-sensitive and must be read off the
|
|
909
953
|
profile, so prefer the `reviews_url` / `salaries_url` the company response hands
|
|
910
954
|
back. These endpoints are slow and flaky by nature (company about 3-47s, reviews
|
|
911
955
|
about 75s, salaries about 41s) — raise `timeout` and keep retries on.
|
|
@@ -949,9 +993,9 @@ await client.g2.product({ product_id: "notion" });
|
|
|
949
993
|
await client.g2.reviews({ product_id: "notion", page: 2, company_size: "enterprise" });
|
|
950
994
|
```
|
|
951
995
|
|
|
952
|
-
**5 credits per call — the most expensive platform in the SDK
|
|
953
|
-
|
|
954
|
-
|
|
996
|
+
**5 credits per call — the most expensive platform in the SDK.** Retries are
|
|
997
|
+
deliberately conservative for that reason, and a blocked page arrives as a
|
|
998
|
+
billed 200 rather than an error. G2
|
|
955
999
|
loads review text in a separate frame, so `product` carries no reviews — call
|
|
956
1000
|
`reviews`, which is also the only place with exact per-star counts, pros/cons by
|
|
957
1001
|
theme, and company-size / role / industry / region facets.
|
|
@@ -1032,9 +1076,9 @@ await client.sec.search({ query: "climate risk", form: "10-K" });
|
|
|
1032
1076
|
```
|
|
1033
1077
|
|
|
1034
1078
|
1 credit per call, including `include_history: true`, which is the one call that
|
|
1035
|
-
can
|
|
1036
|
-
spelling. XBRL concept tags are **case-sensitive** — `netincomeloss` is a 404
|
|
1037
|
-
|
|
1079
|
+
can take up to 10 lookups. Both `cik` and `ticker` accept either
|
|
1080
|
+
spelling. XBRL concept tags are **case-sensitive** — `netincomeloss` is a 404,
|
|
1081
|
+
so use `facts()` to see what a filer actually reports. EDGAR's
|
|
1038
1082
|
"recent" block is not a fixed window: a decade for a quiet filer, about a year
|
|
1039
1083
|
for a prolific one.
|
|
1040
1084
|
|
|
@@ -1132,7 +1176,7 @@ All error classes:
|
|
|
1132
1176
|
| `BadRequestError` | 400, 422 | Invalid request parameters |
|
|
1133
1177
|
| `InvalidAPIKeyError` | 401 | Invalid API key |
|
|
1134
1178
|
| `InsufficientCreditsError` | 402 | No credits remaining |
|
|
1135
|
-
| `NotFoundError` | 404 | No data
|
|
1179
|
+
| `NotFoundError` | 404 | No data for that id (see TikTok Shop above) |
|
|
1136
1180
|
| `RateLimitError` | 429 | Rate limit exceeded |
|
|
1137
1181
|
| `ScavioAPIError` | other | Catch-all (has `.statusCode`) |
|
|
1138
1182
|
|
|
@@ -1162,7 +1206,7 @@ MIT
|
|
|
1162
1206
|
|
|
1163
1207
|
[Scavio](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) is a unified web data and
|
|
1164
1208
|
[search API for AI agents](https://scavio.dev/search-api-for-ai-agents?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — one API
|
|
1165
|
-
key, structured JSON
|
|
1209
|
+
key, structured JSON. It is a real-time
|
|
1166
1210
|
[Tavily alternative](https://scavio.dev/alternatives/tavily?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) and
|
|
1167
1211
|
[SerpAPI alternative](https://scavio.dev/alternatives/serpapi?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), and with
|
|
1168
1212
|
`extract()` it also covers the read-any-URL job people reach for Firecrawl to do.
|
|
@@ -1170,7 +1214,7 @@ key, structured JSON, no proxies or browser farms to run. It is a real-time
|
|
|
1170
1214
|
What teams build on it:
|
|
1171
1215
|
|
|
1172
1216
|
- **SERP and answer engines** — [Google Search API](https://scavio.dev/google-search-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) for organic results, news, images, maps and the knowledge graph
|
|
1173
|
-
- **Price and catalog monitoring** — [Amazon Product API](https://scavio.dev/amazon-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [Walmart Product API](https://scavio.dev/walmart-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), eBay, Target and Home Depot product, review and seller data
|
|
1217
|
+
- **Price and catalog monitoring** — [Amazon Product API](https://scavio.dev/amazon-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [Walmart Product API](https://scavio.dev/walmart-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), eBay, Target and Home Depot product, review and seller data, Mercado Libre listings, reviews and best sellers in Mexico, Brazil, Argentina and Colombia
|
|
1174
1218
|
- **Real estate and travel pipelines** — Zillow, Redfin and Realtor.com listings and market stats, Rightmove UK listings and England and Wales sold prices since 1995, Booking, Airbnb and Tripadvisor rates and reviews
|
|
1175
1219
|
- **Review mining and competitive research** — Trustpilot, Yelp, G2, Capterra, Glassdoor, App Store and Google Play reviews on one shape
|
|
1176
1220
|
- **Recruiting and company intelligence** — Indeed jobs, Glassdoor salaries, SEC EDGAR filings and XBRL facts, UK Companies House officers and filing history
|
package/dist/index.cjs
CHANGED
|
@@ -43,6 +43,7 @@ __export(index_exports, {
|
|
|
43
43
|
KuaishouNamespace: () => KuaishouNamespace,
|
|
44
44
|
LinkedInNamespace: () => LinkedInNamespace,
|
|
45
45
|
MAX_REQUESTS_PER_SECOND: () => MAX_REQUESTS_PER_SECOND,
|
|
46
|
+
MercadoLibreNamespace: () => MercadoLibreNamespace,
|
|
46
47
|
MetaAdsNamespace: () => MetaAdsNamespace,
|
|
47
48
|
MissingAPIKeyError: () => MissingAPIKeyError,
|
|
48
49
|
NotFoundError: () => NotFoundError,
|
|
@@ -202,7 +203,7 @@ function parseRetryAfter(header) {
|
|
|
202
203
|
var BASE_URL = "https://api.scavio.dev";
|
|
203
204
|
var DEFAULT_TIMEOUT = 3e4;
|
|
204
205
|
var DEFAULT_MAX_RETRIES = 2;
|
|
205
|
-
var SDK_VERSION = true ? "0.
|
|
206
|
+
var SDK_VERSION = true ? "0.21.1" : "0.0.0";
|
|
206
207
|
var USER_AGENT = `scavio-js/${SDK_VERSION}`;
|
|
207
208
|
function isServerRuntime() {
|
|
208
209
|
const g = globalThis;
|
|
@@ -2721,6 +2722,76 @@ var RightmoveNamespace = class {
|
|
|
2721
2722
|
}
|
|
2722
2723
|
};
|
|
2723
2724
|
|
|
2725
|
+
// src/namespaces/mercadolibre.ts
|
|
2726
|
+
var MercadoLibreNamespace = class {
|
|
2727
|
+
constructor(client) {
|
|
2728
|
+
this.client = client;
|
|
2729
|
+
}
|
|
2730
|
+
client;
|
|
2731
|
+
/**
|
|
2732
|
+
* Search Mercado Libre listings in Mexico, Brazil (Mercado Livre), Argentina
|
|
2733
|
+
* or Colombia by keyword or seller, with condition, price range, discount,
|
|
2734
|
+
* free shipping, Full fulfillment, official stores and interest-free
|
|
2735
|
+
* installment filters, sorted by relevance or price. Each row has price,
|
|
2736
|
+
* list price, discount, installments, seller and official-store flag where
|
|
2737
|
+
* shown, rating, units sold as a lower bound ("at least 500"), shipping
|
|
2738
|
+
* flags, a sponsored flag and catalog ids. About 48 rows per page and 42
|
|
2739
|
+
* pages (about 2,000 results) per query.
|
|
2740
|
+
*
|
|
2741
|
+
* Costs 2 credits.
|
|
2742
|
+
*/
|
|
2743
|
+
async search(options) {
|
|
2744
|
+
return this.client._post("/api/v1/mercadolibre/search", options);
|
|
2745
|
+
}
|
|
2746
|
+
/**
|
|
2747
|
+
* One Mercado Libre catalog product or listing: title, price, list price,
|
|
2748
|
+
* installments, promotions, the buy-box seller with reputation level and
|
|
2749
|
+
* seller tier, stock, shipping, rating with its star distribution,
|
|
2750
|
+
* variations with sibling product ids, specs, description, pictures and
|
|
2751
|
+
* categories. Only the buy-box seller is returned; units sold is a lower
|
|
2752
|
+
* bound. Some fields are null where the page omits them. Pass exactly one of
|
|
2753
|
+
* url, product_id or item_id; the id prefix (MLM, MLB, MLA, MCO) sets the
|
|
2754
|
+
* country.
|
|
2755
|
+
*
|
|
2756
|
+
* Costs 2 credits.
|
|
2757
|
+
*/
|
|
2758
|
+
async product(options) {
|
|
2759
|
+
return this.client._post("/api/v1/mercadolibre/product", options);
|
|
2760
|
+
}
|
|
2761
|
+
/**
|
|
2762
|
+
* One page of up to 15 Mercado Libre product reviews (page until a page
|
|
2763
|
+
* comes back empty), optionally filtered by star rating: rating, text, the
|
|
2764
|
+
* original text when Mercado Libre translated it, exact date, likes, the
|
|
2765
|
+
* review's country and photos. Catalog products pool reviews from several
|
|
2766
|
+
* countries. Totals and the star distribution come from product().
|
|
2767
|
+
*
|
|
2768
|
+
* Costs 1 credit.
|
|
2769
|
+
*/
|
|
2770
|
+
async reviews(options) {
|
|
2771
|
+
return this.client._post("/api/v1/mercadolibre/reviews", options);
|
|
2772
|
+
}
|
|
2773
|
+
/**
|
|
2774
|
+
* A page of buyer questions on a Mercado Libre listing with the seller's
|
|
2775
|
+
* answers and answer dates (Mercado Libre shows no question dates). Page
|
|
2776
|
+
* through with next_offset. A listing with no public questions returns 404.
|
|
2777
|
+
*
|
|
2778
|
+
* Costs 2 credits.
|
|
2779
|
+
*/
|
|
2780
|
+
async questions(options) {
|
|
2781
|
+
return this.client._post("/api/v1/mercadolibre/questions", options);
|
|
2782
|
+
}
|
|
2783
|
+
/**
|
|
2784
|
+
* The ranked top 20 best sellers in a Mercado Libre category in Mexico,
|
|
2785
|
+
* Argentina or Colombia, with price, discount, installments, rating, units
|
|
2786
|
+
* sold as a lower bound and seller where shown. Not available for Brazil.
|
|
2787
|
+
*
|
|
2788
|
+
* Costs 2 credits.
|
|
2789
|
+
*/
|
|
2790
|
+
async bestSellers(options) {
|
|
2791
|
+
return this.client._post("/api/v1/mercadolibre/best-sellers", options);
|
|
2792
|
+
}
|
|
2793
|
+
};
|
|
2794
|
+
|
|
2724
2795
|
// src/client.ts
|
|
2725
2796
|
var DEFAULT_MAX_REQUESTS_PER_SECOND = 1;
|
|
2726
2797
|
var MAX_REQUESTS_PER_SECOND = 50;
|
|
@@ -2760,6 +2831,7 @@ var Scavio = class {
|
|
|
2760
2831
|
trustpilot;
|
|
2761
2832
|
realtor;
|
|
2762
2833
|
rightmove;
|
|
2834
|
+
mercadolibre;
|
|
2763
2835
|
apiKey;
|
|
2764
2836
|
baseUrl;
|
|
2765
2837
|
timeout;
|
|
@@ -2815,6 +2887,7 @@ var Scavio = class {
|
|
|
2815
2887
|
this.trustpilot = new TrustpilotNamespace(this);
|
|
2816
2888
|
this.realtor = new RealtorNamespace(this);
|
|
2817
2889
|
this.rightmove = new RightmoveNamespace(this);
|
|
2890
|
+
this.mercadolibre = new MercadoLibreNamespace(this);
|
|
2818
2891
|
}
|
|
2819
2892
|
/** @internal */
|
|
2820
2893
|
async _post(path, body) {
|
|
@@ -2896,6 +2969,7 @@ var Scavio = class {
|
|
|
2896
2969
|
KuaishouNamespace,
|
|
2897
2970
|
LinkedInNamespace,
|
|
2898
2971
|
MAX_REQUESTS_PER_SECOND,
|
|
2972
|
+
MercadoLibreNamespace,
|
|
2899
2973
|
MetaAdsNamespace,
|
|
2900
2974
|
MissingAPIKeyError,
|
|
2901
2975
|
NotFoundError,
|