fix webhook image

This commit is contained in:
jxxghp
2023-06-21 12:22:05 +08:00
parent 6abb3a77c6
commit 9f89d92cff
8 changed files with 85 additions and 17 deletions

View File

@ -11,7 +11,7 @@ from app.core.meta import MetaBase
from app.core.module import ModuleManager
from app.log import logger
from app.schemas import TransferInfo, TransferTorrent, ExistMediaInfo, DownloadingTorrent
from app.schemas.types import TorrentStatus, MediaType
from app.schemas.types import TorrentStatus, MediaType, MediaImageType
from app.utils.singleton import AbstractSingleton, Singleton
@ -84,13 +84,28 @@ class ChainBase(AbstractSingleton, metaclass=Singleton):
"""
return self.run_module("recognize_media", meta=meta, mtype=mtype, tmdbid=tmdbid)
def obtain_image(self, mediainfo: MediaInfo) -> Optional[MediaInfo]:
def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]:
"""
获取图片
补充抓取媒体信息图片
:param mediainfo: 识别的媒体信息
:return: 更新后的媒体信息
"""
return self.run_module("obtain_image", mediainfo=mediainfo)
return self.run_module("obtain_images", mediainfo=mediainfo)
def obtain_specific_image(self, mediaid: Union[str, int], mtype: MediaType,
image_type: MediaImageType, image_prefix: str = None,
season: int = None, episode: int = None) -> Optional[str]:
"""
获取指定媒体信息图片,返回图片地址
:param mediaid: 媒体ID
:param mtype: 媒体类型
:param image_type: 图片类型
:param image_prefix: 图片前缀
:param season: 季
:param episode: 集
"""
return self.run_module("obtain_specific_image", mediaid=mediaid, mtype=mtype,
image_type=image_type, season=season, episode=episode)
def douban_info(self, doubanid: str) -> Optional[dict]:
"""

View File

@ -31,7 +31,7 @@ class MediaChain(ChainBase):
return Context(meta=metainfo)
logger.info(f'{title} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}')
# 更新媒体图片
self.obtain_image(mediainfo=mediainfo)
self.obtain_images(mediainfo=mediainfo)
# 返回上下文
return Context(meta=metainfo, mediainfo=mediainfo, title=title, subtitle=subtitle)

View File

@ -61,7 +61,7 @@ class SubscribeChain(ChainBase):
logger.warn(f'未识别到媒体信息,标题:{title}tmdbid{tmdbid}')
return False
# 更新媒体图片
self.obtain_image(mediainfo=mediainfo)
self.obtain_images(mediainfo=mediainfo)
# 总集数
if mediainfo.type == MediaType.TV:
if not season:

View File

@ -116,7 +116,7 @@ class TransferChain(ChainBase):
mediainfo = arg_mediainfo
logger.info(f"{torrent.title} 识别为:{mediainfo.type.value} {mediainfo.title_year}")
# 更新媒体图片
self.obtain_image(mediainfo=mediainfo)
self.obtain_images(mediainfo=mediainfo)
# 转移
transferinfo: TransferInfo = self.transfer(mediainfo=mediainfo, path=torrent.path)
if not transferinfo or not transferinfo.target_path:

View File

@ -3,7 +3,7 @@ from typing import Any
from app.chain import ChainBase
from app.utils.http import WebUtils
from app.schemas.types import EventType
from app.schemas.types import EventType, MediaImageType, MediaType
class WebhookChain(ChainBase):
@ -69,14 +69,27 @@ class WebhookChain(ChainBase):
message_texts.append(f"剧情:{event_info.get('overview')}")
message_texts.append(f"时间:{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))}")
# 消息图片
if not event_info.get("image_url"):
image_url = _webhook_images.get(event_info.get("channel"))
else:
image_url = event_info.get("image_url")
# 消息内容
message_content = "\n".join(message_texts)
# 消息图片
image_url = event_info.get("image_url")
# 查询剧集图片
if event_info.get("tmdb_id") \
and event_info.get("season_id"):
mtype = MediaType.TV if event_info.get("item_type") == "TV" else MediaType.MOVIE
specific_image = self.obtain_specific_image(
mediaid=event_info.get("tmdb_id"),
mtype=mtype,
image_type=MediaImageType.Backdrop,
season=event_info.get("season_id"),
episode=event_info.get("episode_id")
)
if specific_image:
image_url = specific_image
# 使用默认图片
if not image_url:
image_url = _webhook_images.get(event_info.get("channel"))
# 发送消息
self.post_message(title=message_title, text=message_content, image=image_url)

View File

@ -27,7 +27,7 @@ class FanartModule(_ModuleBase):
def init_setting(self) -> Tuple[str, Union[str, bool]]:
return "FANART_API_KEY", True
def obtain_image(self, mediainfo: MediaInfo) -> Optional[MediaInfo]:
def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]:
"""
获取图片
:param mediainfo: 识别的媒体信息
@ -69,7 +69,7 @@ class FanartModule(_ModuleBase):
else:
image_url = cls._tv_url % queryid
try:
ret = RequestUtils(proxies=cls._proxies, timeout=5).get_res(image_url)
ret = RequestUtils(proxies=cls._proxies, timeout=10).get_res(image_url)
if ret:
return ret.json()
except Exception as err:

View File

@ -15,7 +15,7 @@ from app.modules.themoviedb.tmdb_cache import TmdbCache
from app.utils.dom import DomUtils
from app.utils.http import RequestUtils
from app.utils.system import SystemUtils
from app.schemas.types import MediaType
from app.schemas.types import MediaType, MediaImageType
class TheMovieDbModule(_ModuleBase):
@ -563,3 +563,37 @@ class TheMovieDbModule(_ModuleBase):
定时任务每10分钟调用一次
"""
self.cache.save()
def obtain_specific_image(self, mediaid: Union[str, int], mtype: MediaType,
image_type: MediaImageType, image_prefix: str = "w500",
season: int = None, episode: int = None) -> Optional[str]:
"""
获取指定媒体信息图片,返回图片地址
:param mediaid: 媒体ID
:param mtype: 媒体类型
:param image_type: 图片类型
:param image_prefix: 图片前缀
:param season: 季
:param episode: 集
"""
if not str(mediaid).isdigit():
return None
# 图片相对路径
image_path = None
image_prefix = image_prefix or "w500"
if not season and not episode:
tmdbinfo = self.tmdb.get_info(mtype=mtype, tmdbid=int(mediaid))
if tmdbinfo:
image_path = tmdbinfo.get(image_type.value)
elif season and episode:
episodeinfo = self.tmdb.get_tv_episode_detail(tmdbid=int(mediaid), season=season, episode=episode)
if episodeinfo:
image_path = episodeinfo.get("still_path")
elif season:
seasoninfo = self.tmdb.get_tv_season_detail(tmdbid=int(mediaid), season=season)
if seasoninfo:
image_path = seasoninfo.get(image_type.value)
if image_path:
return f"https://image.tmdb.org/t/p/{image_prefix}{image_path}"
return None

View File

@ -57,3 +57,9 @@ class ProgressKey(Enum):
Search = "search"
# 转移
FileTransfer = "filetransfer"
# 媒体图片类型
class MediaImageType(Enum):
Poster = "poster"
Backdrop = "backdrop"