relevant_top_videos.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import pandas as pd
  2. import json
  3. import time
  4. from config import set_config
  5. from db_helper import RedisHelper
  6. config_, _ = set_config()
  7. def get_relevant_videos_with_excel():
  8. filepath = './data/relevant.xlsx'
  9. # startTime 和 finishTime 的数据类型指定为str
  10. df = pd.read_excel(filepath, converters={'startTime': str, 'finishTime': str})
  11. relevant_videos = {}
  12. head_videos = []
  13. for i in range(len(df)):
  14. dt = df.iloc[i]['dt']
  15. head_vid = int(df.iloc[i]['headVid'])
  16. order = int(df.iloc[i]['order'])
  17. recommend_vid = int(df.iloc[i]['recommendVid'])
  18. # 将时间转换为10位时间戳
  19. start_time = int(time.mktime(time.strptime(df.iloc[i]['startTime'].split(r'.')[0], '%Y-%m-%d %H:%M:%S')))
  20. finish_time = int(time.mktime(time.strptime(df.iloc[i]['finishTime'].split(r'.')[0], '%Y-%m-%d %H:%M:%S')))
  21. item = {
  22. 'order': order,
  23. 'recommend_vid': recommend_vid,
  24. 'start_time': start_time,
  25. 'finish_time': finish_time
  26. }
  27. if head_vid in head_videos:
  28. relevant_videos[head_vid].append(item)
  29. else:
  30. relevant_videos[head_vid] = [item]
  31. head_videos.append(head_vid)
  32. print(head_videos)
  33. return relevant_videos
  34. def update_relevant_videos_to_redis(relevant_videos):
  35. if not relevant_videos:
  36. return
  37. for head_vid, videos in relevant_videos.items():
  38. # 拼接key
  39. key_name = '{}{}'.format(config_.RELEVANT_VIDEOS_WITH_OP_KEY_NAME, head_vid)
  40. # 将数据转换为json
  41. videos_json = json.dumps(videos)
  42. # 以最晚结束的视频的结束时间 - 当前时间 + 5s 作为key的过期时间
  43. finish_time_list = [item['finish_time'] for item in videos]
  44. expire_time = max(finish_time_list) - int(time.time()) + 5
  45. if expire_time <= 0:
  46. return
  47. # 存入redis
  48. redis_helper = RedisHelper()
  49. redis_helper.set_data_to_redis(key_name=key_name, value=videos_json, expire_time=expire_time)
  50. print('head_vid = {} relevant videos update finished!'.format(head_vid))
  51. if __name__ == '__main__':
  52. relevant_videos = get_relevant_videos_with_excel()
  53. update_relevant_videos_to_redis(relevant_videos=relevant_videos)