| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- from fastapi import FastAPI, Request, status
- from fastapi.exceptions import RequestValidationError
- from fastapi.responses import JSONResponse
- import json
- from pydantic import BaseModel
- from utils import Service, ApiService
- import uvicorn
- app = FastAPI()
- # 添加全局异常处理器
- @app.exception_handler(RequestValidationError)
- async def validation_exception_handler(request: Request, exc: RequestValidationError):
- return JSONResponse(
- status_code=status.HTTP_400_BAD_REQUEST,
- content={
- "code": 400,
- "msg": "请求参数错误",
- "data": {
- "detail": exc.errors(),
- "body": exc.body
- }
- },
- )
- # 定义请求体
- class KeyWordRequest(BaseModel):
- brand_name: str # 判定品牌名称
- shop_detail_info_brand_name: str # 商品详情页的品牌名称
- title: str # 商品名称
-
- class LicenseRequest(BaseModel):
- brand_name: str # 判定品牌名称
- title: str # 商品名称
-
- class LogoRequest(BaseModel):
- brand_name: str # 判定品牌名称
- image_url: str # 图片链接
-
- class JudgementRequest(BaseModel):
- url_data: dict
- basic_data: dict
- judgement_type: list
-
- judge_type_map = {
- '1': 'is_keyword', # 关键词引流
- '2': 'is_similarity_logo', # 近似商标
- '3': 'is_brand_1to1', # 商标一比一侵权
- '4': 'is_low_price', # 低价
- '5': 'is_in_authorize_sale_list' # 未生成产品
- }
-
- @app.post("/brandanalysis/api/v1/keyword")
- async def brand_key_word_judgement(request: KeyWordRequest):
- """关键词引流判定api"""
- if request.shop_detail_info_brand_name not in request.title:
- title = request.shop_detail_info_brand_name + request.title
- else:
- title = request.title
-
- judgement_res = Service.agent.brand_key_word_judgement(request.brand_name, title)
-
- result = json.loads(judgement_res)
- return {"code": 200, "message": "success", "data": {"judgement_info": result}}
- @app.post("/brandanalysis/api/v1/license")
- async def license_judgement(request: LicenseRequest):
- license_list = Service.get_license_list(request.brand_name)
- license_judgement = json.loads(Service.agent.license_product_judgement(request.title, license_list))
- return {"code": 200, "message": "success", "data": {"judgement_info": license_judgement}}
- @app.post("/brandanalysis/api/v1/logo")
- async def logo_judgement(request: LogoRequest):
- logo_path_map = {
- "李宁": "./logo/lining.jpg"
- }
- logo_path = logo_path_map[request.brand_name]
- logo_judgement_res = json.loads(Service.agent.image_logo_judgement(logo_path, request.image_url))
-
- return {"code": 200, "message": "success", "data": {"judgement_info": logo_judgement_res}}
- @app.post("/brandanalysis/api/v1/infringe_judgement")
- async def infringe_judgement(request: JudgementRequest):
- """侵权判定全流程接口"""
- judgement_result = {}
- for type in request.judgement_type:
- if type == 1:
- # 关键词引流判断
- is_keyword = ApiService.keyword_judgement(request.url_data, request.basic_data)
- judgement_result[judge_type_map[str(type)]] = is_keyword
- elif type == 2:
- # 近似商标侵权判断
- is_similarity_logo = ApiService.similarity_logo_judgement(request.url_data, request.basic_data)
- judgement_result[judge_type_map[str(type)]] = is_similarity_logo
- elif type == 3:
- # 商标1比1侵权判断
- is_brand_1to1 = ApiService.logo_1to1_judgement(request.url_data, request.basic_data)
- judgement_result[judge_type_map[str(type)]] = is_brand_1to1
- elif type == 4:
- # 低价判断
- is_low_price = ApiService.low_price_judgement(request.url_data, request.basic_data)
- print(is_low_price)
- judgement_result[judge_type_map[str(type)]] = is_low_price
- elif type == 5:
- # 授权商品判断
- is_in_authorize_sale_list = ApiService.license_judgement(request.url_data, request.basic_data)
- judgement_result[judge_type_map[str(type)]] = is_in_authorize_sale_list
- else:
- judgement_result[f'类型{type}'] = '未制定侵权逻辑,无法判定'
-
- return {
- 'code': 200,
- 'message': 'sucess',
- 'data': {
- 'juedgement_result': judgement_result
- }
- }
- if __name__ == "__main__":
- uvicorn.run(app, host="0.0.0.0", port=7860)
|