mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-28 03:27:31 +08:00
167 lines
5.4 KiB
Python
167 lines
5.4 KiB
Python
import hashlib
|
|
import json
|
|
import time
|
|
|
|
from app.utils.http import RequestUtils
|
|
|
|
|
|
class IyuuHelper(object):
|
|
_version = "2.0.0"
|
|
_api_base = "https://api.iyuu.cn/%s"
|
|
_sites = {}
|
|
_token = None
|
|
|
|
def __init__(self, token):
|
|
self._token = token
|
|
if self._token:
|
|
self.init_config()
|
|
|
|
def init_config(self):
|
|
pass
|
|
|
|
def __request_iyuu(self, url, method="get", params=None):
|
|
"""
|
|
向IYUUApi发送请求
|
|
"""
|
|
if params:
|
|
if not params.get("sign"):
|
|
params.update({"sign": self._token})
|
|
if not params.get("version"):
|
|
params.update({"version": self._version})
|
|
else:
|
|
params = {"sign": self._token, "version": self._version}
|
|
# 开始请求
|
|
if method == "get":
|
|
ret = RequestUtils(
|
|
accept_type="application/json"
|
|
).get_res(f"{url}", params=params)
|
|
else:
|
|
ret = RequestUtils(
|
|
accept_type="application/json"
|
|
).post_res(f"{url}", data=params)
|
|
if ret:
|
|
result = ret.json()
|
|
if result.get('ret') == 200:
|
|
return result.get('data'), ""
|
|
else:
|
|
return None, f"请求IYUU失败,状态码:{result.get('ret')},返回信息:{result.get('msg')}"
|
|
elif ret is not None:
|
|
return None, f"请求IYUU失败,状态码:{ret.status_code},错误原因:{ret.reason}"
|
|
else:
|
|
return None, f"请求IYUU失败,未获取到返回信息"
|
|
|
|
def get_torrent_url(self, sid):
|
|
if not sid:
|
|
return None, None
|
|
if not self._sites:
|
|
self._sites = self.__get_sites()
|
|
if not self._sites.get(sid):
|
|
return None, None
|
|
site = self._sites.get(sid)
|
|
return site.get('base_url'), site.get('download_page')
|
|
|
|
def __get_sites(self):
|
|
"""
|
|
返回支持辅种的全部站点
|
|
:return: 站点列表、错误信息
|
|
{
|
|
"ret": 200,
|
|
"data": {
|
|
"sites": [
|
|
{
|
|
"id": 1,
|
|
"site": "keepfrds",
|
|
"nickname": "朋友",
|
|
"base_url": "pt.keepfrds.com",
|
|
"download_page": "download.php?id={}&passkey={passkey}",
|
|
"reseed_check": "passkey",
|
|
"is_https": 2
|
|
},
|
|
]
|
|
}
|
|
}
|
|
"""
|
|
result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.Sites')
|
|
if result:
|
|
ret_sites = {}
|
|
sites = result.get('sites') or []
|
|
for site in sites:
|
|
ret_sites[site.get('id')] = site
|
|
return ret_sites
|
|
else:
|
|
print(msg)
|
|
return {}
|
|
|
|
def get_seed_info(self, info_hashs: list):
|
|
"""
|
|
返回info_hash对应的站点id、种子id
|
|
{
|
|
"ret": 200,
|
|
"data": [
|
|
{
|
|
"sid": 3,
|
|
"torrent_id": 377467,
|
|
"info_hash": "a444850638e7a6f6220e2efdde94099c53358159"
|
|
},
|
|
{
|
|
"sid": 7,
|
|
"torrent_id": 35538,
|
|
"info_hash": "cf7d88fd656d10fe5130d13567aec27068b96676"
|
|
}
|
|
],
|
|
"msg": "",
|
|
"version": "1.0.0"
|
|
}
|
|
"""
|
|
info_hashs.sort()
|
|
json_data = json.dumps(info_hashs, separators=(',', ':'), ensure_ascii=False)
|
|
sha1 = self.get_sha1(json_data)
|
|
result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.Infohash',
|
|
method="post",
|
|
params={
|
|
"timestamp": time.time(),
|
|
"hash": json_data,
|
|
"sha1": sha1
|
|
})
|
|
return result, msg
|
|
|
|
@staticmethod
|
|
def get_sha1(json_str) -> str:
|
|
return hashlib.sha1(json_str.encode('utf-8')).hexdigest()
|
|
|
|
def get_auth_sites(self):
|
|
"""
|
|
返回支持鉴权的站点列表
|
|
[
|
|
{
|
|
"id": 2,
|
|
"site": "pthome",
|
|
"bind_check": "passkey,uid"
|
|
}
|
|
]
|
|
"""
|
|
result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.GetRecommendSites')
|
|
if result:
|
|
return result.get('recommend') or []
|
|
else:
|
|
print(msg)
|
|
return []
|
|
|
|
def bind_site(self, site, passkey, uid):
|
|
"""
|
|
绑定站点
|
|
:param site: 站点名称
|
|
:param passkey: passkey
|
|
:param uid: 用户id
|
|
:return: 状态码、错误信息
|
|
"""
|
|
result, msg = self.__request_iyuu(url=self._api_base % 'App.Api.Bind',
|
|
method="get",
|
|
params={
|
|
"token": self._token,
|
|
"site": site,
|
|
"passkey": self.get_sha1(passkey),
|
|
"id": uid
|
|
})
|
|
return result, msg
|