mirror of https://github.com/kortix-ai/suna.git
192 lines
9.9 KiB
Python
192 lines
9.9 KiB
Python
from typing import Dict
|
|
|
|
from agent.tools.data_providers.RapidDataProviderBase import RapidDataProviderBase, EndpointSchema
|
|
|
|
|
|
class AmazonProvider(RapidDataProviderBase):
|
|
def __init__(self):
|
|
endpoints: Dict[str, EndpointSchema] = {
|
|
"search": {
|
|
"route": "/search",
|
|
"method": "GET",
|
|
"name": "Amazon Product Search",
|
|
"description": "Search for products on Amazon with various filters and parameters.",
|
|
"payload": {
|
|
"query": "Search query (supports both free-form text queries or a product asin)",
|
|
"page": "Results page to return (default: 1)",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"sort_by": "Return the results in a specific sort order (RELEVANCE, LOWEST_PRICE, HIGHEST_PRICE, REVIEWS, NEWEST, BEST_SELLERS)",
|
|
"product_condition": "Return products in a specific condition (ALL, NEW, USED, RENEWED, COLLECTIBLE)",
|
|
"is_prime": "Only return prime products (boolean)",
|
|
"deals_and_discounts": "Return deals and discounts in a specific condition (NONE, ALL_DISCOUNTS, TODAYS_DEALS)",
|
|
"category_id": "Find products in a specific category / department (optional)",
|
|
"category": "Filter by specific numeric Amazon category (optional)",
|
|
"min_price": "Only return product offers with price greater than a certain value (optional)",
|
|
"max_price": "Only return product offers with price lower than a certain value (optional)",
|
|
"brand": "Find products with a specific brand (optional)",
|
|
"seller_id": "Find products sold by specific seller (optional)",
|
|
"four_stars_and_up": "Return product listings with ratings of 4 stars & up (optional)",
|
|
"additional_filters": "Any filters available on the Amazon page but not part of this endpoint's parameters (optional)"
|
|
}
|
|
},
|
|
"product-details": {
|
|
"route": "/product-details",
|
|
"method": "GET",
|
|
"name": "Amazon Product Details",
|
|
"description": "Get detailed information about specific Amazon products by ASIN.",
|
|
"payload": {
|
|
"asin": "Product ASIN for which to get details. Supports batching of up to 10 ASINs in a single request, separated by comma.",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"more_info_query": "A query to search and get more info about the product as part of Product Information, Customer Q&As, and Customer Reviews (optional)",
|
|
"fields": "A comma separated list of product fields to include in the response (field projection). By default all fields are returned. (optional)"
|
|
}
|
|
},
|
|
"products-by-category": {
|
|
"route": "/products-by-category",
|
|
"method": "GET",
|
|
"name": "Amazon Products by Category",
|
|
"description": "Get products from a specific Amazon category.",
|
|
"payload": {
|
|
"category_id": "The Amazon category for which to return results. Multiple category values can be separated by comma.",
|
|
"page": "Page to return (default: 1)",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"sort_by": "Return the results in a specific sort order (RELEVANCE, LOWEST_PRICE, HIGHEST_PRICE, REVIEWS, NEWEST, BEST_SELLERS)",
|
|
"min_price": "Only return product offers with price greater than a certain value (optional)",
|
|
"max_price": "Only return product offers with price lower than a certain value (optional)",
|
|
"product_condition": "Return products in a specific condition (ALL, NEW, USED, RENEWED, COLLECTIBLE)",
|
|
"brand": "Only return products of a specific brand. Multiple brands can be specified as a comma separated list (optional)",
|
|
"is_prime": "Only return prime products (boolean)",
|
|
"deals_and_discounts": "Return deals and discounts in a specific condition (NONE, ALL_DISCOUNTS, TODAYS_DEALS)",
|
|
"four_stars_and_up": "Return product listings with ratings of 4 stars & up (optional)",
|
|
"additional_filters": "Any filters available on the Amazon page but not part of this endpoint's parameters (optional)"
|
|
}
|
|
},
|
|
"product-reviews": {
|
|
"route": "/product-reviews",
|
|
"method": "GET",
|
|
"name": "Amazon Product Reviews",
|
|
"description": "Get customer reviews for a specific Amazon product by ASIN.",
|
|
"payload": {
|
|
"asin": "Product asin for which to get reviews.",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"page": "Results page to return (default: 1)",
|
|
"sort_by": "Return reviews in a specific sort order (TOP_REVIEWS, MOST_RECENT)",
|
|
"star_rating": "Only return reviews with a specific star rating (ALL, 5_STARS, 4_STARS, 3_STARS, 2_STARS, 1_STARS, POSITIVE, CRITICAL)",
|
|
"verified_purchases_only": "Only return reviews by reviewers who made a verified purchase (boolean)",
|
|
"images_or_videos_only": "Only return reviews containing images and / or videos (boolean)",
|
|
"current_format_only": "Only return reviews of the current format (product variant - e.g. Color) (boolean)"
|
|
}
|
|
},
|
|
"seller-profile": {
|
|
"route": "/seller-profile",
|
|
"method": "GET",
|
|
"name": "Amazon Seller Profile",
|
|
"description": "Get detailed information about a specific Amazon seller by Seller ID.",
|
|
"payload": {
|
|
"seller_id": "The Amazon Seller ID for which to get seller profile details",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"fields": "A comma separated list of seller profile fields to include in the response (field projection). By default all fields are returned. (optional)"
|
|
}
|
|
},
|
|
"seller-reviews": {
|
|
"route": "/seller-reviews",
|
|
"method": "GET",
|
|
"name": "Amazon Seller Reviews",
|
|
"description": "Get customer reviews for a specific Amazon seller by Seller ID.",
|
|
"payload": {
|
|
"seller_id": "The Amazon Seller ID for which to get seller reviews",
|
|
"country": "Sets the Amazon domain, marketplace country, language and currency (default: US)",
|
|
"star_rating": "Only return reviews with a specific star rating or positive / negative sentiment (ALL, 5_STARS, 4_STARS, 3_STARS, 2_STARS, 1_STARS, POSITIVE, CRITICAL)",
|
|
"page": "The page of seller feedback results to retrieve (default: 1)",
|
|
"fields": "A comma separated list of seller review fields to include in the response (field projection). By default all fields are returned. (optional)"
|
|
}
|
|
}
|
|
}
|
|
base_url = "https://real-time-amazon-data.p.rapidapi.com"
|
|
super().__init__(base_url, endpoints)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
tool = AmazonProvider()
|
|
|
|
# Example for product search
|
|
search_result = tool.call_endpoint(
|
|
route="search",
|
|
payload={
|
|
"query": "Phone",
|
|
"page": 1,
|
|
"country": "US",
|
|
"sort_by": "RELEVANCE",
|
|
"product_condition": "ALL",
|
|
"is_prime": False,
|
|
"deals_and_discounts": "NONE"
|
|
}
|
|
)
|
|
print("Search Result:", search_result)
|
|
|
|
# Example for product details
|
|
details_result = tool.call_endpoint(
|
|
route="product-details",
|
|
payload={
|
|
"asin": "B07ZPKBL9V",
|
|
"country": "US"
|
|
}
|
|
)
|
|
print("Product Details:", details_result)
|
|
|
|
# Example for products by category
|
|
category_result = tool.call_endpoint(
|
|
route="products-by-category",
|
|
payload={
|
|
"category_id": "2478868012",
|
|
"page": 1,
|
|
"country": "US",
|
|
"sort_by": "RELEVANCE",
|
|
"product_condition": "ALL",
|
|
"is_prime": False,
|
|
"deals_and_discounts": "NONE"
|
|
}
|
|
)
|
|
print("Category Products:", category_result)
|
|
|
|
# Example for product reviews
|
|
reviews_result = tool.call_endpoint(
|
|
route="product-reviews",
|
|
payload={
|
|
"asin": "B07ZPKN6YR",
|
|
"country": "US",
|
|
"page": 1,
|
|
"sort_by": "TOP_REVIEWS",
|
|
"star_rating": "ALL",
|
|
"verified_purchases_only": False,
|
|
"images_or_videos_only": False,
|
|
"current_format_only": False
|
|
}
|
|
)
|
|
print("Product Reviews:", reviews_result)
|
|
|
|
# Example for seller profile
|
|
seller_result = tool.call_endpoint(
|
|
route="seller-profile",
|
|
payload={
|
|
"seller_id": "A02211013Q5HP3OMSZC7W",
|
|
"country": "US"
|
|
}
|
|
)
|
|
print("Seller Profile:", seller_result)
|
|
|
|
# Example for seller reviews
|
|
seller_reviews_result = tool.call_endpoint(
|
|
route="seller-reviews",
|
|
payload={
|
|
"seller_id": "A02211013Q5HP3OMSZC7W",
|
|
"country": "US",
|
|
"star_rating": "ALL",
|
|
"page": 1
|
|
}
|
|
)
|
|
print("Seller Reviews:", seller_reviews_result)
|
|
|