p115client 0.0.5.14.4__py3-none-any.whl → 0.0.5.15.1__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 CHANGED
@@ -396,6 +396,9 @@ def check_response(resp: dict | Awaitable[dict], /) -> dict | Coroutine[Any, Any
396
396
  # {"state": false, "errno": 911, "error": "请验证账号"}
397
397
  case 911:
398
398
  raise AuthenticationError(errno.EAUTH, resp)
399
+ # {"state": false, "errno": 1001, "error": "参数错误"}
400
+ case 1001:
401
+ raise OperationalError(errno.EINVAL, resp)
399
402
  # {"state": false, "errno": 10004, "error": "错误的链接"}
400
403
  case 10004:
401
404
  raise OperationalError(errno.EINVAL, resp)
@@ -3168,10 +3171,26 @@ class P115OpenClient(ClientRequestMixin):
3168
3171
  .. todo::
3169
3172
  不动点可能和用户 id 有某种联系,但目前样本不足,难以推断,以后再尝试分析
3170
3173
  """
3171
- resp = self.fs_files({"show_dir": 1, "limit": 1, "cid": 0})
3172
- check_response(resp)
3173
- info = resp["data"][0]
3174
- return get_stable_point(normalize_attr(info)["pickcode"])
3174
+ user_id = str(self.user_id)
3175
+ cache_dir = Path("~/.p115client.cache.d").expanduser()
3176
+ cache_dir.mkdir(exist_ok=True)
3177
+ pc_2_point_json = cache_dir / "pickcode_stable_points.json"
3178
+ try:
3179
+ cache = loads(pc_2_point_json.open("rb").read())
3180
+ except OSError:
3181
+ cache = {}
3182
+ if point := cache.get(user_id):
3183
+ return point
3184
+ else:
3185
+ resp = self.fs_files({"show_dir": 1, "limit": 1, "cid": 0})
3186
+ check_response(resp)
3187
+ info = resp["data"][0]
3188
+ point = cache[user_id] = get_stable_point(normalize_attr(info)["pickcode"])
3189
+ try:
3190
+ pc_2_point_json.open("wb").write(dumps(cache))
3191
+ except Exception:
3192
+ pass
3193
+ return point
3175
3194
 
3176
3195
  @overload
3177
3196
  def refresh_access_token(
@@ -3550,13 +3569,13 @@ class P115OpenClient(ClientRequestMixin):
3550
3569
  - nf: str = <default> 💡 不要显示文件(即仅显示目录),但如果 show_dir=0,则此参数无效
3551
3570
  - o: str = <default> 💡 用某字段排序(未定义的值会被视为 "user_utime")
3552
3571
 
3553
- - "file_name": 文件名
3554
- - "file_size": 文件大小
3555
- - "file_type": 文件种类
3556
- - "user_etime": 事件时间(无效,效果相当于 "user_utime")
3557
- - "user_utime": 修改时间
3558
- - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
3559
- - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
3572
+ - "file_name": 文件名
3573
+ - "file_size": 文件大小
3574
+ - "file_type": 文件种类
3575
+ - "user_etime": 事件时间(无效,效果相当于 "user_utime")
3576
+ - "user_utime": 修改时间
3577
+ - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
3578
+ - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
3560
3579
 
3561
3580
  - qid: int = <default>
3562
3581
  - r_all: 0 | 1 = <default>
@@ -3571,23 +3590,23 @@ class P115OpenClient(ClientRequestMixin):
3571
3590
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
3572
3591
  - type: int = <default> 💡 文件类型
3573
3592
 
3574
- - 0: 全部(仅当前目录)
3575
- - 1: 文档
3576
- - 2: 图片
3577
- - 3: 音频
3578
- - 4: 视频
3579
- - 5: 压缩包
3580
- - 6: 软件/应用
3581
- - 7: 书籍
3582
- - 8: 其它
3583
- - 9: 相当于 8
3584
- - 10: 相当于 8
3585
- - 11: 相当于 8
3586
- - 12: ???
3587
- - 13: ???
3588
- - 14: ???
3589
- - 15: 图片和视频,相当于 2 和 4
3590
- - >= 16: 相当于 8
3593
+ - 0: 全部(仅当前目录)
3594
+ - 1: 文档
3595
+ - 2: 图片
3596
+ - 3: 音频
3597
+ - 4: 视频
3598
+ - 5: 压缩包
3599
+ - 6: 软件/应用
3600
+ - 7: 书籍
3601
+ - 8: 其它
3602
+ - 9: 相当于 8
3603
+ - 10: 相当于 8
3604
+ - 11: 相当于 8
3605
+ - 12: ???
3606
+ - 13: ???
3607
+ - 14: ???
3608
+ - 15: 图片和视频,相当于 2 和 4
3609
+ - >= 16: 相当于 8
3591
3610
  """
3592
3611
  api = complete_proapi("/open/ufile/files", base_url)
3593
3612
  if isinstance(payload, (int, str)):
@@ -3846,12 +3865,12 @@ class P115OpenClient(ClientRequestMixin):
3846
3865
  - lte_day: str 💡 搜索结果匹配的结束时间;格式:YYYY-MM-DD
3847
3866
  - o: str = <default> 💡 用某字段排序
3848
3867
 
3849
- - "file_name": 文件名
3850
- - "file_size": 文件大小
3851
- - "file_type": 文件种类
3852
- - "user_utime": 修改时间
3853
- - "user_ptime": 创建时间
3854
- - "user_otime": 上一次打开时间
3868
+ - "file_name": 文件名
3869
+ - "file_size": 文件大小
3870
+ - "file_type": 文件种类
3871
+ - "user_utime": 修改时间
3872
+ - "user_ptime": 创建时间
3873
+ - "user_otime": 上一次打开时间
3855
3874
 
3856
3875
  - offset: int = 0 💡 索引偏移,索引从 0 开始计算
3857
3876
  - pick_code: str = <default> 💡 是否查询提取码,如果该值为 1 则查询提取码为 `search_value` 的文件
@@ -3862,15 +3881,15 @@ class P115OpenClient(ClientRequestMixin):
3862
3881
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
3863
3882
  - type: int = <default> 💡 文件类型
3864
3883
 
3865
- - 0: 全部(仅当前目录)
3866
- - 1: 文档
3867
- - 2: 图片
3868
- - 3: 音频
3869
- - 4: 视频
3870
- - 5: 压缩包
3871
- - 6: 软件/应用
3872
- - 7: 书籍
3873
- - 99: 仅文件
3884
+ - 0: 全部(仅当前目录)
3885
+ - 1: 文档
3886
+ - 2: 图片
3887
+ - 3: 音频
3888
+ - 4: 视频
3889
+ - 5: 压缩包
3890
+ - 6: 软件/应用
3891
+ - 7: 书籍
3892
+ - 99: 所有文件
3874
3893
 
3875
3894
  - version: str = <default> 💡 版本号,比如 3.1
3876
3895
  """
@@ -4387,12 +4406,12 @@ class P115OpenClient(ClientRequestMixin):
4387
4406
  :payload:
4388
4407
  - flag: int = 0 💡 标识,用于对应某种情况
4389
4408
 
4390
- - 0: 已完成
4391
- - 1: 全部
4392
- - 2: 已失败
4393
- - 3: 进行中
4394
- - 4: 已完成+删除源文件
4395
- - 5: 全部+删除源文件
4409
+ - 0: 已完成
4410
+ - 1: 全部
4411
+ - 2: 已失败
4412
+ - 3: 进行中
4413
+ - 4: 已完成+删除源文件
4414
+ - 5: 全部+删除源文件
4396
4415
  """
4397
4416
  api = complete_proapi("/open/offline/clear_task", base_url)
4398
4417
  if isinstance(payload, int):
@@ -7326,9 +7345,9 @@ class P115Client(P115OpenClient):
7326
7345
  :payload:
7327
7346
  - type: 0 | 1 | 2 = 0 💡 类型
7328
7347
 
7329
- - 0: 全部
7330
- - 1: 进行中
7331
- - 2: 已实现
7348
+ - 0: 全部
7349
+ - 1: 进行中
7350
+ - 2: 已实现
7332
7351
 
7333
7352
  - start: int = 0 💡 开始索引
7334
7353
  - page: int = 1 💡 第几页
@@ -7382,9 +7401,9 @@ class P115Client(P115OpenClient):
7382
7401
  :payload:
7383
7402
  - type: 0 | 1 | 2 = 0 💡 类型
7384
7403
 
7385
- - 0: 全部
7386
- - 1: 进行中
7387
- - 2: 已实现
7404
+ - 0: 全部
7405
+ - 1: 进行中
7406
+ - 2: 已实现
7388
7407
 
7389
7408
  - start: int = 0 💡 开始索引
7390
7409
  - page: int = 1 💡 第几页
@@ -9269,9 +9288,9 @@ class P115Client(P115OpenClient):
9269
9288
  - file_id: int | str 目录 id,多个用逗号 "," 隔开
9270
9289
  - op: "add" | "delete" | "top" = "add" 操作代码
9271
9290
 
9272
- - "add": 添加
9273
- - "delete": 删除
9274
- - "top": 置顶
9291
+ - "add": 添加
9292
+ - "delete": 删除
9293
+ - "top": 置顶
9275
9294
  """
9276
9295
  api = complete_webapi("/category/shortcut", base_url=base_url)
9277
9296
  if isinstance(payload, (int, str)):
@@ -10472,12 +10491,12 @@ class P115Client(P115OpenClient):
10472
10491
  - nf: str = <default> 💡 不要显示文件(即仅显示目录),但如果 show_dir=0,则此参数无效
10473
10492
  - o: str = <default> 💡 用某字段排序
10474
10493
 
10475
- - "file_name": 文件名
10476
- - "file_size": 文件大小
10477
- - "file_type": 文件种类
10478
- - "user_utime": 修改时间
10479
- - "user_ptime": 创建时间
10480
- - "user_otime": 上一次打开时间
10494
+ - "file_name": 文件名
10495
+ - "file_size": 文件大小
10496
+ - "file_type": 文件种类
10497
+ - "user_utime": 修改时间
10498
+ - "user_ptime": 创建时间
10499
+ - "user_otime": 上一次打开时间
10481
10500
 
10482
10501
  - oof_token: str = <default>
10483
10502
  - qid: int | str = <default>
@@ -10494,26 +10513,26 @@ class P115Client(P115OpenClient):
10494
10513
  - suffix_type: int = <default>
10495
10514
  - type: int = <default> 💡 文件类型
10496
10515
 
10497
- - 0: 全部(仅当前目录)
10498
- - 1: 文档
10499
- - 2: 图片
10500
- - 3: 音频
10501
- - 4: 视频
10502
- - 5: 压缩包
10503
- - 6: 软件/应用
10504
- - 7: 书籍
10505
- - 8: 其它
10506
- - 9: 相当于 8
10507
- - 10: 相当于 8
10508
- - 11: 相当于 8
10509
- - 12: ???
10510
- - 13: 相当于 3
10511
- - 14: ???
10512
- - 15: 图片和视频,相当于 2 和 4
10513
- - 16: ???
10514
- - 17~98: 相当于 8
10515
- - 99: 仅文件
10516
- - >=100: 相当于 8
10516
+ - 0: 全部(仅当前目录)
10517
+ - 1: 文档
10518
+ - 2: 图片
10519
+ - 3: 音频
10520
+ - 4: 视频
10521
+ - 5: 压缩包
10522
+ - 6: 软件/应用
10523
+ - 7: 书籍
10524
+ - 8: 其它
10525
+ - 9: 相当于 8
10526
+ - 10: 相当于 8
10527
+ - 11: 相当于 8
10528
+ - 12: ???
10529
+ - 13: 相当于 3
10530
+ - 14: ???
10531
+ - 15: 图片和视频,相当于 2 和 4
10532
+ - 16: ???
10533
+ - 17~98: 相当于 8
10534
+ - 99: 所有文件
10535
+ - >=100: 相当于 8
10517
10536
  """
10518
10537
  api = complete_webapi("/files", base_url=base_url)
10519
10538
  if isinstance(payload, (int, str)):
@@ -10615,13 +10634,13 @@ class P115Client(P115OpenClient):
10615
10634
  - nf: str = <default> 💡 不要显示文件(即仅显示目录),但如果 show_dir=0,则此参数无效
10616
10635
  - o: str = <default> 💡 用某字段排序(未定义的值会被视为 "user_utime")
10617
10636
 
10618
- - "file_name": 文件名
10619
- - "file_size": 文件大小
10620
- - "file_type": 文件种类
10621
- - "user_etime": 事件时间(无效,效果相当于 "user_utime")
10622
- - "user_utime": 修改时间
10623
- - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
10624
- - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
10637
+ - "file_name": 文件名
10638
+ - "file_size": 文件大小
10639
+ - "file_type": 文件种类
10640
+ - "user_etime": 事件时间(无效,效果相当于 "user_utime")
10641
+ - "user_utime": 修改时间
10642
+ - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
10643
+ - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
10625
10644
 
10626
10645
  - r_all: 0 | 1 = <default>
10627
10646
  - record_open_time: 0 | 1 = 1 💡 是否要记录目录的打开时间
@@ -10635,23 +10654,23 @@ class P115Client(P115OpenClient):
10635
10654
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
10636
10655
  - type: int = <default> 💡 文件类型
10637
10656
 
10638
- - 0: 全部(仅当前目录)
10639
- - 1: 文档
10640
- - 2: 图片
10641
- - 3: 音频
10642
- - 4: 视频
10643
- - 5: 压缩包
10644
- - 6: 软件/应用
10645
- - 7: 书籍
10646
- - 8: 其它
10647
- - 9: 相当于 8
10648
- - 10: 相当于 8
10649
- - 11: 相当于 8
10650
- - 12: ???
10651
- - 13: ???
10652
- - 14: ???
10653
- - 15: 图片和视频,相当于 2 和 4
10654
- - >= 16: 相当于 8
10657
+ - 0: 全部(仅当前目录)
10658
+ - 1: 文档
10659
+ - 2: 图片
10660
+ - 3: 音频
10661
+ - 4: 视频
10662
+ - 5: 压缩包
10663
+ - 6: 软件/应用
10664
+ - 7: 书籍
10665
+ - 8: 其它
10666
+ - 9: 相当于 8
10667
+ - 10: 相当于 8
10668
+ - 11: 相当于 8
10669
+ - 12: ???
10670
+ - 13: ???
10671
+ - 14: ???
10672
+ - 15: 图片和视频,相当于 2 和 4
10673
+ - >= 16: 相当于 8
10655
10674
  """
10656
10675
  api = complete_proapi("/2.0/ufile/files", base_url, app)
10657
10676
  if isinstance(payload, (int, str)):
@@ -10745,13 +10764,13 @@ class P115Client(P115OpenClient):
10745
10764
  - nf: str = <default> 💡 不要显示文件(即仅显示目录),但如果 show_dir=0,则此参数无效
10746
10765
  - o: str = <default> 💡 用某字段排序(未定义的值会被视为 "user_utime")
10747
10766
 
10748
- - "file_name": 文件名
10749
- - "file_size": 文件大小
10750
- - "file_type": 文件种类
10751
- - "user_etime": 事件时间(无效,效果相当于 "user_utime")
10752
- - "user_utime": 修改时间
10753
- - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
10754
- - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
10767
+ - "file_name": 文件名
10768
+ - "file_size": 文件大小
10769
+ - "file_type": 文件种类
10770
+ - "user_etime": 事件时间(无效,效果相当于 "user_utime")
10771
+ - "user_utime": 修改时间
10772
+ - "user_ptime": 创建时间(无效,效果相当于 "user_utime")
10773
+ - "user_otime": 上一次打开时间(无效,效果相当于 "user_utime")
10755
10774
 
10756
10775
  - r_all: 0 | 1 = <default>
10757
10776
  - record_open_time: 0 | 1 = 1 💡 是否要记录目录的打开时间
@@ -10765,23 +10784,23 @@ class P115Client(P115OpenClient):
10765
10784
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
10766
10785
  - type: int = <default> 💡 文件类型
10767
10786
 
10768
- - 0: 全部(仅当前目录)
10769
- - 1: 文档
10770
- - 2: 图片
10771
- - 3: 音频
10772
- - 4: 视频
10773
- - 5: 压缩包
10774
- - 6: 软件/应用
10775
- - 7: 书籍
10776
- - 8: 其它
10777
- - 9: 相当于 8
10778
- - 10: 相当于 8
10779
- - 11: 相当于 8
10780
- - 12: ???
10781
- - 13: ???
10782
- - 14: ???
10783
- - 15: 图片和视频,相当于 2 和 4
10784
- - >= 16: 相当于 8
10787
+ - 0: 全部(仅当前目录)
10788
+ - 1: 文档
10789
+ - 2: 图片
10790
+ - 3: 音频
10791
+ - 4: 视频
10792
+ - 5: 压缩包
10793
+ - 6: 软件/应用
10794
+ - 7: 书籍
10795
+ - 8: 其它
10796
+ - 9: 相当于 8
10797
+ - 10: 相当于 8
10798
+ - 11: 相当于 8
10799
+ - 12: ???
10800
+ - 13: ???
10801
+ - 14: ???
10802
+ - 15: 图片和视频,相当于 2 和 4
10803
+ - >= 16: 相当于 8
10785
10804
  """
10786
10805
  api = complete_proapi("/files", base_url, app)
10787
10806
  if isinstance(payload, (int, str)):
@@ -10885,26 +10904,26 @@ class P115Client(P115OpenClient):
10885
10904
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
10886
10905
  - type: int = <default> 💡 文件类型
10887
10906
 
10888
- - 0: 全部(仅当前目录)
10889
- - 1: 文档
10890
- - 2: 图片
10891
- - 3: 音频
10892
- - 4: 视频
10893
- - 5: 压缩包
10894
- - 6: 软件/应用
10895
- - 7: 书籍
10896
- - 8: 其它
10897
- - 9: 相当于 8
10898
- - 10: 相当于 8
10899
- - 11: 相当于 8
10900
- - 12: ???
10901
- - 13: 相当于 3
10902
- - 14: ???
10903
- - 15: 图片和视频,相当于 2 和 4
10904
- - 16: ???
10905
- - 17~98: 相当于 8
10906
- - 99: 仅文件
10907
- - >=100: 相当于 8
10907
+ - 0: 全部(仅当前目录)
10908
+ - 1: 文档
10909
+ - 2: 图片
10910
+ - 3: 音频
10911
+ - 4: 视频
10912
+ - 5: 压缩包
10913
+ - 6: 软件/应用
10914
+ - 7: 书籍
10915
+ - 8: 其它
10916
+ - 9: 相当于 8
10917
+ - 10: 相当于 8
10918
+ - 11: 相当于 8
10919
+ - 12: ???
10920
+ - 13: 相当于 3
10921
+ - 14: ???
10922
+ - 15: 图片和视频,相当于 2 和 4
10923
+ - 16: ???
10924
+ - 17~98: 相当于 8
10925
+ - 99: 所有文件
10926
+ - >=100: 相当于 8
10908
10927
  """
10909
10928
  api = complete_api("/natsort/files.php", "aps", base_url=base_url)
10910
10929
  if isinstance(payload, (int, str)):
@@ -11072,6 +11091,209 @@ class P115Client(P115OpenClient):
11072
11091
 
11073
11092
  fs_video_history_set = fs_files_history_set
11074
11093
 
11094
+
11095
+ @overload
11096
+ def fs_files_image(
11097
+ self,
11098
+ payload: int | str | dict,
11099
+ /,
11100
+ base_url: bool | str | Callable[[], str] = False,
11101
+ *,
11102
+ async_: Literal[False] = False,
11103
+ **request_kwargs,
11104
+ ) -> dict:
11105
+ ...
11106
+ @overload
11107
+ def fs_files_image(
11108
+ self,
11109
+ payload: int | str | dict,
11110
+ /,
11111
+ base_url: bool | str | Callable[[], str] = False,
11112
+ *,
11113
+ async_: Literal[True],
11114
+ **request_kwargs,
11115
+ ) -> Coroutine[Any, Any, dict]:
11116
+ ...
11117
+ def fs_files_image(
11118
+ self,
11119
+ payload: int | str | dict,
11120
+ /,
11121
+ base_url: bool | str | Callable[[], str] = False,
11122
+ *,
11123
+ async_: Literal[False, True] = False,
11124
+ **request_kwargs,
11125
+ ) -> dict | Coroutine[Any, Any, dict]:
11126
+ """获取目录中的图片列表和基本信息
11127
+
11128
+ GET https://webapi.115.com/files/imglist
11129
+
11130
+ .. danger::
11131
+ 这个函数大概是有 bug 的,不推荐使用
11132
+
11133
+ .. attention::
11134
+ 只能获取直属于 `cid` 所在目录的图片,不会遍历整个目录树
11135
+
11136
+ :payload:
11137
+ - cid: int | str 💡 目录 id,对应 parent_id
11138
+ - file_id: int | str 💡 不能是 0,可以不同于 `cid`,必须是任何一个有效的 id(单纯是被检查一下)
11139
+ - limit: int = <default> 💡 最多返回数量
11140
+ - offset: int = 0 💡 索引偏移,索引从 0 开始计算
11141
+ - is_asc: 0 | 1 = <default> 💡 是否升序排列
11142
+ - next: 0 | 1 = <default>
11143
+ - order: str = <default> 💡 用某字段排序
11144
+
11145
+ - 文件名:"file_name"
11146
+ - 文件大小:"file_size"
11147
+ - 文件种类:"file_type"
11148
+ - 修改时间:"user_utime"
11149
+ - 创建时间:"user_ptime"
11150
+ - 上一次打开时间:"user_otime"
11151
+ """
11152
+ api = complete_webapi("/files/imglist", base_url=base_url)
11153
+ if isinstance(payload, (int, str)):
11154
+ payload = {"limit": 32, "offset": 0, "cid": payload}
11155
+ else:
11156
+ payload = {"limit": 32, "offset": 0, "cid": 0, **payload}
11157
+ if cid := payload.get("cid"):
11158
+ payload.setdefault("file_id", cid)
11159
+ return self.request(url=api, params=payload, async_=async_, **request_kwargs)
11160
+
11161
+ @overload
11162
+ def fs_files_image_app(
11163
+ self,
11164
+ payload: int | str | dict = 0,
11165
+ /,
11166
+ app: str = "android",
11167
+ base_url: bool | str | Callable[[], str] = False,
11168
+ *,
11169
+ async_: Literal[False] = False,
11170
+ **request_kwargs,
11171
+ ) -> dict:
11172
+ ...
11173
+ @overload
11174
+ def fs_files_image_app(
11175
+ self,
11176
+ payload: int | str | dict = 0,
11177
+ /,
11178
+ app: str = "android",
11179
+ base_url: bool | str | Callable[[], str] = False,
11180
+ *,
11181
+ async_: Literal[True],
11182
+ **request_kwargs,
11183
+ ) -> Coroutine[Any, Any, dict]:
11184
+ ...
11185
+ def fs_files_image_app(
11186
+ self,
11187
+ payload: int | str | dict = 0,
11188
+ /,
11189
+ app: str = "android",
11190
+ base_url: bool | str | Callable[[], str] = False,
11191
+ *,
11192
+ async_: Literal[False, True] = False,
11193
+ **request_kwargs,
11194
+ ) -> dict | Coroutine[Any, Any, dict]:
11195
+ """获取目录中的图片列表和基本信息
11196
+
11197
+ GET https://proapi.115.com/android/files/imglist
11198
+
11199
+ :payload:
11200
+ - cid: int | str = 0 💡 目录 id,对应 parent_id
11201
+ - limit: int = 32 💡 一页大小,建议控制在 <= 9000,不然会报错
11202
+ - offset: int = 0 💡 索引偏移,索引从 0 开始计算
11203
+
11204
+ - aid: int | str = 1 💡 area_id。1:正常文件 7:回收站文件 12:瞬间文件 120:彻底删除文件、简历附件
11205
+ - asc: 0 | 1 = <default> 💡 是否升序排列
11206
+ - cur: 0 | 1 = <default> 💡 只罗列当前目录
11207
+ - o: str = <default> 💡 用某字段排序
11208
+
11209
+ - 文件名:"file_name"
11210
+ - 文件大小:"file_size"
11211
+ - 文件种类:"file_type"
11212
+ - 修改时间:"user_utime"
11213
+ - 创建时间:"user_ptime"
11214
+ - 上一次打开时间:"user_otime"
11215
+ """
11216
+ api = complete_proapi("/files/imglist", base_url, app)
11217
+ if isinstance(payload, (int, str)):
11218
+ payload = {"limit": 32, "offset": 0, "aid": 1, "cid": payload}
11219
+ else:
11220
+ payload = {"limit": 32, "offset": 0, "aid": 1, "cid": 0, **payload}
11221
+ return self.request(url=api, params=payload, async_=async_, **request_kwargs)
11222
+
11223
+ @overload
11224
+ def fs_files_media_app(
11225
+ self,
11226
+ payload: int | str | dict = 0,
11227
+ /,
11228
+ app: str = "android",
11229
+ base_url: bool | str | Callable[[], str] = False,
11230
+ *,
11231
+ async_: Literal[False] = False,
11232
+ **request_kwargs,
11233
+ ) -> dict:
11234
+ ...
11235
+ @overload
11236
+ def fs_files_media_app(
11237
+ self,
11238
+ payload: int | str | dict = 0,
11239
+ /,
11240
+ app: str = "android",
11241
+ base_url: bool | str | Callable[[], str] = False,
11242
+ *,
11243
+ async_: Literal[True],
11244
+ **request_kwargs,
11245
+ ) -> Coroutine[Any, Any, dict]:
11246
+ ...
11247
+ def fs_files_media_app(
11248
+ self,
11249
+ payload: int | str | dict = 0,
11250
+ /,
11251
+ app: str = "android",
11252
+ base_url: bool | str | Callable[[], str] = False,
11253
+ *,
11254
+ async_: Literal[False, True] = False,
11255
+ **request_kwargs,
11256
+ ) -> dict | Coroutine[Any, Any, dict]:
11257
+ """获取目录中的文件列表和基本信息
11258
+
11259
+ GET https://proapi.115.com/android/files/medialist
11260
+
11261
+ :payload:
11262
+ - cid: int | str = 0 💡 目录 id,对应 parent_id
11263
+ - limit: int = 32 💡 一页大小,建议控制在 <= 9000,不然会报错
11264
+ - offset: int = 0 💡 索引偏移,索引从 0 开始计算
11265
+
11266
+ - aid: int | str = 1 💡 area_id。1:正常文件 7:回收站文件 12:瞬间文件 120:彻底删除文件、简历附件
11267
+ - asc: 0 | 1 = <default> 💡 是否升序排列
11268
+ - cur: 0 | 1 = <default> 💡 只罗列当前目录
11269
+ - o: str = <default> 💡 用某字段排序
11270
+
11271
+ - 文件名:"file_name"
11272
+ - 文件大小:"file_size"
11273
+ - 文件种类:"file_type"
11274
+ - 修改时间:"user_utime"
11275
+ - 创建时间:"user_ptime"
11276
+ - 上一次打开时间:"user_otime"
11277
+
11278
+ - type: int = 0 💡 文件类型
11279
+
11280
+ - 0: 相当于 2
11281
+ - 1: 文档
11282
+ - 2: 图片
11283
+ - 3: 音频
11284
+ - 4: 视频
11285
+ - 5: 压缩包
11286
+ - 6: 软件/应用
11287
+ - 7: 书籍
11288
+ - ...: > 7 则相当于 1,< 0 则是全部文件
11289
+ """
11290
+ api = complete_proapi("/files/medialist", base_url, app)
11291
+ if isinstance(payload, (int, str)):
11292
+ payload = {"limit": 32, "offset": 0, "aid": 1, "type": 0, "cid": payload}
11293
+ else:
11294
+ payload = {"limit": 32, "offset": 0, "aid": 1, "type": 0, "cid": 0, **payload}
11295
+ return self.request(url=api, params=payload, async_=async_, **request_kwargs)
11296
+
11075
11297
  @overload
11076
11298
  def fs_files_second_type(
11077
11299
  self,
@@ -11111,13 +11333,13 @@ class P115Client(P115OpenClient):
11111
11333
  - cid: int | str = 0 💡 目录 id,对应 parent_id
11112
11334
  - type: int = 1 💡 文件类型
11113
11335
 
11114
- - 1: 文档
11115
- - 2: 图片
11116
- - 3: 音频
11117
- - 4: 视频
11118
- - 5: 压缩包
11119
- - 6: 软件/应用
11120
- - 7: 书籍
11336
+ - 1: 文档
11337
+ - 2: 图片
11338
+ - 3: 音频
11339
+ - 4: 视频
11340
+ - 5: 压缩包
11341
+ - 6: 软件/应用
11342
+ - 7: 书籍
11121
11343
 
11122
11344
  - file_label: int | str = <default> 💡 标签 id,多个用逗号 "," 隔开
11123
11345
  """
@@ -11676,15 +11898,15 @@ class P115Client(P115OpenClient):
11676
11898
  :payload:
11677
11899
  - type: int | str = 0 💡 类型(??表示还未搞清楚),多个用逗号 "," 隔开
11678
11900
 
11679
- - 全部: 0
11680
- - ??: 1
11681
- - 离线下载: 2
11682
- - 播放视频: 3
11683
- - 上传: 4
11684
- - ??: 5
11685
- - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
11686
- - 接收: 7
11687
- - 移动: 8
11901
+ - 全部: 0
11902
+ - ??: 1
11903
+ - 离线下载: 2
11904
+ - 播放视频: 3
11905
+ - 上传: 4
11906
+ - ??: 5
11907
+ - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
11908
+ - 接收: 7
11909
+ - 移动: 8
11688
11910
 
11689
11911
  - with_file: 0 | 1 = 0
11690
11912
  """
@@ -11831,15 +12053,15 @@ class P115Client(P115OpenClient):
11831
12053
  :payload:
11832
12054
  - type: int | str = 0 💡 类型(??表示还未搞清楚),多个用逗号 "," 隔开
11833
12055
 
11834
- - 全部: 0
11835
- - ??: 1
11836
- - 离线下载: 2
11837
- - 播放视频: 3
11838
- - 上传: 4
11839
- - ??: 5
11840
- - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
11841
- - 接收: 7
11842
- - 移动: 8
12056
+ - 全部: 0
12057
+ - ??: 1
12058
+ - 离线下载: 2
12059
+ - 播放视频: 3
12060
+ - 上传: 4
12061
+ - ??: 5
12062
+ - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
12063
+ - 接收: 7
12064
+ - 移动: 8
11843
12065
 
11844
12066
  - with_file: 0 | 1 = 0
11845
12067
  """
@@ -11891,15 +12113,15 @@ class P115Client(P115OpenClient):
11891
12113
  - played_end: 0 | 1 = <default> 💡 是否已经播放完
11892
12114
  - type: int = <default> 💡 类型(??表示还未搞清楚),多个用逗号 "," 隔开
11893
12115
 
11894
- - 全部: 0
11895
- - ??: 1
11896
- - 离线下载: 2
11897
- - 播放视频: 3
11898
- - 上传: 4
11899
- - ??: 5
11900
- - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
11901
- - 接收: 7
11902
- - 移动: 8
12116
+ - 全部: 0
12117
+ - ??: 1
12118
+ - 离线下载: 2
12119
+ - 播放视频: 3
12120
+ - 上传: 4
12121
+ - ??: 5
12122
+ - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
12123
+ - 接收: 7
12124
+ - 移动: 8
11903
12125
  """
11904
12126
  api = complete_webapi("/history/list", base_url=base_url)
11905
12127
  if isinstance(payload, (int, str)):
@@ -11952,15 +12174,15 @@ class P115Client(P115OpenClient):
11952
12174
  - played_end: 0 | 1 = <default>
11953
12175
  - type: int = <default> 💡 类型(??表示还未搞清楚),多个用逗号 "," 隔开
11954
12176
 
11955
- - 全部: 0
11956
- - ??: 1
11957
- - 离线下载: 2
11958
- - 播放视频: 3
11959
- - 上传: 4
11960
- - ??: 5
11961
- - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
11962
- - 接收: 7
11963
- - 移动: 8
12177
+ - 全部: 0
12178
+ - ??: 1
12179
+ - 离线下载: 2
12180
+ - 播放视频: 3
12181
+ - 上传: 4
12182
+ - ??: 5
12183
+ - ??: 6(似乎是一些在离线、转存等过程中有重名的目录)
12184
+ - 接收: 7
12185
+ - 移动: 8
11964
12186
  """
11965
12187
  api = complete_proapi("/history/list", base_url, app)
11966
12188
  if isinstance(payload, (int, str)):
@@ -12190,134 +12412,6 @@ class P115Client(P115OpenClient):
12190
12412
  payload = {"imgurl": payload}
12191
12413
  return self.request(url=api, method="POST", data=payload, async_=async_, **request_kwargs)
12192
12414
 
12193
- @overload
12194
- def fs_imglist(
12195
- self,
12196
- payload: int | str | dict,
12197
- /,
12198
- base_url: bool | str | Callable[[], str] = False,
12199
- *,
12200
- async_: Literal[False] = False,
12201
- **request_kwargs,
12202
- ) -> dict:
12203
- ...
12204
- @overload
12205
- def fs_imglist(
12206
- self,
12207
- payload: int | str | dict,
12208
- /,
12209
- base_url: bool | str | Callable[[], str] = False,
12210
- *,
12211
- async_: Literal[True],
12212
- **request_kwargs,
12213
- ) -> Coroutine[Any, Any, dict]:
12214
- ...
12215
- def fs_imglist(
12216
- self,
12217
- payload: int | str | dict,
12218
- /,
12219
- base_url: bool | str | Callable[[], str] = False,
12220
- *,
12221
- async_: Literal[False, True] = False,
12222
- **request_kwargs,
12223
- ) -> dict | Coroutine[Any, Any, dict]:
12224
- """获取目录中的图片列表和基本信息
12225
-
12226
- GET https://webapi.115.com/files/imglist
12227
-
12228
- .. danger::
12229
- 这个函数大概是有 bug 的,不推荐使用
12230
-
12231
- .. attention::
12232
- 只能获取直属于 `cid` 所在目录的图片,不会遍历整个目录树
12233
-
12234
- :payload:
12235
- - cid: int | str 💡 目录 id,对应 parent_id
12236
- - file_id: int | str 💡 不能是 0,可以不同于 `cid`,必须是任何一个有效的 id(单纯是被检查一下)
12237
- - limit: int = <default> 💡 最多返回数量
12238
- - offset: int = 0 💡 索引偏移,索引从 0 开始计算
12239
- - is_asc: 0 | 1 = <default> 💡 是否升序排列
12240
- - next: 0 | 1 = <default>
12241
- - order: str = <default> 💡 用某字段排序
12242
-
12243
- - 文件名:"file_name"
12244
- - 文件大小:"file_size"
12245
- - 文件种类:"file_type"
12246
- - 修改时间:"user_utime"
12247
- - 创建时间:"user_ptime"
12248
- - 上一次打开时间:"user_otime"
12249
- """
12250
- api = complete_webapi("/files/imglist", base_url=base_url)
12251
- if isinstance(payload, (int, str)):
12252
- payload = {"limit": 32, "offset": 0, "cid": payload}
12253
- else:
12254
- payload = {"limit": 32, "offset": 0, "cid": 0, **payload}
12255
- if cid := payload.get("cid"):
12256
- payload.setdefault("file_id", cid)
12257
- return self.request(url=api, params=payload, async_=async_, **request_kwargs)
12258
-
12259
- @overload
12260
- def fs_imglist_app(
12261
- self,
12262
- payload: int | str | dict = 0,
12263
- /,
12264
- app: str = "android",
12265
- base_url: bool | str | Callable[[], str] = False,
12266
- *,
12267
- async_: Literal[False] = False,
12268
- **request_kwargs,
12269
- ) -> dict:
12270
- ...
12271
- @overload
12272
- def fs_imglist_app(
12273
- self,
12274
- payload: int | str | dict = 0,
12275
- /,
12276
- app: str = "android",
12277
- base_url: bool | str | Callable[[], str] = False,
12278
- *,
12279
- async_: Literal[True],
12280
- **request_kwargs,
12281
- ) -> Coroutine[Any, Any, dict]:
12282
- ...
12283
- def fs_imglist_app(
12284
- self,
12285
- payload: int | str | dict = 0,
12286
- /,
12287
- app: str = "android",
12288
- base_url: bool | str | Callable[[], str] = False,
12289
- *,
12290
- async_: Literal[False, True] = False,
12291
- **request_kwargs,
12292
- ) -> dict | Coroutine[Any, Any, dict]:
12293
- """获取目录中的图片列表和基本信息
12294
-
12295
- GET https://proapi.115.com/android/files/imglist
12296
-
12297
- :payload:
12298
- - cid: int | str = 0 💡 目录 id,对应 parent_id
12299
- - limit: int = 32 💡 一页大小,建议控制在 <= 9000,不然会报错
12300
- - offset: int = 0 💡 索引偏移,索引从 0 开始计算
12301
-
12302
- - aid: int | str = 1 💡 area_id。1:正常文件 7:回收站文件 12:瞬间文件 120:彻底删除文件、简历附件
12303
- - asc: 0 | 1 = <default> 💡 是否升序排列
12304
- - cur: 0 | 1 = <default> 💡 只罗列当前目录
12305
- - o: str = <default> 💡 用某字段排序
12306
-
12307
- - 文件名:"file_name"
12308
- - 文件大小:"file_size"
12309
- - 文件种类:"file_type"
12310
- - 修改时间:"user_utime"
12311
- - 创建时间:"user_ptime"
12312
- - 上一次打开时间:"user_otime"
12313
- """
12314
- api = complete_proapi("/files/imglist", base_url, app)
12315
- if isinstance(payload, (int, str)):
12316
- payload = {"limit": 32, "offset": 0, "aid": 1, "cid": payload}
12317
- else:
12318
- payload = {"limit": 32, "offset": 0, "aid": 1, "cid": 0, **payload}
12319
- return self.request(url=api, params=payload, async_=async_, **request_kwargs)
12320
-
12321
12415
  @overload
12322
12416
  def fs_index_info(
12323
12417
  self,
@@ -12681,9 +12775,9 @@ class P115Client(P115OpenClient):
12681
12775
  - keyword: str = <default> 💡 搜索关键词
12682
12776
  - sort: "name" | "update_time" | "create_time" = <default> 💡 排序字段
12683
12777
 
12684
- - 名称: "name"
12685
- - 创建时间: "create_time"
12686
- - 更新时间: "update_time"
12778
+ - 名称: "name"
12779
+ - 创建时间: "create_time"
12780
+ - 更新时间: "update_time"
12687
12781
 
12688
12782
  - order: "asc" | "desc" = <default> 💡 排序顺序:"asc"(升序), "desc"(降序)
12689
12783
  """
@@ -12738,9 +12832,9 @@ class P115Client(P115OpenClient):
12738
12832
  - keyword: str = <default> 💡 搜索关键词
12739
12833
  - sort: "name" | "update_time" | "create_time" = <default> 💡 排序字段
12740
12834
 
12741
- - 名称: "name"
12742
- - 创建时间: "create_time"
12743
- - 更新时间: "update_time"
12835
+ - 名称: "name"
12836
+ - 创建时间: "create_time"
12837
+ - 更新时间: "update_time"
12744
12838
 
12745
12839
  - order: "asc" | "desc" = <default> 💡 排序顺序:"asc"(升序), "desc"(降序)
12746
12840
  """
@@ -12875,10 +12969,10 @@ class P115Client(P115OpenClient):
12875
12969
  :payload:
12876
12970
  - action: "add" | "remove" | "reset" | "replace" 💡 操作名
12877
12971
 
12878
- - "add": 添加
12879
- - "remove": 移除
12880
- - "reset": 重设
12881
- - "replace": 替换
12972
+ - "add": 添加
12973
+ - "remove": 移除
12974
+ - "reset": 重设
12975
+ - "replace": 替换
12882
12976
 
12883
12977
  - file_ids: int | str 💡 文件或目录 id,多个用逗号 "," 隔开
12884
12978
  - file_label: int | str = <default> 💡 标签 id,多个用逗号 "," 隔开
@@ -12928,10 +13022,10 @@ class P115Client(P115OpenClient):
12928
13022
  :payload:
12929
13023
  - action: "add" | "remove" | "reset" | "replace" 💡 操作名
12930
13024
 
12931
- - "add": 添加
12932
- - "remove": 移除
12933
- - "reset": 重设
12934
- - "replace": 替换
13025
+ - "add": 添加
13026
+ - "remove": 移除
13027
+ - "reset": 重设
13028
+ - "replace": 替换
12935
13029
 
12936
13030
  - file_ids: int | str 💡 文件或目录 id,多个用逗号 "," 隔开
12937
13031
  - file_label: int | str = <default> 💡 标签 id,多个用逗号 "," 隔开
@@ -14204,12 +14298,12 @@ class P115Client(P115OpenClient):
14204
14298
  :payload:
14205
14299
  - user_order: str 💡 用某字段排序
14206
14300
 
14207
- - "file_name": 文件名
14208
- - "file_size": 文件大小
14209
- - "file_type": 文件种类
14210
- - "user_utime": 修改时间
14211
- - "user_ptime": 创建时间
14212
- - "user_otime": 上一次打开时间
14301
+ - "file_name": 文件名
14302
+ - "file_size": 文件大小
14303
+ - "file_type": 文件种类
14304
+ - "user_utime": 修改时间
14305
+ - "user_ptime": 创建时间
14306
+ - "user_otime": 上一次打开时间
14213
14307
 
14214
14308
  - file_id: int | str = 0 💡 目录 id,对应 parent_id
14215
14309
  - user_asc: 0 | 1 = <default> 💡 是否升序排列
@@ -14267,12 +14361,12 @@ class P115Client(P115OpenClient):
14267
14361
  :payload:
14268
14362
  - user_order: str 💡 用某字段排序
14269
14363
 
14270
- - "file_name": 文件名
14271
- - "file_size": 文件大小
14272
- - "file_type": 文件种类
14273
- - "user_utime": 修改时间
14274
- - "user_ptime": 创建时间
14275
- - "user_otime": 上一次打开时间
14364
+ - "file_name": 文件名
14365
+ - "file_size": 文件大小
14366
+ - "file_type": 文件种类
14367
+ - "user_utime": 修改时间
14368
+ - "user_ptime": 创建时间
14369
+ - "user_otime": 上一次打开时间
14276
14370
 
14277
14371
  - file_id: int | str = 0 💡 目录 id,对应 parent_id
14278
14372
  - user_asc: 0 | 1 = <default> 💡 是否升序排列
@@ -14715,12 +14809,12 @@ class P115Client(P115OpenClient):
14715
14809
  - limit: int = 32 💡 一页大小,意思就是 page_size
14716
14810
  - o: str = <default> 💡 用某字段排序
14717
14811
 
14718
- - "file_name": 文件名
14719
- - "file_size": 文件大小
14720
- - "file_type": 文件种类
14721
- - "user_utime": 修改时间
14722
- - "user_ptime": 创建时间
14723
- - "user_otime": 上一次打开时间
14812
+ - "file_name": 文件名
14813
+ - "file_size": 文件大小
14814
+ - "file_type": 文件种类
14815
+ - "user_utime": 修改时间
14816
+ - "user_ptime": 创建时间
14817
+ - "user_otime": 上一次打开时间
14724
14818
 
14725
14819
  - offset: int = 0 💡 索引偏移,索引从 0 开始计算
14726
14820
  - pick_code: str = <default> 💡 是否查询提取码,如果该值为 1 则查询提取码为 `search_value` 的文件
@@ -14731,15 +14825,15 @@ class P115Client(P115OpenClient):
14731
14825
  - suffix: str = <default> 💡 文件后缀(扩展名),优先级高于 `type`
14732
14826
  - type: int = <default> 💡 文件类型
14733
14827
 
14734
- - 0: 全部(仅当前目录)
14735
- - 1: 文档
14736
- - 2: 图片
14737
- - 3: 音频
14738
- - 4: 视频
14739
- - 5: 压缩包
14740
- - 6: 软件/应用
14741
- - 7: 书籍
14742
- - 99: 仅文件
14828
+ - 0: 全部(仅当前目录)
14829
+ - 1: 文档
14830
+ - 2: 图片
14831
+ - 3: 音频
14832
+ - 4: 视频
14833
+ - 5: 压缩包
14834
+ - 6: 软件/应用
14835
+ - 7: 书籍
14836
+ - 99: 所有文件
14743
14837
  """
14744
14838
  api = complete_webapi("/files/search", base_url=base_url)
14745
14839
  if isinstance(payload, str):
@@ -14812,12 +14906,12 @@ class P115Client(P115OpenClient):
14812
14906
  - limit: int = 32 💡 一页大小,意思就是 page_size
14813
14907
  - o: str = <default> 💡 用某字段排序
14814
14908
 
14815
- - "file_name": 文件名
14816
- - "file_size": 文件大小
14817
- - "file_type": 文件种类
14818
- - "user_utime": 修改时间
14819
- - "user_ptime": 创建时间
14820
- - "user_otime": 上一次打开时间
14909
+ - "file_name": 文件名
14910
+ - "file_size": 文件大小
14911
+ - "file_type": 文件种类
14912
+ - "user_utime": 修改时间
14913
+ - "user_ptime": 创建时间
14914
+ - "user_otime": 上一次打开时间
14821
14915
 
14822
14916
  - offset: int = 0 💡 索引偏移,索引从 0 开始计算
14823
14917
  - pick_code: str = <default> 💡 是否查询提取码,如果该值为 1 则查询提取码为 `search_value` 的文件
@@ -14828,15 +14922,15 @@ class P115Client(P115OpenClient):
14828
14922
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
14829
14923
  - type: int = <default> 💡 文件类型
14830
14924
 
14831
- - 0: 全部(仅当前目录)
14832
- - 1: 文档
14833
- - 2: 图片
14834
- - 3: 音频
14835
- - 4: 视频
14836
- - 5: 压缩包
14837
- - 6: 软件/应用
14838
- - 7: 书籍
14839
- - 99: 仅文件
14925
+ - 0: 全部(仅当前目录)
14926
+ - 1: 文档
14927
+ - 2: 图片
14928
+ - 3: 音频
14929
+ - 4: 视频
14930
+ - 5: 压缩包
14931
+ - 6: 软件/应用
14932
+ - 7: 书籍
14933
+ - 99: 所有文件
14840
14934
 
14841
14935
  - version: str = <default> 💡 版本号,比如 3.1
14842
14936
  """
@@ -14913,12 +15007,12 @@ class P115Client(P115OpenClient):
14913
15007
  - lte_day: str 💡 搜索结果匹配的结束时间;格式:YYYY-MM-DD
14914
15008
  - o: str = <default> 💡 用某字段排序
14915
15009
 
14916
- - "file_name": 文件名
14917
- - "file_size": 文件大小
14918
- - "file_type": 文件种类
14919
- - "user_utime": 修改时间
14920
- - "user_ptime": 创建时间
14921
- - "user_otime": 上一次打开时间
15010
+ - "file_name": 文件名
15011
+ - "file_size": 文件大小
15012
+ - "file_type": 文件种类
15013
+ - "user_utime": 修改时间
15014
+ - "user_ptime": 创建时间
15015
+ - "user_otime": 上一次打开时间
14922
15016
 
14923
15017
  - offset: int = 0 💡 索引偏移,索引从 0 开始计算
14924
15018
  - pick_code: str = <default> 💡 是否查询提取码,如果该值为 1 则查询提取码为 `search_value` 的文件
@@ -14929,15 +15023,15 @@ class P115Client(P115OpenClient):
14929
15023
  - suffix: str = <default> 💡 后缀名(优先级高于 `type`)
14930
15024
  - type: int = <default> 💡 文件类型
14931
15025
 
14932
- - 0: 全部(仅当前目录)
14933
- - 1: 文档
14934
- - 2: 图片
14935
- - 3: 音频
14936
- - 4: 视频
14937
- - 5: 压缩包
14938
- - 6: 软件/应用
14939
- - 7: 书籍
14940
- - 99: 仅文件
15026
+ - 0: 全部(仅当前目录)
15027
+ - 1: 文档
15028
+ - 2: 图片
15029
+ - 3: 音频
15030
+ - 4: 视频
15031
+ - 5: 压缩包
15032
+ - 6: 软件/应用
15033
+ - 7: 书籍
15034
+ - 99: 所有文件
14941
15035
 
14942
15036
  - version: str = <default> 💡 版本号,比如 3.1
14943
15037
  """
@@ -15994,24 +16088,24 @@ class P115Client(P115OpenClient):
15994
16088
  :payload:
15995
16089
  - type: str = "" 💡 操作类型,若不指定则是全部
15996
16090
 
15997
- - "upload_image_file": 1 💡 上传图片
15998
- - "upload_file": 2 💡 上传文件或目录(不包括图片)
15999
- - "star_image": 3 💡 给图片设置星标
16000
- - "star_file": 4 💡 给文件或目录设置星标(不包括图片)
16001
- - "move_image_file": 5 💡 移动图片
16002
- - "move_file": 6 💡 移动文件或目录(不包括图片)
16003
- - "browse_image": 7 💡 浏览图片
16004
- - "browse_video": 8 💡 浏览视频
16005
- - "browse_audio": 9 💡 浏览音频
16006
- - "browse_document": 10 💡 浏览文档
16007
- - "receive_files": 14 💡 接收文件
16008
- - "new_folder": 17 💡 新增目录
16009
- - "copy_folder": 18 💡 复制目录
16010
- - "folder_label": 19 💡 目录设置标签
16011
- - "folder_rename": 20 💡 目录改名
16012
- - "delete_file": 22 💡 删除文件或目录
16013
- - "copy_file": ? 💡 复制文件(未实现)
16014
- - "rename_file": ? 💡 文件改名(未实现)
16091
+ - "upload_image_file": 1 💡 上传图片
16092
+ - "upload_file": 2 💡 上传文件或目录(不包括图片)
16093
+ - "star_image": 3 💡 给图片设置星标
16094
+ - "star_file": 4 💡 给文件或目录设置星标(不包括图片)
16095
+ - "move_image_file": 5 💡 移动图片
16096
+ - "move_file": 6 💡 移动文件或目录(不包括图片)
16097
+ - "browse_image": 7 💡 浏览图片
16098
+ - "browse_video": 8 💡 浏览视频
16099
+ - "browse_audio": 9 💡 浏览音频
16100
+ - "browse_document": 10 💡 浏览文档
16101
+ - "receive_files": 14 💡 接收文件
16102
+ - "new_folder": 17 💡 新增目录
16103
+ - "copy_folder": 18 💡 复制目录
16104
+ - "folder_label": 19 💡 目录设置标签
16105
+ - "folder_rename": 20 💡 目录改名
16106
+ - "delete_file": 22 💡 删除文件或目录
16107
+ - "copy_file": ? 💡 复制文件(未实现)
16108
+ - "rename_file": ? 💡 文件改名(未实现)
16015
16109
 
16016
16110
  - limit: int = 32 💡 最大值为 1_000
16017
16111
  - offset: int = 0
@@ -16065,24 +16159,24 @@ class P115Client(P115OpenClient):
16065
16159
  :payload:
16066
16160
  - type: str = "" 💡 操作类型
16067
16161
 
16068
- - "upload_image_file": 1 💡 上传图片
16069
- - "upload_file": 2 💡 上传文件或目录(不包括图片)
16070
- - "star_image": 3 💡 给图片设置星标
16071
- - "star_file": 4 💡 给文件或目录设置星标(不包括图片)
16072
- - "move_image_file": 5 💡 移动图片
16073
- - "move_file": 6 💡 移动文件或目录(不包括图片)
16074
- - "browse_image": 7 💡 浏览图片
16075
- - "browse_video": 8 💡 浏览视频
16076
- - "browse_audio": 9 💡 浏览音频
16077
- - "browse_document": 10 💡 浏览文档
16078
- - "receive_files": 14 💡 接收文件
16079
- - "new_folder": 17 💡 新增目录
16080
- - "copy_folder": 18 💡 复制目录
16081
- - "folder_label": 19 💡 目录设置标签
16082
- - "folder_rename": 20 💡 目录改名
16083
- - "delete_file": 22 💡 删除文件或目录
16084
- - "copy_file": ? 💡 复制文件(未实现)
16085
- - "rename_file": ? 💡 文件改名(未实现)
16162
+ - "upload_image_file": 1 💡 上传图片
16163
+ - "upload_file": 2 💡 上传文件或目录(不包括图片)
16164
+ - "star_image": 3 💡 给图片设置星标
16165
+ - "star_file": 4 💡 给文件或目录设置星标(不包括图片)
16166
+ - "move_image_file": 5 💡 移动图片
16167
+ - "move_file": 6 💡 移动文件或目录(不包括图片)
16168
+ - "browse_image": 7 💡 浏览图片
16169
+ - "browse_video": 8 💡 浏览视频
16170
+ - "browse_audio": 9 💡 浏览音频
16171
+ - "browse_document": 10 💡 浏览文档
16172
+ - "receive_files": 14 💡 接收文件
16173
+ - "new_folder": 17 💡 新增目录
16174
+ - "copy_folder": 18 💡 复制目录
16175
+ - "folder_label": 19 💡 目录设置标签
16176
+ - "folder_rename": 20 💡 目录改名
16177
+ - "delete_file": 22 💡 删除文件或目录
16178
+ - "copy_file": ? 💡 复制文件(未实现)
16179
+ - "rename_file": ? 💡 文件改名(未实现)
16086
16180
 
16087
16181
  - limit: int = 32 💡 最大值为 1_000
16088
16182
  - offset: int = 0
@@ -16095,6 +16189,108 @@ class P115Client(P115OpenClient):
16095
16189
  payload = {"limit": 32, "offset": 0, **payload}
16096
16190
  return self.request(url=api, params=payload, async_=async_, **request_kwargs)
16097
16191
 
16192
+ @overload
16193
+ def life_behavior_doc_post_app(
16194
+ self,
16195
+ payload: int | str | Iterable[int | str] | dict,
16196
+ /,
16197
+ app: str = "android",
16198
+ base_url: bool | str | Callable[[], str] = False,
16199
+ *,
16200
+ async_: Literal[False] = False,
16201
+ **request_kwargs,
16202
+ ) -> dict:
16203
+ ...
16204
+ @overload
16205
+ def life_behavior_doc_post_app(
16206
+ self,
16207
+ payload: int | str | Iterable[int | str] | dict,
16208
+ /,
16209
+ app: str = "android",
16210
+ base_url: bool | str | Callable[[], str] = False,
16211
+ *,
16212
+ async_: Literal[True],
16213
+ **request_kwargs,
16214
+ ) -> Coroutine[Any, Any, dict]:
16215
+ ...
16216
+ def life_behavior_doc_post_app(
16217
+ self,
16218
+ payload: int | str | Iterable[int | str] | dict,
16219
+ /,
16220
+ app: str = "android",
16221
+ base_url: bool | str | Callable[[], str] = False,
16222
+ *,
16223
+ async_: Literal[False, True] = False,
16224
+ **request_kwargs,
16225
+ ) -> dict | Coroutine[Any, Any, dict]:
16226
+ """推送事件:浏览文档 "browse_document"
16227
+
16228
+ POST https://proapi.115.com/android/files/doc_behavior
16229
+
16230
+ :payload:
16231
+ - file_id: int | str
16232
+ - file_id[0]: int | str
16233
+ - file_id[1]: int | str
16234
+ - ...
16235
+ """
16236
+ api = complete_proapi("/files/doc_behavior", base_url, app)
16237
+ if isinstance(payload, (int, str)):
16238
+ payload = {"file_id": payload}
16239
+ elif not isinstance(payload, dict):
16240
+ payload = {f"file_id[{i}]": fid for i, fid in enumerate(payload)}
16241
+ return self.request(url=api, method="POST", data=payload, async_=async_, **request_kwargs)
16242
+
16243
+ @overload
16244
+ def life_behavior_img_post_app(
16245
+ self,
16246
+ payload: int | str | Iterable[int | str] | dict,
16247
+ /,
16248
+ app: str = "android",
16249
+ base_url: bool | str | Callable[[], str] = False,
16250
+ *,
16251
+ async_: Literal[False] = False,
16252
+ **request_kwargs,
16253
+ ) -> dict:
16254
+ ...
16255
+ @overload
16256
+ def life_behavior_img_post_app(
16257
+ self,
16258
+ payload: int | str | Iterable[int | str] | dict,
16259
+ /,
16260
+ app: str = "android",
16261
+ base_url: bool | str | Callable[[], str] = False,
16262
+ *,
16263
+ async_: Literal[True],
16264
+ **request_kwargs,
16265
+ ) -> Coroutine[Any, Any, dict]:
16266
+ ...
16267
+ def life_behavior_img_post_app(
16268
+ self,
16269
+ payload: int | str | Iterable[int | str] | dict,
16270
+ /,
16271
+ app: str = "android",
16272
+ base_url: bool | str | Callable[[], str] = False,
16273
+ *,
16274
+ async_: Literal[False, True] = False,
16275
+ **request_kwargs,
16276
+ ) -> dict | Coroutine[Any, Any, dict]:
16277
+ """推送事件:浏览图片 "browse_image"
16278
+
16279
+ POST https://proapi.115.com/android/files/img_behavior
16280
+
16281
+ :payload:
16282
+ - file_id: int | str
16283
+ - file_id[0]: int | str
16284
+ - file_id[1]: int | str
16285
+ - ...
16286
+ """
16287
+ api = complete_proapi("/files/img_behavior", base_url, app)
16288
+ if isinstance(payload, (int, str)):
16289
+ payload = {"file_id": payload}
16290
+ elif not isinstance(payload, dict):
16291
+ payload = {f"file_id[{i}]": fid for i, fid in enumerate(payload)}
16292
+ return self.request(url=api, method="POST", data=payload, async_=async_, **request_kwargs)
16293
+
16098
16294
  @overload
16099
16295
  def life_calendar_getoption(
16100
16296
  self,
@@ -16328,60 +16524,6 @@ class P115Client(P115OpenClient):
16328
16524
  payload = {"start_time": payload}
16329
16525
  return self.request(url=api, params=payload, async_=async_, **request_kwargs)
16330
16526
 
16331
- @overload
16332
- def life_img_behavior_post_app(
16333
- self,
16334
- payload: int | str | Iterable[int | str] | dict,
16335
- /,
16336
- app: str = "android",
16337
- base_url: bool | str | Callable[[], str] = False,
16338
- *,
16339
- async_: Literal[False] = False,
16340
- **request_kwargs,
16341
- ) -> dict:
16342
- ...
16343
- @overload
16344
- def life_img_behavior_post_app(
16345
- self,
16346
- payload: int | str | Iterable[int | str] | dict,
16347
- /,
16348
- app: str = "android",
16349
- base_url: bool | str | Callable[[], str] = False,
16350
- *,
16351
- async_: Literal[True],
16352
- **request_kwargs,
16353
- ) -> Coroutine[Any, Any, dict]:
16354
- ...
16355
- def life_img_behavior_post_app(
16356
- self,
16357
- payload: int | str | Iterable[int | str] | dict,
16358
- /,
16359
- app: str = "android",
16360
- base_url: bool | str | Callable[[], str] = False,
16361
- *,
16362
- async_: Literal[False, True] = False,
16363
- **request_kwargs,
16364
- ) -> dict | Coroutine[Any, Any, dict]:
16365
- """推送事件:浏览图片 "browse_image"
16366
-
16367
- POST https://proapi.115.com/android/files/img_behavior
16368
-
16369
- .. note::
16370
- 如果提供的是目录的 id,则会把其中(直属的)图片记为浏览
16371
-
16372
- :payload:
16373
- - file_id: int | str
16374
- - file_id[0]: int | str
16375
- - file_id[1]: int | str
16376
- - ...
16377
- """
16378
- api = complete_proapi("/files/img_behavior", base_url, app)
16379
- if isinstance(payload, (int, str)):
16380
- payload = {"file_id": payload}
16381
- elif not isinstance(payload, dict):
16382
- payload = {f"file_id[{i}]": fid for i, fid in enumerate(payload)}
16383
- return self.request(url=api, method="POST", data=payload, async_=async_, **request_kwargs)
16384
-
16385
16527
  @overload
16386
16528
  def life_list(
16387
16529
  self,
@@ -18436,12 +18578,12 @@ class P115Client(P115OpenClient):
18436
18578
  :payload:
18437
18579
  - flag: int = 0 💡 标识,用于对应某种情况
18438
18580
 
18439
- - 0: 已完成
18440
- - 1: 全部
18441
- - 2: 已失败
18442
- - 3: 进行中
18443
- - 4: 已完成+删除源文件
18444
- - 5: 全部+删除源文件
18581
+ - 0: 已完成
18582
+ - 1: 全部
18583
+ - 2: 已失败
18584
+ - 3: 进行中
18585
+ - 4: 已完成+删除源文件
18586
+ - 5: 全部+删除源文件
18445
18587
  """
18446
18588
  if isinstance(payload, int):
18447
18589
  payload = {"flag": payload}
@@ -20104,12 +20246,12 @@ class P115Client(P115OpenClient):
20104
20246
  - is_asc: 0 | 1 = 1 💡 是否升序排列
20105
20247
  - order: str = "file_name" 💡 用某字段排序
20106
20248
 
20107
- - "file_name": 文件名
20108
- - "file_size": 文件大小
20109
- - "file_type": 文件种类
20110
- - "user_utime": 修改时间
20111
- - "user_ptime": 创建时间
20112
- - "user_otime": 上一次打开时间
20249
+ - "file_name": 文件名
20250
+ - "file_size": 文件大小
20251
+ - "file_type": 文件种类
20252
+ - "user_utime": 修改时间
20253
+ - "user_ptime": 创建时间
20254
+ - "user_otime": 上一次打开时间
20113
20255
 
20114
20256
  - ignore_warn: 0 | 1 = 1 💡 忽略信息提示,传 1 就行了
20115
20257
  """
@@ -20163,12 +20305,12 @@ class P115Client(P115OpenClient):
20163
20305
  - is_asc: 0 | 1 = 1 💡 是否升序排列
20164
20306
  - order: str = "file_name" 💡 用某字段排序
20165
20307
 
20166
- - "file_name": 文件名
20167
- - "file_size": 文件大小
20168
- - "file_type": 文件种类
20169
- - "user_utime": 修改时间
20170
- - "user_ptime": 创建时间
20171
- - "user_otime": 上一次打开时间
20308
+ - "file_name": 文件名
20309
+ - "file_size": 文件大小
20310
+ - "file_type": 文件种类
20311
+ - "user_utime": 修改时间
20312
+ - "user_ptime": 创建时间
20313
+ - "user_otime": 上一次打开时间
20172
20314
 
20173
20315
  - ignore_warn: 0 | 1 = 1 💡 忽略信息提示,传 1 就行了
20174
20316
  """
@@ -20227,15 +20369,15 @@ class P115Client(P115OpenClient):
20227
20369
  - suffix: str = <default> 💡 文件后缀(扩展名),优先级高于 `type`
20228
20370
  - type: int = <default> 💡 文件类型
20229
20371
 
20230
- - 0: 全部
20231
- - 1: 文档
20232
- - 2: 图片
20233
- - 3: 音频
20234
- - 4: 视频
20235
- - 5: 压缩包
20236
- - 6: 软件/应用
20237
- - 7: 书籍
20238
- - 99: 仅文件
20372
+ - 0: 全部
20373
+ - 1: 文档
20374
+ - 2: 图片
20375
+ - 3: 音频
20376
+ - 4: 视频
20377
+ - 5: 压缩包
20378
+ - 6: 软件/应用
20379
+ - 7: 书籍
20380
+ - 99: 所有文件
20239
20381
  """
20240
20382
  api = complete_webapi("/share/search", base_url=base_url)
20241
20383
  payload = {"cid": 0, "limit": 32, "offset": 0, "search_value": ".", **payload}
@@ -20712,9 +20854,9 @@ class P115Client(P115OpenClient):
20712
20854
  - asc: 0 | 1 = <default> 💡 是否升序排列
20713
20855
  - o: str = <default> 💡 用某字段排序
20714
20856
 
20715
- - "file_name": 文件名
20716
- - "file_size": 文件大小
20717
- - "user_ptime": 创建时间/修改时间
20857
+ - "file_name": 文件名
20858
+ - "file_size": 文件大小
20859
+ - "user_ptime": 创建时间/修改时间
20718
20860
  """
20719
20861
  api = complete_webapi("/share/snap", base_url=base_url)
20720
20862
  if isinstance(self, dict):
@@ -20787,9 +20929,9 @@ class P115Client(P115OpenClient):
20787
20929
  - asc: 0 | 1 = <default> 💡 是否升序排列
20788
20930
  - o: str = <default> 💡 用某字段排序
20789
20931
 
20790
- - "file_name": 文件名
20791
- - "file_size": 文件大小
20792
- - "user_ptime": 创建时间/修改时间
20932
+ - "file_name": 文件名
20933
+ - "file_size": 文件大小
20934
+ - "user_ptime": 创建时间/修改时间
20793
20935
  """
20794
20936
  api = complete_proapi("/2.0/share/snap", base_url, app)
20795
20937
  if isinstance(self, dict):
@@ -21030,15 +21172,15 @@ class P115Client(P115OpenClient):
21030
21172
  :payload:
21031
21173
  - filter_field: "parents" | "file_name" | "" | "" = <default> 💡 保留条件(1. 用于批量删除)
21032
21174
 
21033
- - "file_name": 文件名(按长度)
21034
- - "parents": 所在目录路径(按长度)
21035
- - "user_utime": 操作时间
21036
- - "user_ptime": 创建时间
21175
+ - "file_name": 文件名(按长度)
21176
+ - "parents": 所在目录路径(按长度)
21177
+ - "user_utime": 操作时间
21178
+ - "user_ptime": 创建时间
21037
21179
 
21038
21180
  - filter_order: "asc" | "desc" = <default> 💡 排序(2. 用于批量删除)
21039
21181
 
21040
- - "asc": 升序,从小到大,取最小
21041
- - "desc": 降序,从大到小,取最大
21182
+ - "asc": 升序,从小到大,取最小
21183
+ - "desc": 降序,从大到小,取最大
21042
21184
 
21043
21185
  - batch: 0 | 1 = <default> 💡 是否批量操作(3. 用于批量删除)
21044
21186
  - sha1s[{sha1}]: int | str = <default> 💡 文件 id,多个用逗号 "," 隔开(1. 用于手动指定删除对象)