api.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from fastapi import FastAPI, Request, status
  2. from fastapi.exceptions import RequestValidationError
  3. from fastapi.responses import JSONResponse
  4. import json
  5. from pydantic import BaseModel
  6. from utils import Service, ApiService
  7. import uvicorn
  8. app = FastAPI()
  9. # 添加全局异常处理器
  10. @app.exception_handler(RequestValidationError)
  11. async def validation_exception_handler(request: Request, exc: RequestValidationError):
  12. return JSONResponse(
  13. status_code=status.HTTP_400_BAD_REQUEST,
  14. content={
  15. "code": 400,
  16. "msg": "请求参数错误",
  17. "data": {
  18. "detail": exc.errors(),
  19. "body": exc.body
  20. }
  21. },
  22. )
  23. # 定义请求体
  24. class KeyWordRequest(BaseModel):
  25. brand_name: str # 判定品牌名称
  26. shop_detail_info_brand_name: str # 商品详情页的品牌名称
  27. title: str # 商品名称
  28. class LicenseRequest(BaseModel):
  29. brand_name: str # 判定品牌名称
  30. title: str # 商品名称
  31. class LogoRequest(BaseModel):
  32. brand_name: str # 判定品牌名称
  33. image_url: str # 图片链接
  34. class JudgementRequest(BaseModel):
  35. url_data: str
  36. basic_data: str
  37. @app.post("/brandanalysis/api/v1/keyword")
  38. async def brand_key_word_judgement(request: KeyWordRequest):
  39. """关键词引流判定api"""
  40. if request.shop_detail_info_brand_name not in request.title:
  41. title = request.shop_detail_info_brand_name + request.title
  42. else:
  43. title = request.title
  44. judgement_res = Service.agent.brand_key_word_judgement(request.brand_name, title)
  45. result = json.loads(judgement_res)
  46. return {"code": 200, "message": "success", "data": {"judgement_info": result}}
  47. @app.post("/brandanalysis/api/v1/license")
  48. async def license_judgement(request: LicenseRequest):
  49. license_list = Service.get_license_list(request.brand_name)
  50. license_judgement = json.loads(Service.agent.license_product_judgement(request.title, license_list))
  51. return {"code": 200, "message": "success", "data": {"judgement_info": license_judgement}}
  52. @app.post("/brandanalysis/api/v1/logo")
  53. async def logo_judgement(request: LogoRequest):
  54. logo_path_map = {
  55. "李宁": "./logo/lining.jpg"
  56. }
  57. logo_path = logo_path_map[request.brand_name]
  58. logo_judgement_res = json.loads(Service.agent.image_logo_judgement(logo_path, request.image_url))
  59. return {"code": 200, "message": "success", "data": {"judgement_info": logo_judgement_res}}
  60. @app.post("/brandanalysis/api/v1/infringe_judgement")
  61. async def infringe_judgement(request: JudgementRequest):
  62. """侵权判定全流程接口"""
  63. # 先解析链接和基础数据
  64. url_data = json.loads(request.url_data)
  65. basic_data = json.loads(request.basic_data)
  66. # 关键词引流判断
  67. is_keyword = ApiService.keyword_judgement(url_data, basic_data)
  68. # 近似商标侵权判断
  69. is_similarity_logo = ApiService.similarity_logo_judgement(url_data, basic_data)
  70. # 商标1比1侵权判断
  71. is_brand_1to1 = ApiService.logo_1to1_judgement(url_data, basic_data)
  72. # 低价判断
  73. is_low_price = ApiService.low_price_judgement(url_data, basic_data)
  74. # 授权商品判断
  75. is_in_authorize_sale_list = ApiService.license_judgement(url_data, basic_data)
  76. return {
  77. 'code': 200,
  78. 'message': 'sucess',
  79. 'data': {
  80. 'juedgement_result': {
  81. 'is_keyword': is_keyword,
  82. 'is_similarity_logo': is_similarity_logo,
  83. 'is_brand_1to1': is_brand_1to1,
  84. 'is_low_price': is_low_price,
  85. 'is_in_authorize_sale_list': is_in_authorize_sale_list,
  86. }
  87. }
  88. }
  89. if __name__ == "__main__":
  90. uvicorn.run(app, host="0.0.0.0", port=7860)