fix personmeta

This commit is contained in:
jxxghp 2023-10-01 12:28:41 +08:00
parent fcbfb63645
commit 32ff385444
3 changed files with 48 additions and 15 deletions

View File

@ -880,11 +880,12 @@ class Emby(metaclass=Singleton):
logger.error(f"连接Emby出错" + str(e)) logger.error(f"连接Emby出错" + str(e))
return None return None
def post_data(self, url: str, data: str = None) -> Optional[Response]: def post_data(self, url: str, data: str = None, headers: dict = None) -> Optional[Response]:
""" """
自定义URL从媒体服务器获取数据其中[HOST][APIKEY][USER]会被替换成实际的值 自定义URL从媒体服务器获取数据其中[HOST][APIKEY][USER]会被替换成实际的值
:param url: 请求地址 :param url: 请求地址
:param data: 请求数据 :param data: 请求数据
:param headers: 请求头
""" """
if not self._host or not self._apikey: if not self._host or not self._apikey:
return None return None
@ -893,9 +894,7 @@ class Emby(metaclass=Singleton):
.replace("[USER]", self.user) .replace("[USER]", self.user)
try: try:
return RequestUtils( return RequestUtils(
headers={ headers=headers,
"Content-Type": "application/json"
}
).post_res(url=url, data=data) ).post_res(url=url, data=data)
except Exception as e: except Exception as e:
logger.error(f"连接Emby出错" + str(e)) logger.error(f"连接Emby出错" + str(e))

View File

@ -566,11 +566,12 @@ class Jellyfin(metaclass=Singleton):
logger.error(f"连接Jellyfin出错" + str(e)) logger.error(f"连接Jellyfin出错" + str(e))
return None return None
def post_data(self, url: str, data: str = None): def post_data(self, url: str, data: str = None, headers: dict = None) -> Optional[Response]:
""" """
自定义URL从媒体服务器获取数据其中[HOST][APIKEY][USER]会被替换成实际的值 自定义URL从媒体服务器获取数据其中[HOST][APIKEY][USER]会被替换成实际的值
:param url: 请求地址 :param url: 请求地址
:param data: 请求数据 :param data: 请求数据
:param headers: 请求头
""" """
if not self._host or not self._apikey: if not self._host or not self._apikey:
return None return None
@ -579,9 +580,7 @@ class Jellyfin(metaclass=Singleton):
.replace("[USER]", self.user) .replace("[USER]", self.user)
try: try:
return RequestUtils( return RequestUtils(
headers={ headers=headers
"Content-Type": "application/json"
}
).post_res(url=url, data=data) ).post_res(url=url, data=data)
except Exception as e: except Exception as e:
logger.error(f"连接Jellyfin出错" + str(e)) logger.error(f"连接Jellyfin出错" + str(e))

View File

@ -1,3 +1,4 @@
import base64
import copy import copy
import datetime import datetime
import json import json
@ -10,6 +11,7 @@ import pytz
import zhconv import zhconv
from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger from apscheduler.triggers.cron import CronTrigger
from requests import RequestException
from app.chain.mediaserver import MediaServerChain from app.chain.mediaserver import MediaServerChain
from app.chain.tmdb import TmdbChain from app.chain.tmdb import TmdbChain
@ -22,6 +24,8 @@ from app.modules.plex import Plex
from app.plugins import _PluginBase from app.plugins import _PluginBase
from app.schemas import MediaInfo, MediaServerItem from app.schemas import MediaInfo, MediaServerItem
from app.schemas.types import EventType, MediaType from app.schemas.types import EventType, MediaType
from app.utils.common import retry
from app.utils.http import RequestUtils
from app.utils.string import StringUtils from app.utils.string import StringUtils
@ -658,7 +662,10 @@ class PersonMeta(_PluginBase):
try: try:
res = Emby().post_data( res = Emby().post_data(
url=f'[HOST]emby/Items/{itemid}?api_key=[APIKEY]&reqformat=json', url=f'[HOST]emby/Items/{itemid}?api_key=[APIKEY]&reqformat=json',
data=json.dumps(iteminfo) data=json.dumps(iteminfo),
headers={
"Content-Type": "application/json"
}
) )
if res and res.status_code in [200, 204]: if res and res.status_code in [200, 204]:
return True return True
@ -676,7 +683,10 @@ class PersonMeta(_PluginBase):
try: try:
res = Jellyfin().post_data( res = Jellyfin().post_data(
url=f'[HOST]Items/{itemid}?api_key=[APIKEY]', url=f'[HOST]Items/{itemid}?api_key=[APIKEY]',
data=json.dumps(iteminfo) data=json.dumps(iteminfo),
headers={
"Content-Type": "application/json"
}
) )
if res and res.status_code in [200, 204]: if res and res.status_code in [200, 204]:
return True return True
@ -713,19 +723,40 @@ class PersonMeta(_PluginBase):
return __set_plex_iteminfo() return __set_plex_iteminfo()
@staticmethod @staticmethod
@retry(RequestException, logger=logger)
def set_item_image(server: str, itemid: str, imageurl: str): def set_item_image(server: str, itemid: str, imageurl: str):
""" """
更新媒体项图片 更新媒体项图片
""" """
def __set_emby_item_image(): def __download_image():
"""
下载图片
"""
try:
logger.info(f"正在下载图片:{imageurl} ...")
r = RequestUtils().get_res(url=imageurl, raise_exception=True)
if r:
return base64.b64encode(r.content).decode()
else:
logger.info(f"{imageurl} 图片下载失败,请检查网络连通性")
except Exception as err:
logger.error(f"下载图片失败:{err}")
return None
def __set_emby_item_image(_base64: str):
""" """
更新Emby媒体项图片 更新Emby媒体项图片
""" """
try: try:
url = f'[HOST]emby/Items/{itemid}/Images/Primary/0/Url?api_key=[APIKEY]' url = f'[HOST]emby/Items/{itemid}/Images/Primary?api_key=[APIKEY]'
data = json.dumps({'Url': imageurl}) res = Emby().post_data(
res = Emby().post_data(url=url, data=data) url=url,
data=_base64,
headers={
"Content-Type": "image/png"
}
)
if res and res.status_code in [200, 204]: if res and res.status_code in [200, 204]:
return True return True
else: else:
@ -765,11 +796,15 @@ class PersonMeta(_PluginBase):
return False return False
if server == "emby": if server == "emby":
return __set_emby_item_image() # 下载图片获取base64
image_base64 = __download_image()
if image_base64:
return __set_emby_item_image(image_base64)
elif server == "jellyfin": elif server == "jellyfin":
return __set_jellyfin_item_image() return __set_jellyfin_item_image()
else: else:
return __set_plex_item_image() return __set_plex_item_image()
return None
@staticmethod @staticmethod
def __get_chinese_name(personinfo: dict) -> str: def __get_chinese_name(personinfo: dict) -> str: