add webhook schemas
This commit is contained in:
@ -6,7 +6,7 @@ from app.core.context import MediaInfo
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase
|
||||
from app.modules.emby.emby import Emby
|
||||
from app.schemas import ExistMediaInfo, RefreshMediaItem
|
||||
from app.schemas import ExistMediaInfo, RefreshMediaItem, WebhookEventInfo
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ class EmbyModule(_ModuleBase):
|
||||
# Emby认证
|
||||
return self.emby.authenticate(name, password)
|
||||
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[dict]:
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Webhook报文体
|
||||
:param body: 请求体
|
||||
|
@ -5,7 +5,7 @@ from typing import List, Optional, Union, Dict, Generator
|
||||
|
||||
from app.core.config import settings
|
||||
from app.log import logger
|
||||
from app.schemas import RefreshMediaItem
|
||||
from app.schemas import RefreshMediaItem, WebhookEventInfo
|
||||
from app.schemas.types import MediaType
|
||||
from app.utils.http import RequestUtils
|
||||
from app.utils.singleton import Singleton
|
||||
@ -537,58 +537,58 @@ class Emby(metaclass=Singleton):
|
||||
logger.error(f"连接Users/Items出错:" + str(e))
|
||||
yield {}
|
||||
|
||||
def get_webhook_message(self, message_str: str) -> dict:
|
||||
def get_webhook_message(self, message_str: str) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Emby Webhook报文
|
||||
"""
|
||||
message = json.loads(message_str)
|
||||
eventItem = {'event': message.get('Event', ''), "channel": "emby"}
|
||||
eventItem = WebhookEventInfo(event=message.get('Event', ''), channel="emby")
|
||||
if message.get('Item'):
|
||||
if message.get('Item', {}).get('Type') == 'Episode':
|
||||
eventItem['item_type'] = "TV"
|
||||
eventItem['item_name'] = "%s %s%s %s" % (
|
||||
eventItem.item_type = "TV"
|
||||
eventItem.item_name = "%s %s%s %s" % (
|
||||
message.get('Item', {}).get('SeriesName'),
|
||||
"S" + str(message.get('Item', {}).get('ParentIndexNumber')),
|
||||
"E" + str(message.get('Item', {}).get('IndexNumber')),
|
||||
message.get('Item', {}).get('Name'))
|
||||
eventItem['item_id'] = message.get('Item', {}).get('SeriesId')
|
||||
eventItem['season_id'] = message.get('Item', {}).get('ParentIndexNumber')
|
||||
eventItem['episode_id'] = message.get('Item', {}).get('IndexNumber')
|
||||
eventItem.item_id = message.get('Item', {}).get('SeriesId')
|
||||
eventItem.season_id = message.get('Item', {}).get('ParentIndexNumber')
|
||||
eventItem.episode_id = message.get('Item', {}).get('IndexNumber')
|
||||
elif message.get('Item', {}).get('Type') == 'Audio':
|
||||
eventItem['item_type'] = "AUD"
|
||||
eventItem.item_type = "AUD"
|
||||
album = message.get('Item', {}).get('Album')
|
||||
file_name = message.get('Item', {}).get('FileName')
|
||||
eventItem['item_name'] = album
|
||||
eventItem['overview'] = file_name
|
||||
eventItem['item_id'] = message.get('Item', {}).get('AlbumId')
|
||||
eventItem.item_name = album
|
||||
eventItem.overview = file_name
|
||||
eventItem.item_id = message.get('Item', {}).get('AlbumId')
|
||||
else:
|
||||
eventItem['item_type'] = "MOV"
|
||||
eventItem['item_name'] = "%s %s" % (
|
||||
eventItem.item_type = "MOV"
|
||||
eventItem.item_name = "%s %s" % (
|
||||
message.get('Item', {}).get('Name'), "(" + str(message.get('Item', {}).get('ProductionYear')) + ")")
|
||||
eventItem['item_path'] = message.get('Item', {}).get('Path')
|
||||
eventItem['item_id'] = message.get('Item', {}).get('Id')
|
||||
eventItem.item_path = message.get('Item', {}).get('Path')
|
||||
eventItem.item_id = message.get('Item', {}).get('Id')
|
||||
|
||||
eventItem['tmdb_id'] = message.get('Item', {}).get('ProviderIds', {}).get('Tmdb')
|
||||
eventItem.tmdb_id = message.get('Item', {}).get('ProviderIds', {}).get('Tmdb')
|
||||
if message.get('Item', {}).get('Overview') and len(message.get('Item', {}).get('Overview')) > 100:
|
||||
eventItem['overview'] = str(message.get('Item', {}).get('Overview'))[:100] + "..."
|
||||
eventItem.overview = str(message.get('Item', {}).get('Overview'))[:100] + "..."
|
||||
else:
|
||||
eventItem['overview'] = message.get('Item', {}).get('Overview')
|
||||
eventItem['percentage'] = message.get('TranscodingInfo', {}).get('CompletionPercentage')
|
||||
if not eventItem['percentage']:
|
||||
eventItem.overview = message.get('Item', {}).get('Overview')
|
||||
eventItem.percentage = message.get('TranscodingInfo', {}).get('CompletionPercentage')
|
||||
if not eventItem.percentage:
|
||||
if message.get('PlaybackInfo', {}).get('PositionTicks'):
|
||||
eventItem['percentage'] = message.get('PlaybackInfo', {}).get('PositionTicks') / \
|
||||
message.get('Item', {}).get('RunTimeTicks') * 100
|
||||
eventItem.percentage = message.get('PlaybackInfo', {}).get('PositionTicks') / \
|
||||
message.get('Item', {}).get('RunTimeTicks') * 100
|
||||
if message.get('Session'):
|
||||
eventItem['ip'] = message.get('Session').get('RemoteEndPoint')
|
||||
eventItem['device_name'] = message.get('Session').get('DeviceName')
|
||||
eventItem['client'] = message.get('Session').get('Client')
|
||||
eventItem.ip = message.get('Session').get('RemoteEndPoint')
|
||||
eventItem.device_name = message.get('Session').get('DeviceName')
|
||||
eventItem.client = message.get('Session').get('Client')
|
||||
if message.get("User"):
|
||||
eventItem['user_name'] = message.get("User").get('Name')
|
||||
eventItem.user_name = message.get("User").get('Name')
|
||||
|
||||
# 获取消息图片
|
||||
if eventItem.get("item_id"):
|
||||
if eventItem.item_id:
|
||||
# 根据返回的item_id去调用媒体服务器获取
|
||||
eventItem['image_url'] = self.get_remote_image_by_id(item_id=eventItem.get('item_id'),
|
||||
image_type="Backdrop")
|
||||
eventItem.image_url = self.get_remote_image_by_id(item_id=eventItem.item_id,
|
||||
image_type="Backdrop")
|
||||
|
||||
return eventItem
|
||||
|
@ -7,7 +7,7 @@ from app.core.context import MediaInfo
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase
|
||||
from app.modules.jellyfin.jellyfin import Jellyfin
|
||||
from app.schemas import ExistMediaInfo
|
||||
from app.schemas import ExistMediaInfo, WebhookEventInfo
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ class JellyfinModule(_ModuleBase):
|
||||
# Jellyfin认证
|
||||
return self.jellyfin.authenticate(name, password)
|
||||
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[dict]:
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Webhook报文体
|
||||
:param body: 请求体
|
||||
|
@ -4,7 +4,7 @@ from typing import List, Union, Optional, Dict, Generator
|
||||
|
||||
from app.core.config import settings
|
||||
from app.log import logger
|
||||
from app.schemas import MediaType
|
||||
from app.schemas import MediaType, WebhookEventInfo
|
||||
from app.utils.http import RequestUtils
|
||||
from app.utils.singleton import Singleton
|
||||
from app.utils.string import StringUtils
|
||||
@ -365,21 +365,22 @@ class Jellyfin(metaclass=Singleton):
|
||||
logger.error(f"连接Library/Refresh出错:" + str(e))
|
||||
return False
|
||||
|
||||
def get_webhook_message(self, message: dict) -> dict:
|
||||
def get_webhook_message(self, message: dict) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Jellyfin报文
|
||||
"""
|
||||
eventItem = {'event': message.get('NotificationType', ''),
|
||||
'item_name': message.get('Name'),
|
||||
'user_name': message.get('NotificationUsername'),
|
||||
"channel": "jellyfin"
|
||||
}
|
||||
eventItem = WebhookEventInfo(
|
||||
event=message.get('NotificationType', ''),
|
||||
item_name=message.get('Name'),
|
||||
user_name=message.get('NotificationUsername'),
|
||||
channel="jellyfin"
|
||||
)
|
||||
|
||||
# 获取消息图片
|
||||
if eventItem.get("item_id"):
|
||||
if eventItem.item_id:
|
||||
# 根据返回的item_id去调用媒体服务器获取
|
||||
eventItem['image_url'] = self.get_remote_image_by_id(item_id=eventItem.get('item_id'),
|
||||
image_type="Backdrop")
|
||||
eventItem.image_url = self.get_remote_image_by_id(item_id=eventItem.item_id,
|
||||
image_type="Backdrop")
|
||||
|
||||
return eventItem
|
||||
|
||||
|
@ -6,7 +6,7 @@ from app.core.context import MediaInfo
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase
|
||||
from app.modules.plex.plex import Plex
|
||||
from app.schemas import ExistMediaInfo, RefreshMediaItem
|
||||
from app.schemas import ExistMediaInfo, RefreshMediaItem, WebhookEventInfo
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ class PlexModule(_ModuleBase):
|
||||
def init_setting(self) -> Tuple[str, Union[str, bool]]:
|
||||
return "MEDIASERVER", "plex"
|
||||
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[dict]:
|
||||
def webhook_parser(self, body: Any, form: Any, args: Any) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Webhook报文体
|
||||
:param body: 请求体
|
||||
|
@ -8,7 +8,7 @@ from plexapi.server import PlexServer
|
||||
|
||||
from app.core.config import settings
|
||||
from app.log import logger
|
||||
from app.schemas import RefreshMediaItem, MediaType
|
||||
from app.schemas import RefreshMediaItem, MediaType, WebhookEventInfo
|
||||
from app.utils.singleton import Singleton
|
||||
|
||||
|
||||
@ -317,7 +317,7 @@ class Plex(metaclass=Singleton):
|
||||
logger.error(f"获取媒体库列表出错:{err}")
|
||||
yield {}
|
||||
|
||||
def get_webhook_message(self, message_str: str) -> dict:
|
||||
def get_webhook_message(self, message_str: str) -> WebhookEventInfo:
|
||||
"""
|
||||
解析Plex报文
|
||||
eventItem 字段的含义
|
||||
@ -328,44 +328,44 @@ class Plex(metaclass=Singleton):
|
||||
overview 剧情描述
|
||||
"""
|
||||
message = json.loads(message_str)
|
||||
eventItem = {'event': message.get('event', ''), "channel": "plex"}
|
||||
eventItem = WebhookEventInfo(event=message.get('Event', ''), channel="plex")
|
||||
if message.get('Metadata'):
|
||||
if message.get('Metadata', {}).get('type') == 'episode':
|
||||
eventItem['item_type'] = "TV"
|
||||
eventItem['item_name'] = "%s %s%s %s" % (
|
||||
eventItem.item_type = "TV"
|
||||
eventItem.item_name = "%s %s%s %s" % (
|
||||
message.get('Metadata', {}).get('grandparentTitle'),
|
||||
"S" + str(message.get('Metadata', {}).get('parentIndex')),
|
||||
"E" + str(message.get('Metadata', {}).get('index')),
|
||||
message.get('Metadata', {}).get('title'))
|
||||
eventItem['item_id'] = message.get('Metadata', {}).get('ratingKey')
|
||||
eventItem['season_id'] = message.get('Metadata', {}).get('parentIndex')
|
||||
eventItem['episode_id'] = message.get('Metadata', {}).get('index')
|
||||
eventItem.item_id = message.get('Metadata', {}).get('ratingKey')
|
||||
eventItem.season_id = message.get('Metadata', {}).get('parentIndex')
|
||||
eventItem.episode_id = message.get('Metadata', {}).get('index')
|
||||
|
||||
if message.get('Metadata', {}).get('summary') and len(message.get('Metadata', {}).get('summary')) > 100:
|
||||
eventItem['overview'] = str(message.get('Metadata', {}).get('summary'))[:100] + "..."
|
||||
eventItem.overview = str(message.get('Metadata', {}).get('summary'))[:100] + "..."
|
||||
else:
|
||||
eventItem['overview'] = message.get('Metadata', {}).get('summary')
|
||||
eventItem.overview = message.get('Metadata', {}).get('summary')
|
||||
else:
|
||||
eventItem['item_type'] = "MOV" if message.get('Metadata', {}).get('type') == 'movie' else "SHOW"
|
||||
eventItem['item_name'] = "%s %s" % (
|
||||
eventItem.item_type = "MOV" if message.get('Metadata', {}).get('type') == 'movie' else "SHOW"
|
||||
eventItem.item_name = "%s %s" % (
|
||||
message.get('Metadata', {}).get('title'), "(" + str(message.get('Metadata', {}).get('year')) + ")")
|
||||
eventItem['item_id'] = message.get('Metadata', {}).get('ratingKey')
|
||||
eventItem.item_id = message.get('Metadata', {}).get('ratingKey')
|
||||
if len(message.get('Metadata', {}).get('summary')) > 100:
|
||||
eventItem['overview'] = str(message.get('Metadata', {}).get('summary'))[:100] + "..."
|
||||
eventItem.overview = str(message.get('Metadata', {}).get('summary'))[:100] + "..."
|
||||
else:
|
||||
eventItem['overview'] = message.get('Metadata', {}).get('summary')
|
||||
eventItem.overview = message.get('Metadata', {}).get('summary')
|
||||
if message.get('Player'):
|
||||
eventItem['ip'] = message.get('Player').get('publicAddress')
|
||||
eventItem['client'] = message.get('Player').get('title')
|
||||
eventItem.ip = message.get('Player').get('publicAddress')
|
||||
eventItem.client = message.get('Player').get('title')
|
||||
# 这里给个空,防止拼消息的时候出现None
|
||||
eventItem['device_name'] = ' '
|
||||
eventItem.device_name = ' '
|
||||
if message.get('Account'):
|
||||
eventItem['user_name'] = message.get("Account").get('title')
|
||||
eventItem.user_name = message.get("Account").get('title')
|
||||
|
||||
# 获取消息图片
|
||||
if eventItem.get("item_id"):
|
||||
if eventItem.item_id:
|
||||
# 根据返回的item_id去调用媒体服务器获取
|
||||
eventItem['image_url'] = self.get_remote_image_by_id(item_id=eventItem.get('item_id'),
|
||||
image_type="Backdrop")
|
||||
eventItem.image_url = self.get_remote_image_by_id(item_id=eventItem.item_id,
|
||||
image_type="Backdrop")
|
||||
|
||||
return eventItem
|
||||
|
Reference in New Issue
Block a user