单一评论来源可能存在偏见或覆盖面有限。汇总来自亚马逊(经过验证的购买者)和谷歌(来自整个网络的编辑和用户评论)的评论可以提供更具代表性的产品接收情况。本教程使用 Scavio API 构建评论聚合管道,该管道从多个来源收集评论,将星级评级标准化为 5 分制,并计算加权聚合分数。
前置条件
- Python 3.8 或更高版本
- 请求已安装库
- Scavio API 密钥
- 基本统计理解
操作指南
步骤 1: 获取亚马逊评论
查询产品的 Scavio Amazon 端点并提取其评论数组和平均评分。
Python
def amazon_reviews(asin: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"})
r.raise_for_status()
data = r.json()
return {"rating": data.get("product", {}).get("rating"), "reviews": data.get("reviews", [])}步骤 2: 获取 Google 评论信号
在 Google 中搜索产品评论并提取包含评级提及的片段。
Python
def google_review_signals(product_name: str) -> list[str]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": f"{product_name} review rating", "country_code": "us"})
r.raise_for_status()
results = r.json().get("organic_results", [])
return [r.get("snippet", "") for r in results if r.get("snippet")]步骤 3: 计算综合评级
对亚马逊评论的星级评分进行平均以产生加权分数。
Python
def aggregate_rating(reviews: list[dict]) -> float | None:
ratings = [r["rating"] for r in reviews if r.get("rating")]
if not ratings:
return None
return round(sum(ratings) / len(ratings), 2)步骤 4: 构建汇总报告
将亚马逊评级和评论计数与 Google 评论信号结合到统一的产品报告中。
Python
def aggregate_report(product: str, asin: str) -> dict:
amazon = amazon_reviews(asin)
signals = google_review_signals(product)
agg = aggregate_rating(amazon["reviews"])
return {
"product": product,
"amazon_avg_rating": amazon.get("rating"),
"review_count": len(amazon["reviews"]),
"aggregate_score": agg,
"google_signals": signals[:3],
}Python 示例
Python
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def call(body):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY}, json=body)
r.raise_for_status()
return r.json()
def aggregate(product: str, asin: str) -> dict:
amazon_data = call({"platform": "amazon", "query": asin, "marketplace": "US"})
google_data = call({"query": f"{product} review", "country_code": "us"})
reviews = amazon_data.get("reviews", [])
ratings = [r["rating"] for r in reviews if r.get("rating")]
avg = round(sum(ratings) / len(ratings), 2) if ratings else None
return {
"amazon_rating": amazon_data.get("product", {}).get("rating"),
"computed_avg": avg,
"review_count": len(reviews),
"google_snippets": [r.get("snippet") for r in google_data.get("organic_results", [])[:3] if r.get("snippet")]
}
if __name__ == "__main__":
import json
print(json.dumps(aggregate("Sony WH-1000XM5", "B09XS7JWHH"), indent=2))JavaScript 示例
JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function call(body) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(body)
});
return res.json();
}
async function aggregate(product, asin) {
const [amazon, google] = await Promise.all([
call({ platform: "amazon", query: asin, marketplace: "US" }),
call({ query: `${product} review`, country_code: "us" })
]);
const reviews = amazon.reviews || [];
const ratings = reviews.map(r => r.rating).filter(Boolean);
const avg = ratings.length ? Math.round(ratings.reduce((a, b) => a + b) / ratings.length * 100) / 100 : null;
return { amazonRating: amazon.product?.rating, computedAvg: avg, reviewCount: reviews.length };
}
aggregate("Sony WH-1000XM5", "B09XS7JWHH").then(console.log).catch(console.error);预期输出
JSON
{
"product": "Sony WH-1000XM5",
"amazon_avg_rating": "4.8",
"review_count": 47,
"aggregate_score": 4.72,
"google_signals": [
"The WH-1000XM5 earns our top rating for premium noise-canceling headphones...",
"5/5 stars. Sony has once again set the bar for consumer audio..."
]
}