sourceIdRoute.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. """
  2. @author: luojunhui
  3. 生成sourceId
  4. """
  5. import datetime
  6. import hashlib
  7. import random
  8. import time
  9. import urllib.parse
  10. from config import source_id_db, minigram_info
  11. from applications.pqFunctions import getPQVideoDetail
  12. def createPath(video_id, shared_uid, gh_id, business_type, publish_type, index):
  13. """
  14. :param publish_type: 发布类型
  15. :param index: 视频位置信息
  16. :param business_type: 业务类型
  17. :param gh_id: 公众号账号的gh_id
  18. :param video_id: 视频 id
  19. :param shared_uid: 分享 id
  20. """
  21. def generate_source_id():
  22. """
  23. generate_source_id
  24. :return:
  25. """
  26. timestamp = str(int(time.time() * 1000))
  27. random_str = str(random.randint(1000, 9999))
  28. hash_input = f"{timestamp}-{random_str}"
  29. return hashlib.md5(hash_input.encode()).hexdigest()
  30. match business_type:
  31. case 1:
  32. # 公众号投流
  33. source_id = "GzhTouLiu_Articles_{}_".format(gh_id) + generate_source_id()
  34. url = f"pages/user-videos?id={video_id}&su={shared_uid}&fromGzh=1&index={index}&publishType={publish_type}&rootSourceId={source_id}"
  35. return source_id, f"pages/category?jumpPage={urllib.parse.quote(url, safe='')}"
  36. case 2:
  37. # 小程序投流
  38. source_id = "GzhTouLiu_Minigram_{}_".format(gh_id) + generate_source_id()
  39. url = f"pages/user-videos?id={video_id}&su={shared_uid}&fromGzh=1&index={index}&publishType={publish_type}&rootSourceId={source_id}"
  40. return source_id, f"pages/category?jumpPage={urllib.parse.quote(url, safe='')}"
  41. case 3:
  42. # 企微
  43. source_id = "GzhTouLiu_Wecom_{}_".format(gh_id) + generate_source_id()
  44. url = f"pages/user-videos?id={video_id}&su={shared_uid}&fromGzh=1&index={index}&publishType={publish_type}&rootSourceId={source_id}"
  45. return source_id, f"pages/category?jumpPage={urllib.parse.quote(url, safe='')}"
  46. return None, None
  47. async def saveSourceToDB(db_client, params, request_id):
  48. """
  49. 将sourceId信息存储到数据库
  50. :param request_id: 请求id
  51. :param db_client:
  52. :param params:
  53. :return:
  54. """
  55. # input 信息
  56. try:
  57. # 视频信息
  58. video_id = params['videoId']
  59. pq_detail = await getPQVideoDetail(video_id)
  60. video_cover = pq_detail['data'][0]['shareImgPath']
  61. video_title = pq_detail['data'][0]['title']
  62. uid = pq_detail['data'][0]['user']['uid']
  63. # 公众号信息
  64. account_name = params['accountName']
  65. gh_id = params['ghId']
  66. # 文章信息
  67. article_title = params['articleTitle']
  68. # 业务信息
  69. business_type = params['businessType']
  70. publish_type = params['publishType']
  71. position = params['position']
  72. cooperation = params['cooperation']
  73. except Exception as e:
  74. response = {
  75. "error": str(e),
  76. "message": "params error",
  77. "requestId": request_id
  78. }
  79. return response
  80. # source_id, gzh_path
  81. source_id, share_path = createPath(video_id, uid, gh_id, business_type, publish_type, position)
  82. # minigram_info
  83. choose_minigram = minigram_info[4]
  84. minigram_name = choose_minigram['name']
  85. minigram_id = choose_minigram['wxId']
  86. sql = f"""
  87. INSERT INTO {source_id_db}
  88. (video_id, video_cover, video_title, uid, gh_id, account_name, article_title, business_type, publish_type, cooperation, position, source_id, share_path, create_time, minigram_name, minigram_id)
  89. values
  90. (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
  91. """
  92. try:
  93. await db_client.asyncInsert(
  94. sql=sql,
  95. params=(
  96. video_id,
  97. video_cover,
  98. video_title,
  99. uid,
  100. gh_id,
  101. account_name,
  102. article_title,
  103. business_type,
  104. publish_type,
  105. cooperation,
  106. position,
  107. source_id,
  108. share_path,
  109. datetime.datetime.now().__str__(),
  110. minigram_name,
  111. minigram_id
  112. )
  113. )
  114. response = {
  115. "requestId": request_id,
  116. "message": "success"
  117. }
  118. except Exception as e:
  119. response = {
  120. "requestId": request_id,
  121. "error": str(e),
  122. "info": "db error"
  123. }
  124. return response