relevant_top_videos.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. df = pd.read_excel(filepath)
  10. relevant_videos = {}
  11. head_videos = []
  12. for i in range(len(df)):
  13. dt = df.iloc[i]['dt']
  14. head_vid = int(df.iloc[i]['headVid'])
  15. order = int(df.iloc[i]['order'])
  16. recommend_vid = int(df.iloc[i]['recommendVid'])
  17. start_time = int(df.iloc[i]['startTime'].timestamp())
  18. finish_time = int(df.iloc[i]['finishTime'].timestamp())
  19. item = {
  20. 'order': order,
  21. 'recommend_vid': recommend_vid,
  22. 'start_time': start_time,
  23. 'finish_time': finish_time
  24. }
  25. if head_vid in head_videos:
  26. relevant_videos[head_vid].append(item)
  27. else:
  28. relevant_videos[head_vid] = [item]
  29. head_videos.append(head_vid)
  30. print(head_videos)
  31. return relevant_videos
  32. def update_relevant_videos_to_redis(relevant_videos):
  33. if not relevant_videos:
  34. return
  35. for head_vid, videos in relevant_videos.items():
  36. # 拼接key
  37. key_name = '{}{}'.format(config_.RELEVANT_VIDEOS_WITH_OP_KEY_NAME, head_vid)
  38. # 将数据转换为json
  39. videos_json = json.dumps(videos)
  40. # 以最晚结束的视频的结束时间 - 当前时间 + 5s 作为key的过期时间
  41. finish_time_list = [item['finish_time'] for item in videos]
  42. expire_time = max(finish_time_list) - int(time.time()) + 5
  43. if expire_time <= 0:
  44. return
  45. # 存入redis
  46. redis_helper = RedisHelper()
  47. redis_helper.set_data_to_redis(key_name=key_name, value=videos_json, expire_time=expire_time)
  48. if __name__ == '__main__':
  49. relevant_videos = get_relevant_videos_with_excel()
  50. update_relevant_videos_to_redis(relevant_videos=relevant_videos)