api.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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: dict
  36. basic_data: dict
  37. judgement_type: list
  38. judge_type_map = {
  39. '1': 'is_keyword', # 关键词引流
  40. '2': 'is_similarity_logo', # 近似商标
  41. '3': 'is_brand_1to1', # 商标一比一侵权
  42. '4': 'is_low_price', # 低价
  43. '5': 'is_in_authorize_sale_list' # 未生成产品
  44. }
  45. @app.post("/brandanalysis/api/v1/keyword")
  46. async def brand_key_word_judgement(request: KeyWordRequest):
  47. """关键词引流判定api"""
  48. if request.shop_detail_info_brand_name not in request.title:
  49. title = request.shop_detail_info_brand_name + request.title
  50. else:
  51. title = request.title
  52. judgement_res = Service.agent.brand_key_word_judgement(request.brand_name, title)
  53. result = json.loads(judgement_res)
  54. return {"code": 200, "message": "success", "data": {"judgement_info": result}}
  55. @app.post("/brandanalysis/api/v1/license")
  56. async def license_judgement(request: LicenseRequest):
  57. license_list = Service.get_license_list(request.brand_name)
  58. license_judgement = json.loads(Service.agent.license_product_judgement(request.title, license_list))
  59. return {"code": 200, "message": "success", "data": {"judgement_info": license_judgement}}
  60. @app.post("/brandanalysis/api/v1/logo")
  61. async def logo_judgement(request: LogoRequest):
  62. logo_path_map = {
  63. "李宁": "./logo/lining.jpg"
  64. }
  65. logo_path = logo_path_map[request.brand_name]
  66. logo_judgement_res = json.loads(Service.agent.image_logo_judgement(logo_path, request.image_url))
  67. return {"code": 200, "message": "success", "data": {"judgement_info": logo_judgement_res}}
  68. @app.post("/brandanalysis/api/v1/infringe_judgement")
  69. async def infringe_judgement(request: JudgementRequest):
  70. """侵权判定全流程接口"""
  71. judgement_result = {}
  72. for type in request.judgement_type:
  73. if type == 1:
  74. # 关键词引流判断
  75. is_keyword = ApiService.keyword_judgement(request.url_data, request.basic_data)
  76. judgement_result[judge_type_map[str(type)]] = is_keyword
  77. elif type == 2:
  78. # 近似商标侵权判断
  79. is_similarity_logo = ApiService.similarity_logo_judgement(request.url_data, request.basic_data)
  80. judgement_result[judge_type_map[str(type)]] = is_similarity_logo
  81. elif type == 3:
  82. # 商标1比1侵权判断
  83. is_brand_1to1 = ApiService.logo_1to1_judgement(request.url_data, request.basic_data)
  84. judgement_result[judge_type_map[str(type)]] = is_brand_1to1
  85. elif type == 4:
  86. # 低价判断
  87. is_low_price = ApiService.low_price_judgement(request.url_data, request.basic_data)
  88. print(is_low_price)
  89. judgement_result[judge_type_map[str(type)]] = is_low_price
  90. elif type == 5:
  91. # 授权商品判断
  92. is_in_authorize_sale_list = ApiService.license_judgement(request.url_data, request.basic_data)
  93. judgement_result[judge_type_map[str(type)]] = is_in_authorize_sale_list
  94. else:
  95. judgement_result[f'类型{type}'] = '未制定侵权逻辑,无法判定'
  96. return {
  97. 'code': 200,
  98. 'message': 'sucess',
  99. 'data': {
  100. 'juedgement_result': judgement_result
  101. }
  102. }
  103. if __name__ == "__main__":
  104. uvicorn.run(app, host="0.0.0.0", port=7860)