mirror of
https://github.com/PaiGramTeam/PamGram.git
synced 2024-11-25 15:42:14 +00:00
8f424bf0d4
♻️ 重构插件系统 ⚙️ 重写插件 🎨 改进代码结构 📝 完善文档 Co-authored-by: zhxy-CN <admin@owo.cab> Co-authored-by: 洛水居室 <luoshuijs@outlook.com> Co-authored-by: xtaodada <xtao@xtaolink.cn> Co-authored-by: Li Chuangbo <im@chuangbo.li>
159 lines
4.9 KiB
Python
159 lines
4.9 KiB
Python
import imghdr
|
||
from enum import Enum
|
||
|
||
|
||
class ArtworkImage:
|
||
|
||
def __init__(self, art_id: int, page: int = 0, is_error: bool = False, data: bytes = b""):
|
||
"""
|
||
:param art_id: 插画ID
|
||
:param page: 页数
|
||
:param is_error: 插画是否有问题
|
||
:param data: 插画数据
|
||
"""
|
||
self.art_id = art_id
|
||
self.data = data
|
||
self.is_error = is_error
|
||
if not is_error:
|
||
self.format: str = imghdr.what(None, self.data)
|
||
self.page = page
|
||
|
||
|
||
class BaseResponseData:
|
||
def __init__(self, response=None, error_message: str = ""):
|
||
"""
|
||
:param response: 相应
|
||
:param error_message: 错误信息
|
||
"""
|
||
if response is None:
|
||
self.error: bool = True
|
||
self.message: str = error_message
|
||
return
|
||
self.response: dict = response
|
||
self.code = response["retcode"]
|
||
if self.code == 0:
|
||
self.error = False
|
||
else:
|
||
self.error = True
|
||
self.message = response["message"]
|
||
self.data = response["data"]
|
||
|
||
|
||
class Stat:
|
||
def __init__(self, view_num: int = 0, reply_num: int = 0, like_num: int = 0, bookmark_num: int = 0,
|
||
forward_num: int = 0):
|
||
self.forward_num = forward_num # 关注数
|
||
self.bookmark_num = bookmark_num # 收藏数
|
||
self.like_num = like_num # 喜欢数
|
||
self.reply_num = reply_num # 回复数
|
||
self.view_num = view_num # 观看数
|
||
|
||
|
||
class ArtworkInfo:
|
||
def __init__(self, post_id: int = 0, subject: str = "", tags=None,
|
||
image_url_list=None, stat: Stat = None, uid: int = 0, created_at: int = 0):
|
||
"""
|
||
:param post_id: post_id
|
||
:param subject: 标题
|
||
:param tags: 标签
|
||
:param image_url_list: 图片URL列表
|
||
:param stat: 统计
|
||
:param uid: 用户UID
|
||
:param created_at: 创建时间
|
||
"""
|
||
if tags is None:
|
||
self.tags = []
|
||
else:
|
||
self.tags = tags
|
||
if image_url_list is None:
|
||
self.image_url_list = []
|
||
else:
|
||
self.image_url_list = image_url_list
|
||
self.Stat = stat
|
||
self.created_at = created_at
|
||
self.uid = uid
|
||
self.subject = subject
|
||
self.post_id = post_id
|
||
|
||
|
||
class HyperionResponse:
|
||
"""
|
||
:param response: 相应
|
||
:param error_message: 错误信息
|
||
"""
|
||
|
||
def __init__(self, response=None, error_message: str = ""):
|
||
if response is None:
|
||
self.error: bool = True
|
||
self.message: str = error_message
|
||
return
|
||
self.response: dict = response
|
||
self.code = response["retcode"]
|
||
if self.code == 0:
|
||
self.error = False
|
||
else:
|
||
if self.code == 1102:
|
||
self.message = "作品不存在"
|
||
self.error = True
|
||
return
|
||
if response["data"] is None:
|
||
self.error = True
|
||
self.message: str = response["message"]
|
||
if self.error:
|
||
return
|
||
try:
|
||
self._data_post = response["data"]["post"]
|
||
post = self._data_post["post"] # 投稿信息
|
||
post_id = post["post_id"]
|
||
subject = post["subject"] # 介绍,类似title标题
|
||
created_at = post["created_at"] # 创建时间
|
||
user = self._data_post["user"] # 用户数据
|
||
uid = user["uid"] # 用户ID
|
||
topics = self._data_post["topics"] # 存放 Tag
|
||
image_list = self._data_post["image_list"] # image_list
|
||
except (AttributeError, TypeError) as err:
|
||
self.error: bool = True
|
||
self.message: str = err
|
||
return
|
||
topics_list = []
|
||
image_url_list = []
|
||
for topic in topics:
|
||
topics_list.append(topic["name"])
|
||
for image in image_list:
|
||
image_url_list.append(image["url"])
|
||
self.post_id = post["post_id"]
|
||
self.user_id = user["uid"]
|
||
self.created_at = post["created_at"]
|
||
stat = Stat(view_num=self._data_post["stat"]["view_num"],
|
||
reply_num=self._data_post["stat"]["reply_num"],
|
||
like_num=self._data_post["stat"]["like_num"],
|
||
bookmark_num=self._data_post["stat"]["bookmark_num"],
|
||
forward_num=self._data_post["stat"]["forward_num"],
|
||
)
|
||
self.results = ArtworkInfo(
|
||
subject=subject,
|
||
created_at=created_at,
|
||
uid=uid,
|
||
stat=stat,
|
||
tags=topics_list,
|
||
post_id=post_id,
|
||
image_url_list=image_url_list
|
||
)
|
||
|
||
def __bool__(self):
|
||
"""
|
||
:return: 是否错误
|
||
"""
|
||
return self.error
|
||
|
||
def __len__(self):
|
||
"""
|
||
:return: 插画连接数量
|
||
"""
|
||
return len(self.results.image_url_list)
|
||
|
||
|
||
class ServiceEnum(Enum):
|
||
HYPERION = 1
|
||
HOYOLAB = 2
|