api_service.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. from agent.agent import Agent
  2. from db import MongoDao
  3. import json
  4. license_dao = MongoDao("ProductStandard")
  5. class ApiService:
  6. agent = Agent()
  7. @staticmethod
  8. def keyword_judgement(url_data, basic_data):
  9. """关键词引流判断"""
  10. if url_data['title'] == None or url_data['brand_name'] == None or basic_data['brand_name'] == None:
  11. return '信息不全,无法判定'
  12. # 标题判定
  13. if basic_data['brand_name'] in url_data['title'] and url_data['brand_name'] != basic_data['brand_name']:
  14. # 当产品名称中包含与判定商标一致的品牌名称,且详情页中的品牌名称与判定的品牌名称不一致时判定为关键词引流
  15. return True
  16. elif url_data['brand_name'] == basic_data['brand_name'] or basic_data['brand_name'] not in url_data['title']:
  17. return False
  18. else:
  19. # 图像判定
  20. pass
  21. # 图像判定
  22. return "无法判定"
  23. @staticmethod
  24. def similarity_logo_judgement(url_data, basic_data):
  25. """近似商标侵权判定"""
  26. if basic_data['similarity_logos'] == None or len(basic_data['similarity_logos']) == 0:
  27. return '信息不全,无法判断'
  28. if url_data['title'] == None:
  29. url_data['title'] = ''
  30. if url_data['brand_name'] == None:
  31. url_data['brand_name'] = ''
  32. for similarity_logo in basic_data['similarity_logos']:
  33. if similarity_logo in url_data['title'] or similarity_logo in url_data['brand_name']:
  34. return True
  35. # 判断基础数据中的名称是否包含在标题或者详情品牌名称中
  36. if basic_data['brand_name'] in url_data['title'] or basic_data['brand_name'] in url_data['brand_name']:
  37. return False
  38. else:
  39. return '无法判定'
  40. @staticmethod
  41. def logo_1to1_judgement(url_data, basic_data):
  42. """商标一比一侵权"""
  43. if basic_data['base_price'] == None or basic_data['price_percent'] == None or url_data['title'] == None or basic_data['product_name'] == None:
  44. return '信息不全,无法判定'
  45. # 首先计算基础价格百分比
  46. base_price = basic_data['base_price'] * basic_data['price_percent']
  47. if url_data['title'].strip() == basic_data['product_name'].strip():
  48. # 当商品名称与提供的产品名称完全一致时,进行判定
  49. if url_data['price'] < base_price:
  50. return True
  51. else:
  52. return False
  53. else:
  54. if url_data['product_images'] == None or len(url_data['product_images']) == 0 or basic_data['product_images'] == None or len(basic_data['product_images']) == 0:
  55. return '信息不全,无法判定'
  56. for image_url1 in url_data['product_images']:
  57. for image_url2 in basic_data['product_images']:
  58. similarity_product_judgement = json.loads(ApiService.agent.product_image_similarity_judgement(image_url1, image_url2))
  59. if similarity_product_judgement['is_similarity_product']:
  60. if url_data['price'] < base_price:
  61. return True
  62. else:
  63. return False
  64. return False
  65. @staticmethod
  66. def low_price_judgement(url_data, basic_data):
  67. """低价判断"""
  68. if url_data['price'] == None or basic_data['base_price'] == None:
  69. return '价格信息缺失,无法判定'
  70. if url_data['title'] == basic_data['product_name']:
  71. if url_data['price'] < basic_data['base_price']:
  72. return True
  73. else:
  74. return False
  75. else:
  76. # 进行图像判定
  77. if url_data['product_images'] == None or len(url_data['product_images']) == 0 or basic_data['product_images'] == None or len(basic_data['product_images']) == 0:
  78. return '信息不全,无法判定'
  79. for image_url1 in url_data['product_images']:
  80. for image_url2 in basic_data['product_images']:
  81. similarity_product_judgement = json.loads(ApiService.agent.product_image_similarity_judgement(image_url1, image_url2))
  82. if similarity_product_judgement['is_similarity_product']:
  83. if url_data['price'] < basic_data['base_price']:
  84. return True
  85. else:
  86. return False
  87. @staticmethod
  88. def get_license_list(brand_name):
  89. """获取品牌方授权生成的商品列表"""
  90. license_list = []
  91. records = license_dao.get_records_by_query({"BrandName": brand_name})
  92. for record in records:
  93. license_list.append(record['ProductTitle'].strip())
  94. return license_list
  95. @staticmethod
  96. def license_judgement(url_data, basic_data):
  97. """未生产产品判断"""
  98. if basic_data['brand_name'] == None:
  99. return '信息不全,无法判定'
  100. license_list = ApiService.get_license_list(basic_data['brand_name'])
  101. if len(license_list) == 0:
  102. return '授权列表空,无法判定'
  103. result = json.loads(ApiService.agent.license_product_judgement(url_data['title'], license_list))
  104. return result['in_list']
  105. if __name__ == '__main__':
  106. # url_data = {
  107. # 'title': '休闲短裤女士运动潮流系列夏季女装裤子梭织运动裤',
  108. # 'brand_name': '李宁',
  109. # 'product_images': [
  110. # 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/0902/118/27466cf6-fb28-4580-9009-95a3763e06bf.jpg',
  111. # 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg'
  112. # ],
  113. # 'price': 199
  114. # }
  115. # basic_data = {
  116. # 'product_name': '休闲短裤女士运动潮流系列夏季女装裤子梭织运动裤',
  117. # 'brand_name': '李宁',
  118. # 'similarity_logos': ['李宇', '李柠'],
  119. # 'product_images': [
  120. # 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg',
  121. # 'http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/169/8ca15632-9cb9-40e7-8915-e6773e17a05e.jpg'
  122. # ],
  123. # 'base_price': 200,
  124. # 'price_percent': 0.9
  125. # }
  126. # result = ApiService.low_price_judgement(url_data, basic_data)
  127. # print(result)
  128. image_url_list = [
  129. "https://gw.alicdn.com/imgextra/O1CN01mDNtUa1uTSNizl8CS_!!2145866038.jpg_q95.jpg_.webp",
  130. "https://img.alicdn.com/imgextra/i3/2145866038/O1CN01HMNblk1uTSPJszeS0_!!2145866038.jpg_q75.jpg_.webp",
  131. "https://img.alicdn.com/imgextra/i4/2145866038/O1CN01dPZcPe1uTSSEBeiwS_!!2145866038.jpg_q75.jpg_.webp",
  132. "https://img.alicdn.com/imgextra/i3/2145866038/O1CN018tszjT1uTSNbo83rm_!!2145866038.jpg_q75.jpg_.webp",
  133. "https://img.alicdn.com/imgextra/i1/2145866038/O1CN01cWdXAM1uTSPoM4aUG_!!2145866038.jpg_q75.jpg_.webp",
  134. "https://img.alicdn.com/imgextra/i1/2145866038/O1CN01Chj95b1uTSPo2MbWn_!!2145866038.jpg_q75.jpg_.webp"
  135. ]
  136. response = ApiService.agent.get_log_from_product_images(image_url_list)
  137. print(response)