util

一些工具函数

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

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

完整 HTTP Web 接口 URL

Parameters:
  • path – 请求路径

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

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

  • domain

    域,拼接位置根据 base_urlas_query 确定

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

    • 如果 as_query 为 False,那么拼接到 base_url 之后

    • 如果 as_query 为 True,那么拼接到 query 之中

  • as_query

    是否把 path 参数视为查询参数

    • 如果为 False,则拼接到 base_url 之后

    • 如果为 True,则拼接到 query 之中

  • query – 其它查询参数

Returns:

接口 URL

Note

大概有以下几种接口 URL

  • https://115.com{path}?{query}

  • https://{domain}.115.com{path}?{query}

  • https://115cdn.com/{domain}{path}?{query}

  • https://115vod.com/{domain}{path}?{query}

  • https://f.115.com/api/proxy/115?domain={domain}&path={path}&{query}

  • https://n.115.com/api/proxy/115?domain={domain}&path={path}&{query}

其中 https://f.115.comhttps://n.115.com 可以拼接查询参数 domain,默认值是 “webapi”

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号:优质资源"