pool_predict.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import time
  2. from config import set_config
  3. from utils import request_post
  4. from log import Log
  5. config_ = set_config()
  6. log_ = Log()
  7. def get_videos_from_pool(app_type, size=1000):
  8. """
  9. 从流量池获取视频,循环获取,直到返回数据为None结束
  10. :param app_type: 产品标识 type-int
  11. :param size: 每次获取视频数量,type-int,默认1000
  12. :return: videos
  13. """
  14. # 获取批次标识,利用首次获取数据时间戳为标记
  15. batch_flag = time.time()
  16. request_data = {'appType': app_type, 'batchFlag': batch_flag, 'size': size}
  17. videos = []
  18. while True:
  19. result = request_post(request_url=config_.GET_VIDEOS_FROM_POOL_URL, request_data=request_data)
  20. if result is None:
  21. break
  22. if result['code'] != 0:
  23. log_.info('batch_flag: {}, 获取流量池视频失败'.format(batch_flag))
  24. break
  25. videos.append(result['data'])
  26. return videos
  27. def get_videos_remain_view_count(app_type, videos_info):
  28. """
  29. 获取视频在流量池中的剩余可分发数
  30. :param app_type: 产品标识 type-int
  31. :param videos_info: 视频信息 (视频id, 流量池标记) type-list,[(video_id, flow_pool), ...]
  32. :return: data type-list,[(video_id, flow_pool, view_count), ...]
  33. """
  34. if not videos_info:
  35. return []
  36. videos = [{'videoId': info[0], 'flowPool': info[1]} for info in videos_info]
  37. request_data = {'appType': app_type, 'videos': videos}
  38. result = request_post(request_url=config_.GET_REMAIN_VIEW_COUNT_URL, request_data=request_data)
  39. if result is None:
  40. return []
  41. if result['code'] != 0:
  42. log_.info('获取视频在流量池中的剩余可分发数失败')
  43. return []
  44. data = [(item['videoId'], item['flowPool'], item['viewCount']) for item in result['data']]
  45. return data
  46. if __name__ == '__main__':
  47. # res = get_videos_from_pool(app_type=0)
  48. res = get_videos_remain_view_count(app_type=0, videos_info=[('12345', '#2#1#111')])
  49. print(res)