get_cover.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from applications.utils.response import Response
  2. from applications.utils import fetch_channel_info
  3. from applications.utils import fetch_aigc_cover
  4. from applications.utils import fetch_long_video_cover
  5. class GetCoverService(Response):
  6. def __init__(self, pool, params):
  7. self.pool = pool
  8. self.params = params
  9. self.aigc_prefix = "http://res.cybertogether.net/"
  10. self.pq_prefix = "https://rescdn.yishihui.com/"
  11. self.suffix = "?x-oss-process=image/resize,m_fill,w_450,h_360/format,jpg"
  12. async def montage_cover(self, oss_key, pool_name):
  13. match pool_name:
  14. case "aigc":
  15. if oss_key.startswith("http"):
  16. return oss_key + self.suffix
  17. return self.aigc_prefix + oss_key + self.suffix
  18. case "long_video":
  19. if oss_key.startswith("http"):
  20. return oss_key + self.suffix
  21. return self.pq_prefix + oss_key + self.suffix
  22. case _:
  23. return None
  24. async def fetch_cover_info(self, pool_name, channel_content_id: str):
  25. match pool_name:
  26. case "aigc":
  27. fetch_response, sql_error = await fetch_aigc_cover(
  28. self.pool, channel_content_id
  29. )
  30. if sql_error:
  31. return self.error_response(
  32. error_code="111",
  33. error_message="sql_error!!\n{}".format(sql_error),
  34. )
  35. if fetch_response:
  36. image_oss = fetch_response[0]["oss_object_key"]
  37. if image_oss:
  38. cover = await self.montage_cover(image_oss, "aigc")
  39. else:
  40. image_url = fetch_response[0]["image_url"]
  41. if not image_url:
  42. return await self.fetch_cover_info(
  43. "long_video", channel_content_id
  44. )
  45. else:
  46. cover = await self.montage_cover(image_url, "aigc")
  47. else:
  48. return await self.fetch_cover_info("long_video", channel_content_id)
  49. case "long_video":
  50. fetch_response, sql_error = await fetch_long_video_cover(
  51. self.pool, channel_content_id
  52. )
  53. if sql_error:
  54. return self.error_response(
  55. error_code="111",
  56. error_message="sql_error!!\n{}".format(sql_error),
  57. )
  58. if fetch_response:
  59. image_oss = fetch_response[1]["image_path"]
  60. cover = await self.montage_cover(image_oss, "long_video")
  61. else:
  62. return self.error_response(
  63. error_code="402",
  64. error_message="can't find cover in pq",
  65. )
  66. case _:
  67. return self.error_response(
  68. error_code="403",
  69. error_message="pool_name is not supported",
  70. )
  71. return self.success_response(data={"cover": cover})
  72. async def get_cover(self, content_id: str, video_index: int, seed_video_id: str):
  73. if video_index == 2:
  74. return await self.fetch_cover_info("long_video", seed_video_id)
  75. channel_info, sql_error = await fetch_channel_info(self.pool, content_id)
  76. if sql_error:
  77. return self.error_response(
  78. error_code="111",
  79. error_message="sql_error!!\n{}".format(sql_error),
  80. )
  81. if not channel_info:
  82. return self.error_response(
  83. error_code="402",
  84. error_message="can't find content info in aigc system",
  85. )
  86. channel_content_id = channel_info[0]["channel_content_id"]
  87. channel_type = channel_info[0]["channel"]
  88. match channel_type:
  89. case 5:
  90. return await self.fetch_cover_info("aigc", channel_content_id)
  91. case 6:
  92. return await self.fetch_cover_info("aigc", channel_content_id)
  93. case 10:
  94. return await self.fetch_cover_info("long_video", channel_content_id)
  95. case _:
  96. return self.error_response(
  97. error_code="403",
  98. error_message="channel_type is not supported",
  99. )
  100. async def deal(self):
  101. content_id = self.params.get("content_id")
  102. video_index = self.params.get("video_index")
  103. seed_video_id = self.params.get("seed_video_id")
  104. if not content_id:
  105. return self.error_response(
  106. error_code="401",
  107. error_message="content_id is required",
  108. )
  109. elif not video_index:
  110. return self.error_response(
  111. error_code="401",
  112. error_message="video_index is required",
  113. )
  114. elif not seed_video_id:
  115. return self.error_response(
  116. error_code="401",
  117. error_message="seed_video_id is required",
  118. )
  119. else:
  120. return await self.get_cover(content_id, int(video_index), seed_video_id)