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))
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]会被替换成实际的值
:param url: 请求地址
:param data: 请求数据
:param headers: 请求头
"""
if not self._host or not self._apikey:
return None
@ -893,9 +894,7 @@ class Emby(metaclass=Singleton):
.replace("[USER]", self.user)
try:
return RequestUtils(
headers={
"Content-Type": "application/json"
}
headers=headers,
).post_res(url=url, data=data)
except Exception as e:
logger.error(f"连接Emby出错" + str(e))

View File

@ -566,11 +566,12 @@ class Jellyfin(metaclass=Singleton):
logger.error(f"连接Jellyfin出错" + str(e))
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]会被替换成实际的值
:param url: 请求地址
:param data: 请求数据
:param headers: 请求头
"""
if not self._host or not self._apikey:
return None
@ -579,9 +580,7 @@ class Jellyfin(metaclass=Singleton):
.replace("[USER]", self.user)
try:
return RequestUtils(
headers={
"Content-Type": "application/json"
}
headers=headers
).post_res(url=url, data=data)
except Exception as e:
logger.error(f"连接Jellyfin出错" + str(e))

View File

@ -1,3 +1,4 @@
import base64
import copy
import datetime
import json
@ -10,6 +11,7 @@ import pytz
import zhconv
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from requests import RequestException
from app.chain.mediaserver import MediaServerChain
from app.chain.tmdb import TmdbChain
@ -22,6 +24,8 @@ from app.modules.plex import Plex
from app.plugins import _PluginBase
from app.schemas import MediaInfo, MediaServerItem
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
@ -658,7 +662,10 @@ class PersonMeta(_PluginBase):
try:
res = Emby().post_data(
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]:
return True
@ -676,7 +683,10 @@ class PersonMeta(_PluginBase):
try:
res = Jellyfin().post_data(
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]:
return True
@ -713,19 +723,40 @@ class PersonMeta(_PluginBase):
return __set_plex_iteminfo()
@staticmethod
@retry(RequestException, logger=logger)
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媒体项图片
"""
try:
url = f'[HOST]emby/Items/{itemid}/Images/Primary/0/Url?api_key=[APIKEY]'
data = json.dumps({'Url': imageurl})
res = Emby().post_data(url=url, data=data)
url = f'[HOST]emby/Items/{itemid}/Images/Primary?api_key=[APIKEY]'
res = Emby().post_data(
url=url,
data=_base64,
headers={
"Content-Type": "image/png"
}
)
if res and res.status_code in [200, 204]:
return True
else:
@ -765,11 +796,15 @@ class PersonMeta(_PluginBase):
return False
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":
return __set_jellyfin_item_image()
else:
return __set_plex_item_image()
return None
@staticmethod
def __get_chinese_name(personinfo: dict) -> str: