utils.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import requests
  2. import json
  3. import time
  4. from db_helper import HologresHelper, RedisHelper
  5. from config import set_config
  6. from log import Log
  7. config_ = set_config()
  8. log_ = Log()
  9. def request_post(request_url, request_data):
  10. """
  11. post 请求 HTTP接口
  12. :param request_url: 接口URL
  13. :param request_data: 请求参数
  14. :return: res_data json格式
  15. """
  16. response = requests.post(url=request_url, json=request_data)
  17. if response.status_code == 200:
  18. res_data = json.loads(response.text)
  19. return res_data
  20. def filter_by_pseudo_exposure(app_type, mid, video_ids):
  21. """
  22. 伪曝光过滤
  23. :param app_type: 产品标识 type-int
  24. :param mid: 设备id type-string
  25. :param video_ids: 需过滤的视频列表 type-list
  26. :return: filtered_videos 过滤后的列表 type-list
  27. """
  28. # 根据Redis缓存中的数据过滤
  29. redis_helper = RedisHelper()
  30. # key拼接
  31. key_name = '{}.{}.{}'.format(config_.PSEUDO_EXPOSURE_KEY_PREFIX, app_type, mid)
  32. pe_videos_list = redis_helper.get_data_from_set(key_name)
  33. if not pe_videos_list:
  34. return video_ids
  35. pe_videos = [eval(video) for video in pe_videos_list]
  36. filtered_videos = [video_id for video_id in video_ids if video_id not in pe_videos]
  37. return filtered_videos
  38. def filter_video_status(video_ids):
  39. """
  40. 对视频状态进行过滤
  41. :param video_ids: 视频id列表 type-list
  42. :return: filtered_videos
  43. """
  44. st = time.time()
  45. sql = "SELECT video_id" \
  46. "FROM {}" \
  47. "WHERE audit_status = 5" \
  48. "AND applet_rec_status IN (1, 6)" \
  49. "-- AND open_status = 1" \
  50. "-- AND payment_status = 0" \
  51. "-- AND encryption_status != 5" \
  52. "-- AND transcoding_status = 3" \
  53. "AND video_id IN {};".format(config_.VIDEO_STATUS, tuple(video_ids))
  54. hologres_helper = HologresHelper()
  55. data = hologres_helper.get_data(sql=sql)
  56. filtered_videos = [temp[0] for temp in data]
  57. et = time.time()
  58. log_.info('filter video status finished! filtered_videos = {}, execute time = {}ms'.format(
  59. filtered_videos, (et - st)*1000))
  60. def filter_video_viewed(app_type, mid, uid, video_ids, types=(1,)):
  61. """
  62. 调用后端接口过滤用户已观看视频
  63. :param app_type: 产品标识 type-int
  64. :param mid: mid type-string
  65. :param uid: uid type-string
  66. :param video_ids: 视频id列表 type-list
  67. :param types: 过滤参数 type-tuple, 默认(1, ) 1-已观看 2-视频状态 3-是否进入老年人社区 4-话题状态 5-推荐状态
  68. :return: filtered_videos
  69. """
  70. # 调用http接口
  71. request_data = {"appType": app_type,
  72. "mid": mid,
  73. "uid": uid,
  74. "types": list(types),
  75. "videoIds": video_ids}
  76. result = request_post(request_url=config_.VIDEO_FILTER_URL, request_data=request_data)
  77. if result['code'] != 0:
  78. log_.info('过滤失败,types: {}'.format(types))
  79. return video_ids
  80. filtered_videos = result['data']
  81. return filtered_videos
  82. if __name__ == '__main__':
  83. filter_video_status([1, 2, 3, 5978661])