relevant_top_videos.py 2.3 KB

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