p115client 0.0.5.11.10.2__py3-none-any.whl → 0.0.5.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- p115client/client.py +354 -98
- p115client/tool/__init__.py +1 -0
- p115client/tool/offline.py +164 -0
- {p115client-0.0.5.11.10.2.dist-info → p115client-0.0.5.12.dist-info}/METADATA +1 -1
- {p115client-0.0.5.11.10.2.dist-info → p115client-0.0.5.12.dist-info}/RECORD +7 -6
- {p115client-0.0.5.11.10.2.dist-info → p115client-0.0.5.12.dist-info}/LICENSE +0 -0
- {p115client-0.0.5.11.10.2.dist-info → p115client-0.0.5.12.dist-info}/WHEEL +0 -0
p115client/client.py
CHANGED
@@ -377,6 +377,9 @@ def check_response(resp: dict | Awaitable[dict], /) -> dict | Coroutine[Any, Any
|
|
377
377
|
# {"state": false, "errno": 911, "error": "请验证账号"}
|
378
378
|
case 911:
|
379
379
|
raise AuthenticationError(errno.EAUTH, resp)
|
380
|
+
# {"state": false, "errno": 10004, "error": "错误的链接"}
|
381
|
+
case 10004:
|
382
|
+
raise OperationalError(errno.EINVAL, resp)
|
380
383
|
# {"state": false, "errno": 20001, "error": "目录名称不能为空"}
|
381
384
|
case 20001:
|
382
385
|
raise OperationalError(errno.EINVAL, resp)
|
@@ -3180,8 +3183,8 @@ class P115OpenClient(ClientRequestMixin):
|
|
3180
3183
|
- `c`: 允许同时打开次数,如果为 0,则是无限次数
|
3181
3184
|
- `f`: 请求时要求携带请求头
|
3182
3185
|
- 如果为空,则无要求
|
3183
|
-
- 如果为 1,则需要
|
3184
|
-
- 如果为 3,则需要
|
3186
|
+
- 如果为 1,则需要 user-agent(和请求直链时的一致)
|
3187
|
+
- 如果为 3,则需要 user-agent(和请求直链时的一致) 和 Cookie(由请求直链时的响应所返回的 Set-Cookie 响应头)
|
3185
3188
|
|
3186
3189
|
:param pickcode: 提取码
|
3187
3190
|
:param strict: 如果为 True,当目标是目录时,会抛出 IsADirectoryError 异常
|
@@ -7857,8 +7860,8 @@ class P115Client(P115OpenClient):
|
|
7857
7860
|
- `c`: 允许同时打开次数,如果为 0,则是无限次数
|
7858
7861
|
- `f`: 请求时要求携带请求头
|
7859
7862
|
- 如果为空,则无要求
|
7860
|
-
- 如果为 1,则需要
|
7861
|
-
- 如果为 3,则需要
|
7863
|
+
- 如果为 1,则需要 user-agent(和请求直链时的一致)
|
7864
|
+
- 如果为 3,则需要 user-agent(和请求直链时的一致) 和 Cookie(由请求直链时的响应所返回的 Set-Cookie 响应头)
|
7862
7865
|
|
7863
7866
|
:param pickcode: 提取码
|
7864
7867
|
:param strict: 如果为 True,当目标是目录时,会抛出 IsADirectoryError 异常
|
@@ -17727,32 +17730,35 @@ class P115Client(P115OpenClient):
|
|
17727
17730
|
########## Offline Download API ##########
|
17728
17731
|
|
17729
17732
|
@overload
|
17730
|
-
def
|
17733
|
+
def _offline_web_request(
|
17731
17734
|
self,
|
17732
|
-
payload: dict,
|
17735
|
+
payload: dict = {},
|
17733
17736
|
/,
|
17734
17737
|
ac: str = "",
|
17738
|
+
method: str = "POST",
|
17735
17739
|
*,
|
17736
17740
|
async_: Literal[False] = False,
|
17737
17741
|
**request_kwargs,
|
17738
17742
|
) -> dict:
|
17739
17743
|
...
|
17740
17744
|
@overload
|
17741
|
-
def
|
17745
|
+
def _offline_web_request(
|
17742
17746
|
self,
|
17743
|
-
payload: dict,
|
17747
|
+
payload: dict = {},
|
17744
17748
|
/,
|
17745
17749
|
ac: str = "",
|
17750
|
+
method: str = "POST",
|
17746
17751
|
*,
|
17747
17752
|
async_: Literal[True],
|
17748
17753
|
**request_kwargs,
|
17749
17754
|
) -> Coroutine[Any, Any, dict]:
|
17750
17755
|
...
|
17751
|
-
def
|
17756
|
+
def _offline_web_request(
|
17752
17757
|
self,
|
17753
|
-
payload: dict,
|
17758
|
+
payload: dict = {},
|
17754
17759
|
/,
|
17755
17760
|
ac: str = "",
|
17761
|
+
method: str = "POST",
|
17756
17762
|
*,
|
17757
17763
|
async_: Literal[False, True] = False,
|
17758
17764
|
**request_kwargs,
|
@@ -17760,41 +17766,47 @@ class P115Client(P115OpenClient):
|
|
17760
17766
|
api = "http://lixian.115.com/web/lixian/"
|
17761
17767
|
if ac:
|
17762
17768
|
payload["ac"] = ac
|
17769
|
+
if method.upper() == "POST":
|
17770
|
+
request_kwargs["data"] = payload
|
17771
|
+
else:
|
17772
|
+
request_kwargs["params"] = payload
|
17763
17773
|
return self.request(
|
17764
17774
|
url=api,
|
17765
|
-
method=
|
17766
|
-
data=payload,
|
17775
|
+
method=method,
|
17767
17776
|
async_=async_,
|
17768
17777
|
**request_kwargs,
|
17769
17778
|
)
|
17770
17779
|
|
17771
17780
|
@overload
|
17772
|
-
def
|
17781
|
+
def _offline_lixian_request(
|
17773
17782
|
self,
|
17774
|
-
payload: dict,
|
17783
|
+
payload: dict = {},
|
17775
17784
|
/,
|
17776
17785
|
ac: str = "",
|
17786
|
+
method: str = "POST",
|
17777
17787
|
*,
|
17778
17788
|
async_: Literal[False] = False,
|
17779
17789
|
**request_kwargs,
|
17780
17790
|
) -> dict:
|
17781
17791
|
...
|
17782
17792
|
@overload
|
17783
|
-
def
|
17793
|
+
def _offline_lixian_request(
|
17784
17794
|
self,
|
17785
|
-
payload: dict,
|
17795
|
+
payload: dict = {},
|
17786
17796
|
/,
|
17787
17797
|
ac: str = "",
|
17798
|
+
method: str = "POST",
|
17788
17799
|
*,
|
17789
17800
|
async_: Literal[True],
|
17790
17801
|
**request_kwargs,
|
17791
17802
|
) -> Coroutine[Any, Any, dict]:
|
17792
17803
|
...
|
17793
|
-
def
|
17804
|
+
def _offline_lixian_request(
|
17794
17805
|
self,
|
17795
|
-
payload: dict,
|
17806
|
+
payload: dict = {},
|
17796
17807
|
/,
|
17797
17808
|
ac: str = "",
|
17809
|
+
method: str = "POST",
|
17798
17810
|
*,
|
17799
17811
|
async_: Literal[False, True] = False,
|
17800
17812
|
**request_kwargs,
|
@@ -17802,19 +17814,22 @@ class P115Client(P115OpenClient):
|
|
17802
17814
|
api = "http://lixian.115.com/lixian/"
|
17803
17815
|
if ac:
|
17804
17816
|
payload["ac"] = ac
|
17805
|
-
|
17817
|
+
if method.upper() == "POST":
|
17818
|
+
request_kwargs["data"] = payload
|
17819
|
+
request_kwargs["ecdh_encrypt"] = True
|
17820
|
+
else:
|
17821
|
+
request_kwargs["params"] = payload
|
17806
17822
|
return self.request(
|
17807
17823
|
url=api,
|
17808
|
-
method=
|
17809
|
-
data=payload,
|
17824
|
+
method=method,
|
17810
17825
|
async_=async_,
|
17811
17826
|
**request_kwargs,
|
17812
17827
|
)
|
17813
17828
|
|
17814
17829
|
@overload
|
17815
|
-
def
|
17830
|
+
def _offline_lixianssp_request(
|
17816
17831
|
self,
|
17817
|
-
payload: dict,
|
17832
|
+
payload: dict = {},
|
17818
17833
|
/,
|
17819
17834
|
ac: str = "",
|
17820
17835
|
*,
|
@@ -17823,9 +17838,9 @@ class P115Client(P115OpenClient):
|
|
17823
17838
|
) -> dict:
|
17824
17839
|
...
|
17825
17840
|
@overload
|
17826
|
-
def
|
17841
|
+
def _offline_lixianssp_request(
|
17827
17842
|
self,
|
17828
|
-
payload: dict,
|
17843
|
+
payload: dict = {},
|
17829
17844
|
/,
|
17830
17845
|
ac: str = "",
|
17831
17846
|
*,
|
@@ -17833,9 +17848,9 @@ class P115Client(P115OpenClient):
|
|
17833
17848
|
**request_kwargs,
|
17834
17849
|
) -> Coroutine[Any, Any, dict]:
|
17835
17850
|
...
|
17836
|
-
def
|
17851
|
+
def _offline_lixianssp_request(
|
17837
17852
|
self,
|
17838
|
-
payload: dict,
|
17853
|
+
payload: dict = {},
|
17839
17854
|
/,
|
17840
17855
|
ac: str = "",
|
17841
17856
|
*,
|
@@ -17843,6 +17858,7 @@ class P115Client(P115OpenClient):
|
|
17843
17858
|
**request_kwargs,
|
17844
17859
|
) -> dict | Coroutine[Any, Any, dict]:
|
17845
17860
|
api = "http://lixian.115.com/lixianssp/"
|
17861
|
+
request_kwargs["method"] = "POST"
|
17846
17862
|
for k, v in payload.items():
|
17847
17863
|
payload[k] = str(v)
|
17848
17864
|
if ac:
|
@@ -17864,61 +17880,81 @@ class P115Client(P115OpenClient):
|
|
17864
17880
|
request_kwargs.setdefault("parse", parse)
|
17865
17881
|
return self.request(
|
17866
17882
|
url=api,
|
17867
|
-
method="POST",
|
17868
17883
|
data={"data": rsa_encode(dumps(payload)).decode("ascii")},
|
17869
17884
|
async_=async_,
|
17870
17885
|
**request_kwargs,
|
17871
17886
|
)
|
17872
17887
|
|
17873
17888
|
@overload
|
17874
|
-
def
|
17889
|
+
def _offline_request(
|
17875
17890
|
self,
|
17876
|
-
payload: dict,
|
17891
|
+
payload: dict = {},
|
17877
17892
|
/,
|
17878
17893
|
ac: str = "",
|
17879
|
-
|
17894
|
+
method: str = "POST",
|
17895
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
17896
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17880
17897
|
*,
|
17881
17898
|
async_: Literal[False] = False,
|
17882
17899
|
**request_kwargs,
|
17883
17900
|
) -> dict:
|
17884
17901
|
...
|
17885
17902
|
@overload
|
17886
|
-
def
|
17903
|
+
def _offline_request(
|
17887
17904
|
self,
|
17888
|
-
payload: dict,
|
17905
|
+
payload: dict = {},
|
17889
17906
|
/,
|
17890
17907
|
ac: str = "",
|
17891
|
-
|
17908
|
+
method: str = "POST",
|
17909
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
17910
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17892
17911
|
*,
|
17893
17912
|
async_: Literal[True],
|
17894
17913
|
**request_kwargs,
|
17895
17914
|
) -> Coroutine[Any, Any, dict]:
|
17896
17915
|
...
|
17897
|
-
def
|
17916
|
+
def _offline_request(
|
17898
17917
|
self,
|
17899
|
-
payload: dict,
|
17918
|
+
payload: dict = {},
|
17900
17919
|
/,
|
17901
17920
|
ac: str = "",
|
17902
|
-
|
17921
|
+
method: str = "POST",
|
17922
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
17923
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17903
17924
|
*,
|
17904
17925
|
async_: Literal[False, True] = False,
|
17905
|
-
ecdh_encrypt: bool = False,
|
17906
17926
|
**request_kwargs,
|
17907
17927
|
) -> dict | Coroutine[Any, Any, dict]:
|
17908
|
-
if
|
17909
|
-
|
17910
|
-
|
17911
|
-
|
17912
|
-
|
17913
|
-
|
17914
|
-
|
17928
|
+
if type is None:
|
17929
|
+
api = complete_lixian_api("?ct=lixian&ac="+ac, base_url=base_url)
|
17930
|
+
if method.upper() == "POST":
|
17931
|
+
request_kwargs["data"] = payload
|
17932
|
+
else:
|
17933
|
+
request_kwargs["params"] = payload
|
17934
|
+
return self.request(url=api, method=method, async_=async_, **request_kwargs)
|
17935
|
+
match type:
|
17936
|
+
case "web":
|
17937
|
+
call: Callable = self._offline_web_request
|
17938
|
+
case "ssp":
|
17939
|
+
call = self._offline_lixianssp_request
|
17940
|
+
case _:
|
17941
|
+
call = self._offline_lixian_request
|
17942
|
+
return call(
|
17943
|
+
payload,
|
17944
|
+
ac,
|
17945
|
+
method=method,
|
17946
|
+
async_=async_,
|
17947
|
+
**request_kwargs,
|
17948
|
+
)
|
17915
17949
|
|
17916
|
-
@overload
|
17950
|
+
@overload
|
17917
17951
|
def offline_add_torrent(
|
17918
17952
|
self,
|
17919
17953
|
payload: str | dict,
|
17920
17954
|
/,
|
17921
|
-
|
17955
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17956
|
+
method: str = "POST",
|
17957
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17922
17958
|
*,
|
17923
17959
|
async_: Literal[False] = False,
|
17924
17960
|
**request_kwargs,
|
@@ -17929,7 +17965,9 @@ class P115Client(P115OpenClient):
|
|
17929
17965
|
self,
|
17930
17966
|
payload: str | dict,
|
17931
17967
|
/,
|
17932
|
-
|
17968
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17969
|
+
method: str = "POST",
|
17970
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17933
17971
|
*,
|
17934
17972
|
async_: Literal[True],
|
17935
17973
|
**request_kwargs,
|
@@ -17939,7 +17977,9 @@ class P115Client(P115OpenClient):
|
|
17939
17977
|
self,
|
17940
17978
|
payload: str | dict,
|
17941
17979
|
/,
|
17942
|
-
|
17980
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
17981
|
+
method: str = "POST",
|
17982
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17943
17983
|
*,
|
17944
17984
|
async_: Literal[False, True] = False,
|
17945
17985
|
**request_kwargs,
|
@@ -17961,14 +18001,24 @@ class P115Client(P115OpenClient):
|
|
17961
18001
|
"""
|
17962
18002
|
if isinstance(payload, str):
|
17963
18003
|
payload = {"info_hash": payload}
|
17964
|
-
return self.
|
18004
|
+
return self._offline_request(
|
18005
|
+
payload,
|
18006
|
+
"add_task_bt",
|
18007
|
+
method=method,
|
18008
|
+
type=type,
|
18009
|
+
base_url=base_url,
|
18010
|
+
async_=async_,
|
18011
|
+
**request_kwargs,
|
18012
|
+
)
|
17965
18013
|
|
17966
18014
|
@overload
|
17967
18015
|
def offline_add_url(
|
17968
18016
|
self,
|
17969
18017
|
payload: str | dict,
|
17970
18018
|
/,
|
17971
|
-
|
18019
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18020
|
+
method: str = "POST",
|
18021
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17972
18022
|
*,
|
17973
18023
|
async_: Literal[False] = False,
|
17974
18024
|
**request_kwargs,
|
@@ -17979,7 +18029,9 @@ class P115Client(P115OpenClient):
|
|
17979
18029
|
self,
|
17980
18030
|
payload: str | dict,
|
17981
18031
|
/,
|
17982
|
-
|
18032
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18033
|
+
method: str = "POST",
|
18034
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17983
18035
|
*,
|
17984
18036
|
async_: Literal[True],
|
17985
18037
|
**request_kwargs,
|
@@ -17989,7 +18041,9 @@ class P115Client(P115OpenClient):
|
|
17989
18041
|
self,
|
17990
18042
|
payload: str | dict,
|
17991
18043
|
/,
|
17992
|
-
|
18044
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18045
|
+
method: str = "POST",
|
18046
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
17993
18047
|
*,
|
17994
18048
|
async_: Literal[False, True] = False,
|
17995
18049
|
**request_kwargs,
|
@@ -18005,14 +18059,24 @@ class P115Client(P115OpenClient):
|
|
18005
18059
|
"""
|
18006
18060
|
if isinstance(payload, str):
|
18007
18061
|
payload = {"url": payload}
|
18008
|
-
return self.
|
18062
|
+
return self._offline_request(
|
18063
|
+
payload,
|
18064
|
+
"add_task_url",
|
18065
|
+
method=method,
|
18066
|
+
type=type,
|
18067
|
+
base_url=base_url,
|
18068
|
+
async_=async_,
|
18069
|
+
**request_kwargs,
|
18070
|
+
)
|
18009
18071
|
|
18010
|
-
@overload
|
18072
|
+
@overload
|
18011
18073
|
def offline_add_urls(
|
18012
18074
|
self,
|
18013
18075
|
payload: str | Iterable[str] | dict,
|
18014
18076
|
/,
|
18015
|
-
|
18077
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18078
|
+
method: str = "POST",
|
18079
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
18016
18080
|
*,
|
18017
18081
|
async_: Literal[False] = False,
|
18018
18082
|
**request_kwargs,
|
@@ -18023,7 +18087,9 @@ class P115Client(P115OpenClient):
|
|
18023
18087
|
self,
|
18024
18088
|
payload: str | Iterable[str] | dict,
|
18025
18089
|
/,
|
18026
|
-
|
18090
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18091
|
+
method: str = "POST",
|
18092
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
18027
18093
|
*,
|
18028
18094
|
async_: Literal[True],
|
18029
18095
|
**request_kwargs,
|
@@ -18033,7 +18099,9 @@ class P115Client(P115OpenClient):
|
|
18033
18099
|
self,
|
18034
18100
|
payload: str | Iterable[str] | dict,
|
18035
18101
|
/,
|
18036
|
-
|
18102
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18103
|
+
method: str = "POST",
|
18104
|
+
type: Literal[None, "", "web", "ssp"] = "ssp",
|
18037
18105
|
*,
|
18038
18106
|
async_: Literal[False, True] = False,
|
18039
18107
|
**request_kwargs,
|
@@ -18043,6 +18111,7 @@ class P115Client(P115OpenClient):
|
|
18043
18111
|
POST https://lixian.115.com/lixianssp/?ac=add_task_urls
|
18044
18112
|
|
18045
18113
|
:payload:
|
18114
|
+
- url: str 💡 链接,支持HTTP、HTTPS、FTP、磁力链和电驴链接
|
18046
18115
|
- url[0]: str 💡 链接,支持HTTP、HTTPS、FTP、磁力链和电驴链接
|
18047
18116
|
- url[1]: str
|
18048
18117
|
- ...
|
@@ -18052,10 +18121,18 @@ class P115Client(P115OpenClient):
|
|
18052
18121
|
if isinstance(payload, str):
|
18053
18122
|
payload = payload.strip("\n").split("\n")
|
18054
18123
|
if not isinstance(payload, dict):
|
18055
|
-
payload = {f"url[{i}]": url for i, url in enumerate(payload)}
|
18124
|
+
payload = {f"url[{i}]": url for i, url in enumerate(payload) if url}
|
18056
18125
|
if not payload:
|
18057
18126
|
raise ValueError("no `url` specified")
|
18058
|
-
return self.
|
18127
|
+
return self._offline_request(
|
18128
|
+
payload,
|
18129
|
+
"add_task_urls",
|
18130
|
+
method=method,
|
18131
|
+
type=type,
|
18132
|
+
base_url=base_url,
|
18133
|
+
async_=async_,
|
18134
|
+
**request_kwargs,
|
18135
|
+
)
|
18059
18136
|
|
18060
18137
|
@overload
|
18061
18138
|
def offline_clear(
|
@@ -18063,6 +18140,8 @@ class P115Client(P115OpenClient):
|
|
18063
18140
|
payload: int | dict = 0,
|
18064
18141
|
/,
|
18065
18142
|
base_url: None | bool | str | Callable[[], str] = None,
|
18143
|
+
method: str = "POST",
|
18144
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18066
18145
|
*,
|
18067
18146
|
async_: Literal[False] = False,
|
18068
18147
|
**request_kwargs,
|
@@ -18074,6 +18153,8 @@ class P115Client(P115OpenClient):
|
|
18074
18153
|
payload: int | dict = 0,
|
18075
18154
|
/,
|
18076
18155
|
base_url: None | bool | str | Callable[[], str] = None,
|
18156
|
+
method: str = "POST",
|
18157
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18077
18158
|
*,
|
18078
18159
|
async_: Literal[True],
|
18079
18160
|
**request_kwargs,
|
@@ -18084,13 +18165,15 @@ class P115Client(P115OpenClient):
|
|
18084
18165
|
payload: int | dict = 0,
|
18085
18166
|
/,
|
18086
18167
|
base_url: None | bool | str | Callable[[], str] = None,
|
18168
|
+
method: str = "POST",
|
18169
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18087
18170
|
*,
|
18088
18171
|
async_: Literal[False, True] = False,
|
18089
18172
|
**request_kwargs,
|
18090
18173
|
) -> dict | Coroutine[Any, Any, dict]:
|
18091
18174
|
"""清空离线任务列表
|
18092
18175
|
|
18093
|
-
POST https://115.com/
|
18176
|
+
POST https://lixian.115.com/lixian/?ac=task_clear
|
18094
18177
|
|
18095
18178
|
:payload:
|
18096
18179
|
- flag: int = 0 💡 标识,用于对应某种情况
|
@@ -18102,10 +18185,17 @@ class P115Client(P115OpenClient):
|
|
18102
18185
|
- 4: 已完成+删除源文件
|
18103
18186
|
- 5: 全部+删除源文件
|
18104
18187
|
"""
|
18105
|
-
api = complete_lixian_api("?ct=lixian&ac=task_clear", base_url=base_url)
|
18106
18188
|
if isinstance(payload, int):
|
18107
18189
|
payload = {"flag": payload}
|
18108
|
-
return self.
|
18190
|
+
return self._offline_request(
|
18191
|
+
payload,
|
18192
|
+
"task_clear",
|
18193
|
+
method=method,
|
18194
|
+
type=type,
|
18195
|
+
base_url=base_url,
|
18196
|
+
async_=async_,
|
18197
|
+
**request_kwargs,
|
18198
|
+
)
|
18109
18199
|
|
18110
18200
|
@overload
|
18111
18201
|
def offline_download_path(
|
@@ -18142,6 +18232,49 @@ class P115Client(P115OpenClient):
|
|
18142
18232
|
api = complete_webapi("/offine/downpath", base_url=base_url)
|
18143
18233
|
return self.request(url=api, async_=async_, **request_kwargs)
|
18144
18234
|
|
18235
|
+
@overload
|
18236
|
+
def offline_download_path_set(
|
18237
|
+
self,
|
18238
|
+
payload: int | str | dict,
|
18239
|
+
/,
|
18240
|
+
base_url: bool | str | Callable[[], str] = False,
|
18241
|
+
*,
|
18242
|
+
async_: Literal[False] = False,
|
18243
|
+
**request_kwargs,
|
18244
|
+
) -> dict:
|
18245
|
+
...
|
18246
|
+
@overload
|
18247
|
+
def offline_download_path_set(
|
18248
|
+
self,
|
18249
|
+
payload: int | str | dict,
|
18250
|
+
/,
|
18251
|
+
base_url: bool | str | Callable[[], str] = False,
|
18252
|
+
*,
|
18253
|
+
async_: Literal[True],
|
18254
|
+
**request_kwargs,
|
18255
|
+
) -> Coroutine[Any, Any, dict]:
|
18256
|
+
...
|
18257
|
+
def offline_download_path_set(
|
18258
|
+
self,
|
18259
|
+
payload: int | str | dict,
|
18260
|
+
/,
|
18261
|
+
base_url: bool | str | Callable[[], str] = False,
|
18262
|
+
*,
|
18263
|
+
async_: Literal[False, True] = False,
|
18264
|
+
**request_kwargs,
|
18265
|
+
) -> dict | Coroutine[Any, Any, dict]:
|
18266
|
+
"""设置默认选择的离线下载到的目录信息
|
18267
|
+
|
18268
|
+
POST https://webapi.115.com/offine/downpath
|
18269
|
+
|
18270
|
+
:payload:
|
18271
|
+
- file_id: int | str 💡 目录 id
|
18272
|
+
"""
|
18273
|
+
api = complete_webapi("/offine/downpath", base_url=base_url)
|
18274
|
+
if isinstance(payload, (int, str)):
|
18275
|
+
payload = {"file_id": payload}
|
18276
|
+
return self.request(url=api, method="POST", data=payload, async_=async_, **request_kwargs)
|
18277
|
+
|
18145
18278
|
@overload
|
18146
18279
|
def offline_info(
|
18147
18280
|
self,
|
@@ -18177,12 +18310,14 @@ class P115Client(P115OpenClient):
|
|
18177
18310
|
api = complete_api("/?ct=offline&ac=space", base_url=base_url)
|
18178
18311
|
return self.request(url=api, async_=async_, **request_kwargs)
|
18179
18312
|
|
18180
|
-
@overload
|
18313
|
+
@overload
|
18181
18314
|
def offline_list(
|
18182
18315
|
self,
|
18183
18316
|
payload: int | dict = 1,
|
18184
18317
|
/,
|
18185
18318
|
base_url: None | bool | str | Callable[[], str] = None,
|
18319
|
+
method: str = "GET",
|
18320
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18186
18321
|
*,
|
18187
18322
|
async_: Literal[False] = False,
|
18188
18323
|
**request_kwargs,
|
@@ -18191,9 +18326,11 @@ class P115Client(P115OpenClient):
|
|
18191
18326
|
@overload
|
18192
18327
|
def offline_list(
|
18193
18328
|
self,
|
18194
|
-
payload: int | dict,
|
18329
|
+
payload: int | dict = 1,
|
18195
18330
|
/,
|
18196
18331
|
base_url: None | bool | str | Callable[[], str] = None,
|
18332
|
+
method: str = "GET",
|
18333
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18197
18334
|
*,
|
18198
18335
|
async_: Literal[True],
|
18199
18336
|
**request_kwargs,
|
@@ -18204,27 +18341,38 @@ class P115Client(P115OpenClient):
|
|
18204
18341
|
payload: int | dict = 1,
|
18205
18342
|
/,
|
18206
18343
|
base_url: None | bool | str | Callable[[], str] = None,
|
18344
|
+
method: str = "GET",
|
18345
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18207
18346
|
*,
|
18208
18347
|
async_: Literal[False, True] = False,
|
18209
18348
|
**request_kwargs,
|
18210
18349
|
) -> dict | Coroutine[Any, Any, dict]:
|
18211
18350
|
"""获取当前的离线任务列表
|
18212
18351
|
|
18213
|
-
|
18352
|
+
GET https://lixian.115.com/lixian/?ac=task_lists
|
18214
18353
|
|
18215
18354
|
:payload:
|
18216
18355
|
- page: int | str = 1
|
18217
18356
|
"""
|
18218
|
-
api = complete_lixian_api("?ct=lixian&ac=task_lists", base_url=base_url)
|
18219
18357
|
if isinstance(payload, int):
|
18220
18358
|
payload = {"page": payload}
|
18221
|
-
return self.
|
18359
|
+
return self._offline_request(
|
18360
|
+
payload,
|
18361
|
+
"task_lists",
|
18362
|
+
method=method,
|
18363
|
+
type=type,
|
18364
|
+
base_url=base_url,
|
18365
|
+
async_=async_,
|
18366
|
+
**request_kwargs,
|
18367
|
+
)
|
18222
18368
|
|
18223
18369
|
@overload
|
18224
18370
|
def offline_quota_info(
|
18225
18371
|
self,
|
18226
18372
|
/,
|
18227
18373
|
base_url: None | bool | str | Callable[[], str] = None,
|
18374
|
+
method: str = "GET",
|
18375
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18228
18376
|
*,
|
18229
18377
|
async_: Literal[False] = False,
|
18230
18378
|
**request_kwargs,
|
@@ -18235,6 +18383,8 @@ class P115Client(P115OpenClient):
|
|
18235
18383
|
self,
|
18236
18384
|
/,
|
18237
18385
|
base_url: None | bool | str | Callable[[], str] = None,
|
18386
|
+
method: str = "GET",
|
18387
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18238
18388
|
*,
|
18239
18389
|
async_: Literal[True],
|
18240
18390
|
**request_kwargs,
|
@@ -18244,22 +18394,32 @@ class P115Client(P115OpenClient):
|
|
18244
18394
|
self,
|
18245
18395
|
/,
|
18246
18396
|
base_url: None | bool | str | Callable[[], str] = None,
|
18397
|
+
method: str = "GET",
|
18398
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18247
18399
|
*,
|
18248
18400
|
async_: Literal[False, True] = False,
|
18249
18401
|
**request_kwargs,
|
18250
18402
|
) -> dict | Coroutine[Any, Any, dict]:
|
18251
18403
|
"""获取当前离线配额信息(简略)
|
18252
18404
|
|
18253
|
-
GET https://lixian.115.com/lixian/?
|
18405
|
+
GET https://lixian.115.com/lixian/?ac=get_quota_info
|
18254
18406
|
"""
|
18255
|
-
|
18256
|
-
|
18407
|
+
return self._offline_request(
|
18408
|
+
ac="get_quota_info",
|
18409
|
+
method=method,
|
18410
|
+
type=type,
|
18411
|
+
base_url=base_url,
|
18412
|
+
async_=async_,
|
18413
|
+
**request_kwargs,
|
18414
|
+
)
|
18257
18415
|
|
18258
18416
|
@overload
|
18259
18417
|
def offline_quota_package_array(
|
18260
18418
|
self,
|
18261
18419
|
/,
|
18262
18420
|
base_url: None | bool | str | Callable[[], str] = None,
|
18421
|
+
method: str = "GET",
|
18422
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18263
18423
|
*,
|
18264
18424
|
async_: Literal[False] = False,
|
18265
18425
|
**request_kwargs,
|
@@ -18270,6 +18430,8 @@ class P115Client(P115OpenClient):
|
|
18270
18430
|
self,
|
18271
18431
|
/,
|
18272
18432
|
base_url: None | bool | str | Callable[[], str] = None,
|
18433
|
+
method: str = "GET",
|
18434
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18273
18435
|
*,
|
18274
18436
|
async_: Literal[True],
|
18275
18437
|
**request_kwargs,
|
@@ -18279,22 +18441,32 @@ class P115Client(P115OpenClient):
|
|
18279
18441
|
self,
|
18280
18442
|
/,
|
18281
18443
|
base_url: None | bool | str | Callable[[], str] = None,
|
18444
|
+
method: str = "GET",
|
18445
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18282
18446
|
*,
|
18283
18447
|
async_: Literal[False, True] = False,
|
18284
18448
|
**request_kwargs,
|
18285
18449
|
) -> dict | Coroutine[Any, Any, dict]:
|
18286
18450
|
"""获取当前离线配额信息(详细)
|
18287
18451
|
|
18288
|
-
GET https://lixian.115.com/lixian/?
|
18452
|
+
GET https://lixian.115.com/lixian/?ac=get_quota_package_array
|
18289
18453
|
"""
|
18290
|
-
|
18291
|
-
|
18454
|
+
return self._offline_request(
|
18455
|
+
ac="get_quota_package_array",
|
18456
|
+
method=method,
|
18457
|
+
type=type,
|
18458
|
+
base_url=base_url,
|
18459
|
+
async_=async_,
|
18460
|
+
**request_kwargs,
|
18461
|
+
)
|
18292
18462
|
|
18293
18463
|
@overload
|
18294
18464
|
def offline_quota_package_info(
|
18295
18465
|
self,
|
18296
18466
|
/,
|
18297
18467
|
base_url: None | bool | str | Callable[[], str] = None,
|
18468
|
+
method: str = "GET",
|
18469
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18298
18470
|
*,
|
18299
18471
|
async_: Literal[False] = False,
|
18300
18472
|
**request_kwargs,
|
@@ -18305,6 +18477,8 @@ class P115Client(P115OpenClient):
|
|
18305
18477
|
self,
|
18306
18478
|
/,
|
18307
18479
|
base_url: None | bool | str | Callable[[], str] = None,
|
18480
|
+
method: str = "GET",
|
18481
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18308
18482
|
*,
|
18309
18483
|
async_: Literal[True],
|
18310
18484
|
**request_kwargs,
|
@@ -18314,16 +18488,24 @@ class P115Client(P115OpenClient):
|
|
18314
18488
|
self,
|
18315
18489
|
/,
|
18316
18490
|
base_url: None | bool | str | Callable[[], str] = None,
|
18491
|
+
method: str = "GET",
|
18492
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18317
18493
|
*,
|
18318
18494
|
async_: Literal[False, True] = False,
|
18319
18495
|
**request_kwargs,
|
18320
18496
|
) -> dict | Coroutine[Any, Any, dict]:
|
18321
18497
|
"""获取当前离线配额信息(详细)
|
18322
18498
|
|
18323
|
-
GET https://lixian.115.com/lixian/?
|
18499
|
+
GET https://lixian.115.com/lixian/?ac=get_quota_package_info
|
18324
18500
|
"""
|
18325
|
-
|
18326
|
-
|
18501
|
+
return self._offline_request(
|
18502
|
+
ac="get_quota_package_info",
|
18503
|
+
method=method,
|
18504
|
+
type=type,
|
18505
|
+
base_url=base_url,
|
18506
|
+
async_=async_,
|
18507
|
+
**request_kwargs,
|
18508
|
+
)
|
18327
18509
|
|
18328
18510
|
@overload
|
18329
18511
|
def offline_remove(
|
@@ -18331,6 +18513,8 @@ class P115Client(P115OpenClient):
|
|
18331
18513
|
payload: str | Iterable[str] | dict,
|
18332
18514
|
/,
|
18333
18515
|
base_url: None | bool | str | Callable[[], str] = None,
|
18516
|
+
method: str = "POST",
|
18517
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18334
18518
|
*,
|
18335
18519
|
async_: Literal[False] = False,
|
18336
18520
|
**request_kwargs,
|
@@ -18342,6 +18526,8 @@ class P115Client(P115OpenClient):
|
|
18342
18526
|
payload: str | Iterable[str] | dict,
|
18343
18527
|
/,
|
18344
18528
|
base_url: None | bool | str | Callable[[], str] = None,
|
18529
|
+
method: str = "POST",
|
18530
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18345
18531
|
*,
|
18346
18532
|
async_: Literal[True],
|
18347
18533
|
**request_kwargs,
|
@@ -18352,6 +18538,8 @@ class P115Client(P115OpenClient):
|
|
18352
18538
|
payload: str | Iterable[str] | dict,
|
18353
18539
|
/,
|
18354
18540
|
base_url: None | bool | str | Callable[[], str] = None,
|
18541
|
+
method: str = "POST",
|
18542
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18355
18543
|
*,
|
18356
18544
|
async_: Literal[False, True] = False,
|
18357
18545
|
**request_kwargs,
|
@@ -18366,14 +18554,21 @@ class P115Client(P115OpenClient):
|
|
18366
18554
|
- ...
|
18367
18555
|
- flag: 0 | 1 = <default> 💡 是否删除源文件
|
18368
18556
|
"""
|
18369
|
-
api = complete_lixian_api("?ct=lixian&ac=task_del", base_url=base_url)
|
18370
18557
|
if isinstance(payload, str):
|
18371
18558
|
payload = {"hash[0]": payload}
|
18372
18559
|
elif not isinstance(payload, dict):
|
18373
18560
|
payload = {f"hash[{i}]": hash for i, hash in enumerate(payload)}
|
18374
18561
|
if not payload:
|
18375
18562
|
raise ValueError("no `hash` (info_hash) specified")
|
18376
|
-
return self.
|
18563
|
+
return self._offline_request(
|
18564
|
+
payload,
|
18565
|
+
"task_del",
|
18566
|
+
method=method,
|
18567
|
+
type=type,
|
18568
|
+
base_url=base_url,
|
18569
|
+
async_=async_,
|
18570
|
+
**request_kwargs,
|
18571
|
+
)
|
18377
18572
|
|
18378
18573
|
@overload
|
18379
18574
|
def offline_restart(
|
@@ -18382,6 +18577,7 @@ class P115Client(P115OpenClient):
|
|
18382
18577
|
/,
|
18383
18578
|
base_url: None | bool | str | Callable[[], str] = None,
|
18384
18579
|
method: str = "POST",
|
18580
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18385
18581
|
*,
|
18386
18582
|
async_: Literal[False] = False,
|
18387
18583
|
**request_kwargs,
|
@@ -18394,6 +18590,7 @@ class P115Client(P115OpenClient):
|
|
18394
18590
|
/,
|
18395
18591
|
base_url: None | bool | str | Callable[[], str] = None,
|
18396
18592
|
method: str = "POST",
|
18593
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18397
18594
|
*,
|
18398
18595
|
async_: Literal[True],
|
18399
18596
|
**request_kwargs,
|
@@ -18405,6 +18602,7 @@ class P115Client(P115OpenClient):
|
|
18405
18602
|
/,
|
18406
18603
|
base_url: None | bool | str | Callable[[], str] = None,
|
18407
18604
|
method: str = "POST",
|
18605
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18408
18606
|
*,
|
18409
18607
|
async_: Literal[False, True] = False,
|
18410
18608
|
**request_kwargs,
|
@@ -18416,20 +18614,26 @@ class P115Client(P115OpenClient):
|
|
18416
18614
|
:payload:
|
18417
18615
|
- info_hash: str 💡 待重试任务的 info_hash
|
18418
18616
|
"""
|
18419
|
-
api = complete_lixian_api("?ct=lixian&ac=restart", base_url=base_url)
|
18420
18617
|
if isinstance(payload, str):
|
18421
18618
|
payload = {"info_hash": payload}
|
18422
|
-
|
18423
|
-
|
18424
|
-
|
18425
|
-
|
18426
|
-
|
18619
|
+
return self._offline_request(
|
18620
|
+
payload,
|
18621
|
+
"restart",
|
18622
|
+
method=method,
|
18623
|
+
type=type,
|
18624
|
+
base_url=base_url,
|
18625
|
+
async_=async_,
|
18626
|
+
**request_kwargs,
|
18627
|
+
)
|
18427
18628
|
|
18428
18629
|
@overload
|
18429
18630
|
def offline_task_count(
|
18430
18631
|
self,
|
18632
|
+
payload: dict | int = 0,
|
18431
18633
|
/,
|
18432
18634
|
base_url: None | bool | str | Callable[[], str] = None,
|
18635
|
+
method: str = "GET",
|
18636
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18433
18637
|
*,
|
18434
18638
|
async_: Literal[False] = False,
|
18435
18639
|
**request_kwargs,
|
@@ -18438,8 +18642,11 @@ class P115Client(P115OpenClient):
|
|
18438
18642
|
@overload
|
18439
18643
|
def offline_task_count(
|
18440
18644
|
self,
|
18645
|
+
payload: dict | int = 0,
|
18441
18646
|
/,
|
18442
18647
|
base_url: None | bool | str | Callable[[], str] = None,
|
18648
|
+
method: str = "GET",
|
18649
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18443
18650
|
*,
|
18444
18651
|
async_: Literal[True],
|
18445
18652
|
**request_kwargs,
|
@@ -18447,18 +18654,33 @@ class P115Client(P115OpenClient):
|
|
18447
18654
|
...
|
18448
18655
|
def offline_task_count(
|
18449
18656
|
self,
|
18657
|
+
payload: dict | int = 0,
|
18450
18658
|
/,
|
18451
18659
|
base_url: None | bool | str | Callable[[], str] = None,
|
18660
|
+
method: str = "GET",
|
18661
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18452
18662
|
*,
|
18453
18663
|
async_: Literal[False, True] = False,
|
18454
18664
|
**request_kwargs,
|
18455
18665
|
) -> dict | Coroutine[Any, Any, dict]:
|
18456
18666
|
"""获取当前正在运行的离线任务数
|
18457
18667
|
|
18458
|
-
GET https://lixian.115.com/lixian/?
|
18668
|
+
GET https://lixian.115.com/lixian/?ac=get_task_cnt
|
18669
|
+
|
18670
|
+
:payload:
|
18671
|
+
flag: int = 0
|
18459
18672
|
"""
|
18460
|
-
|
18461
|
-
|
18673
|
+
if isinstance(payload, int):
|
18674
|
+
payload = {"flag": 0}
|
18675
|
+
return self._offline_request(
|
18676
|
+
payload,
|
18677
|
+
"get_task_cnt",
|
18678
|
+
method=method,
|
18679
|
+
type=type,
|
18680
|
+
base_url=base_url,
|
18681
|
+
async_=async_,
|
18682
|
+
**request_kwargs,
|
18683
|
+
)
|
18462
18684
|
|
18463
18685
|
@overload
|
18464
18686
|
def offline_torrent_info(
|
@@ -18466,6 +18688,8 @@ class P115Client(P115OpenClient):
|
|
18466
18688
|
payload: str | dict,
|
18467
18689
|
/,
|
18468
18690
|
base_url: None | bool | str | Callable[[], str] = None,
|
18691
|
+
method: str = "GET",
|
18692
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18469
18693
|
*,
|
18470
18694
|
async_: Literal[False] = False,
|
18471
18695
|
**request_kwargs,
|
@@ -18477,6 +18701,8 @@ class P115Client(P115OpenClient):
|
|
18477
18701
|
payload: str | dict,
|
18478
18702
|
/,
|
18479
18703
|
base_url: None | bool | str | Callable[[], str] = None,
|
18704
|
+
method: str = "GET",
|
18705
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18480
18706
|
*,
|
18481
18707
|
async_: Literal[True],
|
18482
18708
|
**request_kwargs,
|
@@ -18487,27 +18713,39 @@ class P115Client(P115OpenClient):
|
|
18487
18713
|
payload: str | dict,
|
18488
18714
|
/,
|
18489
18715
|
base_url: None | bool | str | Callable[[], str] = None,
|
18716
|
+
method: str = "GET",
|
18717
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18490
18718
|
*,
|
18491
18719
|
async_: Literal[False, True] = False,
|
18492
18720
|
**request_kwargs,
|
18493
18721
|
) -> dict | Coroutine[Any, Any, dict]:
|
18494
18722
|
"""查看种子的文件列表等信息
|
18495
18723
|
|
18496
|
-
|
18724
|
+
GET https://lixian.115.com/lixian/?ac=torrent
|
18497
18725
|
|
18498
18726
|
:payload:
|
18499
18727
|
- sha1: str
|
18500
18728
|
"""
|
18501
|
-
api = complete_lixian_api("?ct=lixian&ac=torrent", base_url=base_url)
|
18502
18729
|
if isinstance(payload, str):
|
18503
18730
|
payload = {"sha1": payload}
|
18504
|
-
return self.
|
18731
|
+
return self._offline_request(
|
18732
|
+
payload,
|
18733
|
+
"torrent",
|
18734
|
+
method=method,
|
18735
|
+
type=type,
|
18736
|
+
base_url=base_url,
|
18737
|
+
async_=async_,
|
18738
|
+
**request_kwargs,
|
18739
|
+
)
|
18505
18740
|
|
18506
18741
|
@overload
|
18507
18742
|
def offline_upload_torrent_path(
|
18508
18743
|
self,
|
18744
|
+
payload: dict | int = 1,
|
18509
18745
|
/,
|
18510
|
-
base_url: bool | str | Callable[[], str] =
|
18746
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18747
|
+
method: str = "GET",
|
18748
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18511
18749
|
*,
|
18512
18750
|
async_: Literal[False] = False,
|
18513
18751
|
**request_kwargs,
|
@@ -18516,8 +18754,11 @@ class P115Client(P115OpenClient):
|
|
18516
18754
|
@overload
|
18517
18755
|
def offline_upload_torrent_path(
|
18518
18756
|
self,
|
18757
|
+
payload: dict | int = 1,
|
18519
18758
|
/,
|
18520
|
-
base_url: bool | str | Callable[[], str] =
|
18759
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18760
|
+
method: str = "GET",
|
18761
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18521
18762
|
*,
|
18522
18763
|
async_: Literal[True],
|
18523
18764
|
**request_kwargs,
|
@@ -18525,18 +18766,33 @@ class P115Client(P115OpenClient):
|
|
18525
18766
|
...
|
18526
18767
|
def offline_upload_torrent_path(
|
18527
18768
|
self,
|
18769
|
+
payload: dict | int = 1,
|
18528
18770
|
/,
|
18529
|
-
base_url: bool | str | Callable[[], str] =
|
18771
|
+
base_url: None | bool | str | Callable[[], str] = None,
|
18772
|
+
method: str = "GET",
|
18773
|
+
type: Literal[None, "", "web", "ssp"] = None,
|
18530
18774
|
*,
|
18531
18775
|
async_: Literal[False, True] = False,
|
18532
18776
|
**request_kwargs,
|
18533
18777
|
) -> dict | Coroutine[Any, Any, dict]:
|
18534
18778
|
"""获取当前的种子上传到的目录,当你添加种子任务后,这个种子会在此目录中保存
|
18535
18779
|
|
18536
|
-
GET https://115.com/?
|
18780
|
+
GET https://lixian.115.com/lixian/?ac=get_id
|
18781
|
+
|
18782
|
+
:payload:
|
18783
|
+
- torrent: int = 1
|
18537
18784
|
"""
|
18538
|
-
|
18539
|
-
|
18785
|
+
if isinstance(payload, int):
|
18786
|
+
payload = {"torrent": payload}
|
18787
|
+
return self._offline_request(
|
18788
|
+
payload,
|
18789
|
+
"get_id",
|
18790
|
+
method=method,
|
18791
|
+
type=type,
|
18792
|
+
base_url=base_url,
|
18793
|
+
async_=async_,
|
18794
|
+
**request_kwargs,
|
18795
|
+
)
|
18540
18796
|
|
18541
18797
|
########## Recyclebin API ##########
|
18542
18798
|
|
@@ -21021,7 +21277,7 @@ class P115Client(P115OpenClient):
|
|
21021
21277
|
request_kwargs.update(make_upload_payload(data))
|
21022
21278
|
request_kwargs["headers"] = {
|
21023
21279
|
**(request_kwargs.get("headers") or {}),
|
21024
|
-
"
|
21280
|
+
"content-type": "application/x-www-form-urlencoded",
|
21025
21281
|
"user-agent": "Mozilla/5.0 115disk/99.99.99.99 115Browser/99.99.99.99 115wangpan_android/99.99.99.99",
|
21026
21282
|
}
|
21027
21283
|
request_kwargs.setdefault("parse", parse_upload_init_response)
|
p115client/tool/__init__.py
CHANGED
@@ -0,0 +1,164 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
5
|
+
__all__ = ["offline_iter", "offline_restart_iter"]
|
6
|
+
__doc__ = "这个模块提供了一些和离线下载有关的函数"
|
7
|
+
|
8
|
+
from asyncio import sleep as async_sleep
|
9
|
+
from collections.abc import AsyncIterator, Callable, Iterable, Iterator
|
10
|
+
from itertools import count
|
11
|
+
from time import sleep, time
|
12
|
+
from typing import overload, Literal
|
13
|
+
|
14
|
+
from iterutils import run_gen_step_iter, with_iter_next, Yield, YieldFrom
|
15
|
+
from p115client import check_response, P115Client, P115OpenClient
|
16
|
+
|
17
|
+
|
18
|
+
@overload
|
19
|
+
def offline_iter(
|
20
|
+
client: str | P115Client | P115OpenClient,
|
21
|
+
/,
|
22
|
+
page_start: int = 1,
|
23
|
+
page_stop: int = -1,
|
24
|
+
cooldown: float = 0,
|
25
|
+
use_open_api: bool = False,
|
26
|
+
*,
|
27
|
+
async_: Literal[False] = False,
|
28
|
+
**request_kwargs,
|
29
|
+
) -> Iterator[dict]:
|
30
|
+
...
|
31
|
+
@overload
|
32
|
+
def offline_iter(
|
33
|
+
client: str | P115Client | P115OpenClient,
|
34
|
+
/,
|
35
|
+
page_start: int = 1,
|
36
|
+
page_stop: int = -1,
|
37
|
+
cooldown: float = 0,
|
38
|
+
use_open_api: bool = False,
|
39
|
+
*,
|
40
|
+
async_: Literal[True],
|
41
|
+
**request_kwargs,
|
42
|
+
) -> AsyncIterator[dict]:
|
43
|
+
...
|
44
|
+
def offline_iter(
|
45
|
+
client: str | P115Client | P115OpenClient,
|
46
|
+
/,
|
47
|
+
page_start: int = 1,
|
48
|
+
page_stop: int = -1,
|
49
|
+
cooldown: float = 0,
|
50
|
+
use_open_api: bool = False,
|
51
|
+
*,
|
52
|
+
async_: Literal[False, True] = False,
|
53
|
+
**request_kwargs,
|
54
|
+
) -> Iterator[dict] | AsyncIterator[dict]:
|
55
|
+
"""遍历任务列表,获取任务信息
|
56
|
+
|
57
|
+
:param client: 115 客户端或 cookies
|
58
|
+
:param page_start: 开始页数
|
59
|
+
:param page_stop: 结束页数(不含),如果 <= 0,则不限
|
60
|
+
:param cooldown: 接口调用冷却时间,单位:秒
|
61
|
+
:param use_open_api: 是否使用 open api
|
62
|
+
:param async_: 是否异步
|
63
|
+
:param request_kwargs: 其它请求参数
|
64
|
+
|
65
|
+
:return: 迭代器,返回任务信息
|
66
|
+
"""
|
67
|
+
if isinstance(client, str):
|
68
|
+
client = P115Client(client, check_for_relogin=True)
|
69
|
+
if page_start < 1:
|
70
|
+
page_start = 1
|
71
|
+
if page_stop > 0:
|
72
|
+
pages: Iterable[int] = range(page_start, page_stop)
|
73
|
+
else:
|
74
|
+
pages = count(page_start)
|
75
|
+
if not isinstance(client, P115Client):
|
76
|
+
use_open_api = True
|
77
|
+
def gen_step():
|
78
|
+
if use_open_api:
|
79
|
+
offline_list = client.offline_list_open
|
80
|
+
else:
|
81
|
+
offline_list = client.offline_list
|
82
|
+
if cooldown > 0:
|
83
|
+
do_sleep = async_sleep if async_ else sleep
|
84
|
+
last_t: float = 0
|
85
|
+
for page in pages:
|
86
|
+
if last_t and (diff := last_t + cooldown - time()) > 0:
|
87
|
+
yield do_sleep(diff)
|
88
|
+
last_t = time()
|
89
|
+
resp = yield offline_list(page, async_=async_, **request_kwargs)
|
90
|
+
check_response(resp)
|
91
|
+
if use_open_api:
|
92
|
+
resp = resp["data"]
|
93
|
+
tasks = resp["tasks"]
|
94
|
+
if not tasks:
|
95
|
+
break
|
96
|
+
yield YieldFrom(resp["tasks"])
|
97
|
+
if len(tasks) < 30 or page >= resp["page_count"]:
|
98
|
+
break
|
99
|
+
return run_gen_step_iter(gen_step, async_=async_)
|
100
|
+
|
101
|
+
|
102
|
+
@overload
|
103
|
+
def offline_restart_iter(
|
104
|
+
client: str | P115Client,
|
105
|
+
/,
|
106
|
+
predicate: None | Callable[[dict], bool] = None,
|
107
|
+
*,
|
108
|
+
async_: Literal[False] = False,
|
109
|
+
**request_kwargs,
|
110
|
+
) -> Iterator[dict]:
|
111
|
+
...
|
112
|
+
@overload
|
113
|
+
def offline_restart_iter(
|
114
|
+
client: str | P115Client,
|
115
|
+
/,
|
116
|
+
predicate: None | Callable[[dict], bool] = None,
|
117
|
+
*,
|
118
|
+
async_: Literal[True],
|
119
|
+
**request_kwargs,
|
120
|
+
) -> AsyncIterator[dict]:
|
121
|
+
...
|
122
|
+
def offline_restart_iter(
|
123
|
+
client: str | P115Client,
|
124
|
+
/,
|
125
|
+
predicate: None | Callable[[dict], bool] = None,
|
126
|
+
*,
|
127
|
+
async_: Literal[False, True] = False,
|
128
|
+
**request_kwargs,
|
129
|
+
) -> Iterator[dict] | AsyncIterator[dict]:
|
130
|
+
"""重试任务:重试那些因为空间不足而转存失败的任务
|
131
|
+
|
132
|
+
:param client: 115 客户端或 cookies
|
133
|
+
:param predicate: 断言,用于筛选
|
134
|
+
:param async_: 是否异步
|
135
|
+
:param request_kwargs: 其它请求参数
|
136
|
+
|
137
|
+
:return: 迭代器,逐个任务返回执行重试后的响应
|
138
|
+
"""
|
139
|
+
if isinstance(client, str):
|
140
|
+
client = P115Client(client, check_for_relogin=True)
|
141
|
+
def gen_step():
|
142
|
+
left_no_space: list[dict] = []
|
143
|
+
add_task = left_no_space.append
|
144
|
+
with with_iter_next(offline_iter(
|
145
|
+
client,
|
146
|
+
async_=async_,
|
147
|
+
**request_kwargs,
|
148
|
+
)) as do_next:
|
149
|
+
while True:
|
150
|
+
task = yield do_next()
|
151
|
+
if task["move"] == -1:
|
152
|
+
add_task(task)
|
153
|
+
elif task["status"] == 2:
|
154
|
+
break
|
155
|
+
for task in filter(predicate, left_no_space):
|
156
|
+
resp = yield client.offline_restart(
|
157
|
+
task["info_hash"],
|
158
|
+
async_=async_,
|
159
|
+
**request_kwargs,
|
160
|
+
)
|
161
|
+
resp["task"] = task
|
162
|
+
yield Yield(resp)
|
163
|
+
return run_gen_step_iter(gen_step, async_=async_)
|
164
|
+
|
@@ -1,11 +1,11 @@
|
|
1
1
|
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
2
2
|
p115client/__init__.py,sha256=1mx7njuAlqcuEWONTjSiiGnXyyNyqOcJyNX1FMHqQ-4,214
|
3
3
|
p115client/_upload.py,sha256=3uXwgFsXkZ4X5hjL1N2mx0y8tA8MjVxe49N0BoyYyno,31253
|
4
|
-
p115client/client.py,sha256=
|
4
|
+
p115client/client.py,sha256=x4bRgtiN6OnA0WNKMfqQxft6MMAhUY2BpUm-w-x_M0w,791559
|
5
5
|
p115client/const.py,sha256=KqDGr9KsOnSkNVM3RIdQGptCMHbidMmZ_ffyFPiniww,7654
|
6
6
|
p115client/exception.py,sha256=4SZ8ubOLMRxtcqc0u1kNzXqH1a6wwXJFwGnRDURoEgQ,3708
|
7
7
|
p115client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
p115client/tool/__init__.py,sha256=
|
8
|
+
p115client/tool/__init__.py,sha256=IwwzbCQ7jpRoFGTQUCfGBx8zvjqjgSFs98yKpYyI46s,429
|
9
9
|
p115client/tool/attr.py,sha256=RmNm5uar2PVv1Me7xOWyM0JtZr-JqoglIIpF0WHGues,2979
|
10
10
|
p115client/tool/auth.py,sha256=jUkVaCACg_K38RzpHTMGvve1xvhAdBeyPGtlNIfA_9M,1679
|
11
11
|
p115client/tool/download.py,sha256=CZJE5f1SHi26eCNTPcF5VjSoht8WTUYravEG219i4gk,61534
|
@@ -15,13 +15,14 @@ p115client/tool/fs_files.py,sha256=cRUa-GNjoOMoLtLJxG-Zp6C6QFoM1Au0B_Z19KhLzn8,1
|
|
15
15
|
p115client/tool/history.py,sha256=qquCiiOIRpxOqmyXbmdwS_qpfPkduJilM6AGuOufrYU,7462
|
16
16
|
p115client/tool/iterdir.py,sha256=dXBMPfxPzRcFhBpnBT3X1LYkhc3l31rYCLRKRFbggSk,200498
|
17
17
|
p115client/tool/life.py,sha256=ceweN2uNKYxigSOaBQ4Abo5u05zqppRm_P7k-_rHjcA,17301
|
18
|
+
p115client/tool/offline.py,sha256=5I7ooTaxB3bGncfNtTnBNGDmErjCJae6Q9jkLAS34Is,4978
|
18
19
|
p115client/tool/pool.py,sha256=H65VhoNxQC6xWSL1THq_PximWnBOqB4EfU6kWBTAnlA,13946
|
19
20
|
p115client/tool/request.py,sha256=rjXuQwRganE5Z-4rfgnyPFjE4jzdQSLdIs9s0cIDshU,7043
|
20
21
|
p115client/tool/upload.py,sha256=D2TPJlS--bGX-oHgTm6ktoqnX1_gwOMwxwMkiOwGuIY,32695
|
21
22
|
p115client/tool/util.py,sha256=pAa8gc4BcnVTpNcXbNZU4tBUMjSB04DGOpzDdzfbto8,3934
|
22
23
|
p115client/tool/xys.py,sha256=vU28Px2yeQzIxxGkopJIpvV6TdOnWJ5xB6NPXpTgM0Y,10306
|
23
24
|
p115client/type.py,sha256=7kOp98uLaYqcTTCgCrb3DRcl8ukMpn7ibsnVvtw2nG8,6250
|
24
|
-
p115client-0.0.5.
|
25
|
-
p115client-0.0.5.
|
26
|
-
p115client-0.0.5.
|
27
|
-
p115client-0.0.5.
|
25
|
+
p115client-0.0.5.12.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
26
|
+
p115client-0.0.5.12.dist-info/METADATA,sha256=FRN0doCLYfQD35AWBrTXj9NS308arg3l_0TFosyYrto,8190
|
27
|
+
p115client-0.0.5.12.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
28
|
+
p115client-0.0.5.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|