From b310367d2568925de4ab50eed867d29f8ed9c7a9 Mon Sep 17 00:00:00 2001 From: jeblove <249972068@qq.com> Date: Sun, 10 Mar 2024 17:50:01 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=92=AD=E6=94=BE=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=E5=9B=BE=E7=89=87=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/emby/emby.py | 39 ++++++++++++++++++++++++++------ app/modules/jellyfin/jellyfin.py | 30 +++++++++++++++++++++--- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index 67ddeefe..559168f8 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -436,20 +436,45 @@ class Emby: return None req_url = "%semby/Items/%s/RemoteImages?api_key=%s" % (self._host, item_id, self._apikey) try: - res = RequestUtils().get_res(req_url) + res = RequestUtils(timeout=10).get_res(req_url) if res: images = res.json().get("Images") - for image in images: - if image.get("ProviderName") == "TheMovieDb" and image.get("Type") == image_type: - return image.get("Url") - else: - logger.error(f"Items/RemoteImages 未获取到返回数据") - return None + if images: + for image in images: + logger.info(image) + if image.get("ProviderName") == "TheMovieDb" and image.get("Type") == image_type: + return image.get("Url") + # 数据为空 + logger.info(f"Items/RemoteImages 未获取到返回数据,采用本地图片") + return self.generate_external_image_link(item_id, image_type) except Exception as e: logger.error(f"连接Items/Id/RemoteImages出错:" + str(e)) return None return None + def generate_external_image_link(self, item_id, image_type): + """ + 根据ItemId和imageType查询本地对应图片 + :param item_id: 在Emby中的ID + :param image_type: 图片类型,如Backdrop、Primary + """ + if self._playhost is None or self._playhost == "": + logger.error("Emby外网播放地址未能获取或为空") + return None + + req_url = "%sItems/%s/Images/%s" % (self._playhost, item_id, image_type) + try: + res = RequestUtils().get_res(req_url) + if res or res.status_code == 404: + logger.info("影片图片链接:{}".format(res.url)) + return res.url + else: + logger.info("Items/Id/Images 未获取到返回数据或无该影片{}图片".format(image_type)) + return None + except Exception as e: + logger.error(f"连接Items/Id/Images出错:" + str(e)) + return None + def __refresh_emby_library_by_id(self, item_id: str) -> bool: """ 通知Emby刷新一个项目的媒体库 diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index 3f65b82b..3fd8d5e1 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -422,20 +422,44 @@ class Jellyfin: return None req_url = "%sItems/%s/RemoteImages?api_key=%s" % (self._host, item_id, self._apikey) try: - res = RequestUtils().get_res(req_url) + res = RequestUtils(timeout=10).get_res(req_url) if res: images = res.json().get("Images") for image in images: if image.get("ProviderName") == "TheMovieDb" and image.get("Type") == image_type: return image.get("Url") + # return images[0].get("Url") # 首选无则返回第一张 else: - logger.error(f"Items/RemoteImages 未获取到返回数据") - return None + logger.info(f"Items/RemoteImages 未获取到返回数据,采用本地图片") + return self.generate_external_image_link(item_id, image_type) except Exception as e: logger.error(f"连接Items/Id/RemoteImages出错:" + str(e)) return None return None + def generate_external_image_link(self, item_id, image_type): + """ + 根据ItemId和imageType查询本地对应图片 + :param item_id: 在Jellyfin中的ID + :param image_type: 图片类型,如Backdrop、Primary + """ + if self._playhost is None or self._playhost == "": + logger.error("Jellyfin外网播放地址未能获取或为空") + return None + + req_url = "%sItems/%s/Images/%s" % (self._playhost, item_id, image_type) + try: + res = RequestUtils().get_res(req_url) + if res or res.status_code == 404: + logger.info("影片图片链接:{}".format(res.url)) + return res.url + else: + logger.info("Items/Id/Images 未获取到返回数据或无该影片{}图片".format(image_type)) + return None + except Exception as e: + logger.error(f"连接Items/Id/Images出错:" + str(e)) + return None + def refresh_root_library(self) -> bool: """ 通知Jellyfin刷新整个媒体库