util

一些工具函数

这个模块提供了一些工具函数,且不依赖于 p115client.client 中的实现

p115client.util.complete_url(path: str | Callable[[], str] = '', /, base_url: str | Callable[[], str] = '', app: str | Callable[[], str] = '', version: str = '', force_app: bool | Container[str] = False, domain: str | Callable[[], str] = '', query: str | Mapping[str, Any] | Sequence[tuple[str, Any]] = ()) str[source]

完整 HTTP Web 接口 URL

Parameters:
  • path – 请求路径

  • base_url – 请求基地址,例如 “https://webapi.115.com

  • app – 使用此设备 app 的接口

  • version – 接口版本,会作为 path 的前缀

  • force_app – 如果为 False(默认),则会对某些不在接受范围内的 app 改用可接受的值,如果为 True 则保持原样(传什么就用什么),如果为容器,则此容器内的 app 也会被采用

  • domain – 域,如果 base_url 为空,那么 base_url 会被处理为 f”http://{domain}.115.com”

  • query – 其它查询参数

Returns:

接口 URL

Note

大概有以下几种接口 URL

其中 “https://f.115.com” 和 “https://n.115.com” 可以拼接查询参数 domain,默认值是 “webapi”,请求时需要携带 “origin” 头。 而曾经的 “http://anxia.com” 和 “http://v.anxia.com” 已经不可用了。

p115client.util.determine_part_size(size: int, min_part_size: int = 10485760, max_part_count: int = 10000) int[source]

确定分片上传(multipart upload)时的分片大小

Parameters:
  • size – 数据大小

  • min_part_size – 用户期望的分片大小

  • max_part_count – 最大的分片个数

Returns:

分片大小

p115client.util.is_valid_pickcode(pickcode: str, /) bool[source]

是否合法的 pickcode

Parameters:

pickcode – 提取码

Returns:

是否合法

p115client.util.load_final_image(url: str, async_: Literal[False] = False, request=request) HTTPStatus | str[source]
p115client.util.load_final_image(url: str, async_: Literal[True], request=request) Coroutine[Any, Any, HTTPStatus | str]

逐次 3XX 重定向,以获取最终的图片链接

Parameters:
  • url – 图片链接

  • async – 是否异步

Returns:

最终的图片链接(如果期间发生错误,则返回 None)

p115client.util.max_image_quality(url: str, /) str[source]

将图片的链接调整为最高画质

Parameters:

url – 图片缩略图链接

Returns:

调整后的链接

p115client.util.posix_escape_name(name: str, /, repl: str = '|') str[source]

把文件名中的 “/” 转换为另一个字符

Note

默认把 “/” 替换成 “|”,借鉴 alist。 更一般的,可借鉴 MacOSX,替换成 “:”。

Parameters:
  • name – 文件名

  • repl – 替换为的目标字符

Returns:

替换后的名字

p115client.util.reduce_image_url_layers(url: str, /, size: str | int = '') str[source]

从图片的缩略图链接中提取信息,以减少一次 302 访问

Parameters:
  • url – 图片缩略图链接

  • size – 图片规格大小,如果为 0,则是原图大小

Returns:

提取后的图片缩略图链接

p115client.util.share_extract_payload(link: str, /) SharePayload[source]

从链接中提取 share_code 和 receive_code

Parameters:

link – 分享链接

Returns:

链接信息,是一个字典,包含 2 个 key - “share_code”: 分享码 - “receive_code”: 提取码

Note

分享链接主要有如下几种格式:

  • https://115cdn.com/s/{share_code}?password={receive_code}

  • https://115.com/s/{share_code}?password={receive_code}

  • https://share.115.com/{share_code}?password={receive_code}

  • {share_code}-{receive_code}

  • /{share_code}-{receive_code}/

  • #{share_code}-{receive_code}#

p115client.util.to_cdn_url(url: str, /, host: str = '115cdn.com') str[source]

尝试把 url 转换为特定 CDN 域名下的链接,如果不能转换,则原样输出

Parameters:
  • url – 待转换的链接

  • host – 域名,比如可取 “115cdn.com” 或 “https://115vod.com

Returns:

转换后的链接

p115client.util.unescape_115_charref(s: str, /) str[source]

对 115 的字符引用进行解码

Example:
unescape_115_charref("[128074]0号:优质资源") == "👊0号:优质资源"