get_cover.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 get_cover(self, content_id: str):
  21. channel_info = await fetch_channel_info(self.pool, content_id)
  22. channel_content_id = channel_info[0]["channel_content_id"]
  23. channel_type = channel_info[0]["channel"]
  24. match channel_type:
  25. case 5:
  26. fetch_response = await fetch_aigc_cover(self.pool, channel_content_id)
  27. if fetch_response:
  28. image_oss = fetch_response[0]["oss_object_key"]
  29. cover = await self.montage_cover(image_oss, "aigc_db_pool")
  30. else:
  31. return self.error_response(
  32. error_code="402",
  33. error_message="can't find cover in aigc system",
  34. )
  35. case 6:
  36. fetch_response = await fetch_aigc_cover(self.pool, channel_content_id)
  37. if fetch_response:
  38. image_oss = fetch_response[0]["oss_object_key"]
  39. cover = await self.montage_cover(image_oss, "aigc_db_pool")
  40. else:
  41. return self.error_response(
  42. error_code="402",
  43. error_message="can't find cover in aigc system",
  44. )
  45. case 10:
  46. fetch_response = await fetch_long_video_cover(
  47. self.pool, channel_content_id
  48. )
  49. if fetch_response:
  50. image_oss = fetch_response[1]["image_path"]
  51. cover = await self.montage_cover(image_oss, "long_video_db_pool")
  52. else:
  53. return self.error_response(
  54. error_code="402",
  55. error_message="can't find cover in pq",
  56. )
  57. case _:
  58. return self.error_response(
  59. error_code="403",
  60. error_message="channel_type is not supported",
  61. )
  62. return self.success_response(
  63. data={
  64. "cover": cover,
  65. }
  66. )
  67. async def deal(self):
  68. content_id = self.params.get("content_id")
  69. if not content_id:
  70. return self.error_response(
  71. error_code="401",
  72. error_message="content_id is required",
  73. )
  74. else:
  75. return await self.get_cover(content_id)