首页 > 大数据 > 数据分析 > 分享一些关于电商商品详情API接口的实际案例
import timefrom functools import wrapsdef rate_limit(max_calls, period):
call_times = []
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
current_time = time.time()
call_times[:] = [t for t in call_times if current_time - t < period]
if len(call_times) >= max_calls:
raise Exception(f"请求频率超过限制:{max_calls}次/{period}秒")
call_times.append(current_time)
return func(*args, **kwargs)
return wrapper return decorator# 使用示例class CustomAPI:
@rate_limit(max_calls=50, period=60)
def get_product_detail(self, product_id, platform):
# 实际请求代码
passdef format_product_data(raw_data, platform):
if platform == "taobao":
return {
"title": raw_data.get("title", ""),
"price": raw_data.get("price_info", {}).get("current_price", 0),
"stock": raw_data.get("stock_info", {}).get("available", 0)
}
elif platform == "jd":
return {
"title": raw_data.get("name", ""),
"price": raw_data.get("jd_price", 0),
"stock": raw_data.get("quantity", 0)
}
# 其他平台适配
return {}def validate_product_data(data):
required_fields = ["title", "price", "stock"]
for field in required_fields:
if field not in data:
raise ValueError(f"缺少必要字段: {field}")
return Trueimport cachetoolsfrom cachetools import TTLCacheimport redis redis_client = redis.Redis(host='localhost', port=6379, db=0)def redis_cache(key, ttl=300): def decorator(func): def wrapper(*args, **kwargs): cached_data = redis_client.get(key) if cached_data: return eval(cached_data) result = func(*args, **kwargs) redis_client.setex(key, ttl, str(result)) return result return wrapper return decorator# 使用示例@redis_cache(key="product:12345", ttl=600)def get_cached_product_detail(product_id): # 实际请求代码 pass
import unittestclass TestProductAPI(unittest.TestCase):
def setUp(self):
self.api = CustomAPI()
def test_get_product_detail(self):
result = self.api.get_product_detail("12345", "taobao")
self.assertEqual(isinstance(result, dict), True)
self.assertTrue("title" in result)if __name__ == '__main__':
unittest.main()
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026917/viewspace-3089564/ ,如需转载,请注明出处,否则将追究法律责任。