get_cover.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from applications.service.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_db_pool":
  15. return self.aigc_prefix + oss_key + self.suffix
  16. case "long_video_db_pool":
  17. return self.pq_prefix + oss_key + self.suffix
  18. case _:
  19. return None
  20. async def fetch_cover_info(self, pool_name, channel_content_id: str):
  21. match pool_name:
  22. case "aigc_db_pool":
  23. fetch_response, sql_error = await fetch_aigc_cover(
  24. self.pool, channel_content_id
  25. )
  26. if sql_error:
  27. return self.error_response(
  28. error_code="111",
  29. error_message="sql_error!!\n{}".format(sql_error),
  30. )
  31. if fetch_response:
  32. image_oss = fetch_response[0]["oss_object_key"]
  33. cover = await self.montage_cover(image_oss, "aigc_db_pool")
  34. else:
  35. return self.error_response(
  36. error_code="402",
  37. error_message="can't find cover in aigc system",
  38. )
  39. case "long_video_db_pool":
  40. fetch_response, sql_error = await fetch_long_video_cover(
  41. self.pool, channel_content_id
  42. )
  43. if sql_error:
  44. return self.error_response(
  45. error_code="111",
  46. error_message="sql_error!!\n{}".format(sql_error),
  47. )
  48. if fetch_response:
  49. image_oss = fetch_response[1]["image_path"]
  50. cover = await self.montage_cover(image_oss, "long_video_db_pool")
  51. else:
  52. return self.error_response(
  53. error_code="402",
  54. error_message="can't find cover in pq",
  55. )
  56. case _:
  57. return self.error_response(
  58. error_code="403",
  59. error_message="pool_name is not supported",
  60. )
  61. return self.success_response(data={"cover": cover})
  62. async def get_cover(self, content_id: str, video_index: int, seed_video_id: str):
  63. if video_index == 2:
  64. return await self.fetch_cover_info("long_video_db_pool", seed_video_id)
  65. channel_info, sql_error = await fetch_channel_info(self.pool, content_id)
  66. if sql_error:
  67. return self.error_response(
  68. error_code="111",
  69. error_message="sql_error!!\n{}".format(sql_error),
  70. )
  71. if not channel_info:
  72. return self.error_response(
  73. error_code="402",
  74. error_message="can't find content info in aigc system",
  75. )
  76. channel_content_id = channel_info[0]["channel_content_id"]
  77. channel_type = channel_info[0]["channel"]
  78. match channel_type:
  79. case 5:
  80. return await self.fetch_cover_info("aigc_db_pool", channel_content_id)
  81. case 6:
  82. return await self.fetch_cover_info("aigc_db_pool", channel_content_id)
  83. case 10:
  84. return await self.fetch_cover_info(
  85. "long_video_db_pool", channel_content_id
  86. )
  87. case _:
  88. return self.error_response(
  89. error_code="403",
  90. error_message="channel_type is not supported",
  91. )
  92. async def deal(self):
  93. content_id = self.params.get("content_id")
  94. video_index = self.params.get("video_index")
  95. seed_video_id = self.params.get("seed_video_id")
  96. if not content_id:
  97. return self.error_response(
  98. error_code="401",
  99. error_message="content_id is required",
  100. )
  101. elif not video_index:
  102. return self.error_response(
  103. error_code="401",
  104. error_message="video_index is required",
  105. )
  106. elif not seed_video_id:
  107. return self.error_response(
  108. error_code="401",
  109. error_message="seed_video_id is required",
  110. )
  111. else:
  112. return await self.get_cover(content_id, int(video_index), seed_video_id)