微店关键词搜索接口深度开发指南
一、接口特性与创新实现
微店搜索API采用OAuth2.0认证体系,支持多维度商品检索。最新版本新增了语义理解能力,可通过"related_words"参数开启同义词扩展功能,提升搜索召回率15%以上。接口响应时间控制在200ms内,支持QPS≤50的高并发场景。
点击获取key和secret
二、Python实战代码(含智能重试)
import requests from urllib.parse import quote import time class WeidianSearch: def __init__(self, client_id, client_secret): self.token_url = "https://open.weidian.com/oauth2/token" self.search_url = "https://open.weidian.com/api/item/search" self.client_id = client_id self.client_secret = client_secret self.access_token = self._get_token() def _get_token(self): params = { "client_id": self.client_id, "client_secret": self.client_secret, "grant_type": "client_credentials" } return requests.post(self.token_url, params=params).json()['access_token'] def intelligent_search(self, keyword, max_retry=3, **kwargs): headers = {"Authorization": f"Bearer {self.access_token}"} params = { "keyword": quote(keyword), "page_no": kwargs.get("page", 1), "page_size": kwargs.get("size", 20), "sort_type": kwargs.get("sort", 1), # 1-综合 2-销量 3-价格 "related_words": kwargs.get("semantic", 1) # 开启语义扩展 } for attempt in range(max_retry): try: resp = requests.get(self.search_url, headers=headers, params=params, timeout=0.5) if resp.status_code == 200: return self._parse_data(resp.json()) except Exception as e: if attempt == max_retry - 1: raise time.sleep(1 * (attempt + 1)) def _parse_data(self, raw_data): return { "total": raw_data.get("total", 0), "items": [{ "item_id": item["item_id"], "title": item["title"], "price": float(item["price"]), "promo_price": float(item.get("promotion_price", item["price"])), "sales": int(item["sales"]), "shop": item["shop_name"] } for item in raw_data.get("items", [])] } # 使用示例 searcher = WeidianSearch("YOUR_CLIENT_ID", "YOUR_SECRET") result = searcher.intelligent_search("智能手机", page=1, size=10, sort=2) print(f"找到{result['total']}个商品,首条:{result['items'][0]['title']}")
三、高级优化策略
本地缓存:使用Redis缓存高频关键词结果,设置TTL为5分钟
请求合并:对相似关键词请求进行合并处理(如"手机"和"智能手机")
智能降级:当API响应超时,自动切换本地缓存或备用搜索方
日志分析:记录搜索热词用于优化推荐算法
四、常见问题解决方案
中文乱码:确保所有参数经过URLEncode处理
签名失败:检查时间戳误差需在5分钟内
限流触发:实现令牌桶算法控制请求速率