产品价格比较工具
一个基于TypeScript的价格比较工具,使用Google Shopping、Brave Search和Tavily搜索多个零售商,以找到最佳产品价格。
特性
- ✅ URL或产品名称输入:输入产品URL或仅输入产品名称
- ✅ 自动产品提取:使用Tavily从URL中提取产品名称
- ✅ 多引擎搜索:在Google Shopping、Brave和Tavily中搜索综合结果
- ✅ 灵活的搜索模式:选择特定发动机(
google,brave,tavily,mcp)或一次全部搜索 - ✅ 智能过滤:自动过滤掉非电子商务网站(YouTube、Reddit、社交媒体)
- ✅ 价格解析:自动提取价格、货币和折扣信息
- ✅ 智能分拣:结果先按最低价格排序
- ✅ 多种货币支持:处理美元、英镑、欧元、加元和澳元
- ✅ 干净的Web界面:简单、响应迅速的用户界面,便于价格比较
- ✅ 综合测试:105次测试,通过率100%
建筑
该工具支持 多种集成方法 访问搜索引擎:
- 谷歌购物API -与Google自定义搜索的直接REST API集成
- MCP工具 -三种不同的集成选项:
- CLI网桥 (当前活动):生成Claude Code CLI命令 - 直接MCP SDK:原生SDK与stdio传输的集成 - HTTP代理:MCP工具访问的独立代理服务器
核心组件
- URL处理者 (
src/core/urlHandler.ts)-验证并规范URL - 产品提取器 (
src/core/productExtractor.ts)-从URL中提取产品名称 - 搜索服务 (
src/core/searchService.ts)-通过灵活的模式协调多个引擎的搜索 - 价格分析器 (
src/core/priceParser.ts)-从搜索结果中提取价格和折扣 - 结果排序器 (
src/core/resultSorter.ts)-按价格对结果进行排序和重复数据消除
搜索引擎集成
该工具通过不同的服务与多个搜索引擎集成:
活动服务:
mcpBridge.ts-MCP工具的Claude Code CLI桥接器(Brave+Tavily)googleShopping.ts-用于购物结果的Google自定义搜索API
替代MCP集成选项:
mcpClient.ts-使用@modelcontextprotocol/sdk直接集成mcpProxy.ts+mcp-proxy-server.ts-基于HTTP的代理架构
使用的MCP工具
mcp__tavily-mcp__tavily-extract-从URL中提取产品信息mcp__brave-search__brave_web_search-通过勇敢搜索API进行搜索mcp__tavily-mcp__tavily-search-通过Tavilly Search API进行搜索
安装
# Install dependencies
npm install
# Configure environment variables
cp .env.example .env
# Edit .env and add your API keys环境配置
创建一个 .env 具有以下API密钥的文件:
# Required for Brave Search
BRAVE_API_KEY=your_brave_api_key
# Required for Tavily
TAVILY_API_KEY=your_tavily_api_key
# Optional - for Google Shopping results
GOOGLE_API_KEY=your_google_api_key
GOOGLE_SEARCH_ENGINE_ID=your_search_engine_id获取API密钥:
- API密钥: 谷歌云控制台 - 搜索引擎ID: 可编程搜索引擎
用法
发展模式
# Start development server (with auto-reload)
npm run dev服务器将在以下时间启动 http://localhost:3000
生产模式
# Build TypeScript
npm run build
# Start production server
npm startAPI
POST/api/搜索
使用灵活的搜索模式搜索产品价格。
请求:
{
"input": "Gaming Laptop",
"mode": "all"
}搜索模式:
all(默认)-同时搜索Google、Brave和Tavilygoogle-仅搜索谷歌购物brave-只搜索勇敢tavily-仅搜索Tavilymcp-通过MCP工具搜索Brave和Tavily
URL输入:
{
"input": "https://amazon.com/product/gaming-laptop-123",
"mode": "all"
}答复:
{
"success": true,
"productName": "Gaming Laptop XYZ",
"results": [
{
"retailer": "Amazon",
"productName": "Gaming Laptop XYZ",
"currentPrice": 1249.99,
"currency": "USD",
"discount": 10,
"originalPrice": 1388.88,
"url": "https://amazon.com/...",
"source": "google",
"normalizedPrice": 1249.99
}
]
}源值:
google-Google购物结果brave-Brave搜索结果tavily-Tavily搜索结果
测试
该项目包括对所有核心功能的全面测试:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage测试覆盖率
- URL处理者:23个测试-URL验证、规范化、协议处理
- 价格分析器:27项测试-各种价格格式、货币、折扣
- 结果排序器:23个测试-排序、货币标准化、过滤
- 产品提取器:17个测试-内容提取、产品名称解析
- 搜索服务:15项测试-多引擎搜索、重复数据删除
总计:105次测试,100%通过
项目结构
price-comparison-tool/
├── src/
│ ├── core/
│ │ ├── urlHandler.ts # URL validation and normalization
│ │ ├── productExtractor.ts # Product name extraction from URLs
│ │ ├── searchService.ts # Multi-engine search orchestration
│ │ ├── priceParser.ts # Price and discount extraction
│ │ └── resultSorter.ts # Result sorting and deduplication
│ ├── services/
│ │ ├── mcpBridge.ts # [Active] CLI bridge to Claude Code
│ │ ├── mcpClient.ts # [Alternative] Direct MCP SDK integration
│ │ ├── mcpProxy.ts # [Alternative] HTTP proxy client
│ │ └── googleShopping.ts # Google Custom Search API
│ ├── types.ts # TypeScript interfaces
│ ├── index.ts # Main orchestrator
│ └── server.ts # Express API server
├── public/
│ ├── index.html # Web interface
│ ├── style.css # Styling
│ └── app.js # Frontend logic
├── tests/
│ ├── urlHandler.test.ts
│ ├── productExtractor.test.ts
│ ├── searchService.test.ts
│ ├── priceParser.test.ts
│ └── resultSorter.test.ts
├── mcp-proxy-server.ts # [Alternative] Standalone MCP proxy server
├── .env.example # Environment variable template
├── .gitignore
├── package.json
├── tsconfig.json
├── vitest.config.ts
└── README.md运作原理
- 输入处理:用户输入产品URL或名称(可选搜索模式)
- 产品提取 (如果是URL):Tavily从页面中提取产品名称
- 并行搜索:根据模式,在选定引擎上搜索:
- 谷歌购物API(直接REST API) - 勇敢搜索(通过MCP工具) - Tavily搜索(通过MCP工具)
- 电子商务过滤:删除非购物网站(YouTube、Reddit、社交媒体)
- 价格解析:使用正则表达式模式提取价格、货币和折扣
- 去重:根据URL相似性和零售商删除重复结果
- 货币正常化:将所有价格转换为美元进行公平比较
- 排序:首先按最低价格排序,优先考虑谷歌购物结果
- 显示:在干净、响应迅速的表格中显示结果
支持的价格格式
- 美元:
$1,299.99,$99.99,1299.99 USD - 英镑:
£999,£1,299.50 - 欧元:
€1.299,50,€999 - 计算机辅助设计:
CAD $199.99,199.99 CAD - 澳元:
AUD $149.99,149.99 AUD
折扣检测
该工具从以下模式中检测折扣:
- 八折
- “节省15%”
- “99.99美元”
- “最初149美元”
限制和注意事项
MCP集成方法
该项目包括 三种不同的MCP集成方法:
- CLI网桥 (目前活跃于
mcpBridge.ts):
- 生成Claude代码CLI命令: claude mcp-call - 简单,但需要安装和配置Claude Code CLI
- 直接SDK (可在
mcpClient.ts):
- 用途 @modelcontextprotocol/sdk 使用stdio传输 - 效率更高,但需要安装MCP服务器包
- HTTP代理 (可在
mcpProxy.ts+mcp-proxy-server.ts):
- Claude Code连接到的独立代理服务器 - 允许主应用程序独立于MCP工具运行
要在方法之间切换,请在中修改导入 src/core/searchService.ts.
谷歌购物API
- 可选的:该工具在没有Google API密钥的情况下工作,仅使用Brave和Tavily
- 结构化数据:谷歌搜索结果通常包括更好的产品元数据
- 速率限制:免费套餐每天允许100次查询
- 需要设置:需要API密钥和自定义搜索引擎ID
静态汇率
货币转换使用中定义的静态汇率 src/types.ts:
- 美元:1.0(基准)
- GBP:1.27
- 欧元:1.09
- 计算机辅助设计:0.74
- 模数:0.66
对于生产用途,请考虑集成实时汇率API。
速率限制
- 勇敢的搜索:查看您的计划的费率限制
- 塔维利:查看您的计划的费率限制
- 谷歌自定义搜索:100次查询/天(免费等级)
- 该工具并行搜索引擎,因此一个搜索=多个API调用
未来的增强功能
- ✅ ~~Google Shopping API集成~~(已完成)
- ✅ ~~多种搜索模式~~(已完成)
- ✅ ~~电子商务过滤~~(已完成)
- 实时汇率API集成
- 具有相似性评分的高级结果重复数据删除
- 价格历史跟踪和趋势
- 价格下跌警报和通知
- 浏览器扩展
- 其他搜索引擎(必应购物、易趣API等)
- 用户帐户和保存的搜索
- 多个产品之间的产品比较
- 评论和评分汇总
许可证
国际学生委员会
贡献
欢迎投稿!请确保在提交PR之前通过所有测试:
npm test