AiShu AnyShare Cloud Drive Unofficial API Client Library
Project description
AnyShare-Unofficial
AiShu AnyShare Cloud Drive Unofficial API Client Library
爱数 AnyShare 云盘非官方 API 库
简介 Intro
此项目是爱数 Anyshare 云盘的非官方 Python API 库,支持对 Anyshare v7.0(2025 年构建版)云盘服务进行 API 操作。
PyPI 上发布的最新版本:
实现的功能
-
AnonymousClient:匿名分享链接访问,支持的功能包括:- 浏览分享链接中的文件和文件夹;
- 下载和上传文件(如果该分享链接开启了对应权限)。
-
AuthenticatedClient:基于已登录用户的会话 Cookie 认证访问,支持的功能包括:- 获取用户信息和存储配额;
- 浏览文档库和文件夹的内容;
- 上传、下载、删除、移动和重命名文件;
- 联系人和部门信息查询;
- 共享管理查询。
使用方法 Usage
安装
需要 Python 3.9 或更高版本。
需要安装 httpx>=0.28.1和 pydantic>=2.13.4 库。
随后通过下面的命令安装本库:
pip install anyshare-unofficial
# 或
poetry add anyshare-unofficial
示例:匿名访问云盘
借助 AnonymousClient 能力,无需登录,只要获得了分享链接即可浏览、下载文件。如果分享链接开放了上传权限,也可上传文件。
from anyshare_unofficial import AnonymousClient, OnDup
# 创建匿名客户端实例
client = AnonymousClient(
"https://example.com/link/ABC123...", # 这里填分享链接
base_url="https://example.com", # 这里填云盘主URL
)
# 列出分享链接中的条目
entries = client.list_entries()
# 更常用的做法
entry = client.get_first_entry()
# 递归浏览文件夹
contents = client.browse_folder(entry.id)
for f in contents.files:
print(f"{f.name} ({f.size / 1024:.1f} KB)")
# 下载文件
file = contents.files[0]
auth, result = client.get_download_url(contents.files[0])
print(f"name={result.name}, link={auth.url}")
# 更简单的做法
client.download_file(file, "/local/path/")
# 覆盖上传(需要分享链接开放上传权限)
client.upload_file("/local/file.pdf", entry.id, ondup=OnDup.OVERWRITE)
示例:认证访问云盘
借助 AuthenticatedClient 能力,传入已获取的会话 Cookie 字符串,即可使用全部的 API。
from anyshare_unofficial import AuthenticatedClient, OnDup
# 创建认证客户端实例
client = AuthenticatedClient(
"Authorization=xxx; JSESSIONID=xxx; ...", # 这里填 Cookie
base_url="https://example.com",
)
# 获取用户信息和配额
user = client.get_current_user()
print(f"User: {user.name} ({user.account})")
quota = client.get_quota()
print(f"Quota: {quota.used / 1024 ** 3:.1f}/{quota.allocated / 1024 ** 3:.1f}GB")
# 浏览文档库
doc_libs = client.list_doc_libs()
for lib in doc_libs:
print(f"Doc lib: {lib.name} ({lib.type})")
# 浏览文件夹
content = client.browse_folder(doc_libs[0].id)
for d in content.dirs:
print(f"Dir: {d.name}")
for f in content.files:
print(f"File: {f.name} ({f.size / 1024:.1f} KB)")
# 删除和移动文件
# GNS 路径可以通过 file.id 获取
client.delete_file("gns://xxx/file")
client.move_file("gns://xxx/file", "gns://xxx/dest", ondup=OnDup.OVERWRITE)
# 创建目录
client.create_directory("gns://xxx/parent", "NewFolder", ondup=OnDup.RENAME)
# 下载文件
auth, result = client.get_download_url("gns://xxx/file", savename="file.pdf")
# 或者更简单的做法
client.download_file("gns://xxx/file", "/downloads/", savename="file.pdf")
# 联系人与部门
groups = client.get_contact_groups()
depts = client.get_department_roots()
# 共享管理
shares = client.list_shares_with_anyone()
# 关闭连接
client.close()
API 概览 API Overview
1. 基类(BaseClient)
客户端均继承自此基类,提供 HTTP 会话管理和错误处理。
2. 匿名客户端(AnonymousClient)
| 方法 | 端点 | 说明 |
|---|---|---|
list_entries |
GET /api/efast/v1/entry-item |
列出分享链接中的顶层条目 |
browse_folder |
GET /api/efast/v1/folders/{gns_path}/sub_objects |
浏览指定 GNS 路径的文件夹内容 |
get_download_url |
POST /api/efast/v1/file/osdownload |
获取文件预签名下载 URL |
download_file |
(组合) | 获取下载 URL 后流式下载到本地 |
upload_file |
POST /api/efast/v1/file/osbeginupload → S3 → /api/efast/v1/file/osendupload |
三步上传 |
set_cookie |
— | 设置 Cookie 并更新认证头 |
refresh_token |
GET /anyshare/oauth2/login/refreshToken |
刷新 OAuth2 令牌 |
3. 认证客户端(AuthenticatedClient)
用户
| 方法 | 端点 | 说明 |
|---|---|---|
get_config |
GET /api/eacp/v1/auth1/configs |
获取配置 |
get_login_config |
GET /api/eacp/v1/auth1/login-configs |
获取登录配置(含第三方 SSO) |
get_current_user |
POST /api/eacp/v1/user/get |
获取当前用户信息 |
get_user_basic_info |
POST /api/eacp/v1/user/getbasicinfo |
获取指定用户基本信息 |
refresh_token |
GET /anyshare/oauth2/login/refreshToken |
刷新 OAuth2 令牌 |
注意:
get_user_basic_info()的directdepinfos可能只包含部门路径deppath,不同于get_current_user()返回的标准部门对象。
文档库
| 方法 | 端点 | 说明 |
|---|---|---|
list_doc_libs |
GET /api/efast/v1/entry-doc-lib |
列出可访问的文档库 |
list_classified_doc_libs |
GET /api/efast/v1/classified-entry-doc-libs |
列出分类文档库 |
文件浏览
| 方法 | 端点 | 说明 |
|---|---|---|
browse_folder |
GET /api/efast/v1/folders/{gns_path}/sub_objects |
浏览文件夹内容(支持排序、分页、模式过滤) |
get_file_metadata |
POST /api/efast/v1/file/metadata |
获取文件元数据 |
get_item_detail |
GET /api/efast/v2/items/{object_id}/all |
获取条目详细信息(含路径、权限) |
文件操作
| 方法 | 端点 | 说明 |
|---|---|---|
get_download_url |
POST /api/efast/v1/file/osdownload |
获取预签名下载 URL |
download_file |
(组合 get_download_url + 流式 HTTP GET) | 下载文件到本地 |
delete_file |
POST /api/efast/v1/file/delete |
删除文件 |
move_file |
POST /api/efast/v1/file/move |
移动文件到目标目录 |
get_suggest_name |
POST /api/efast/v1/file/getsuggestname |
获取建议文件名(防冲突) |
目录操作
| 方法 | 端点 | 说明 |
|---|---|---|
create_directory |
POST /api/efast/v1/dir/create |
创建文件夹 |
rename_directory |
POST /api/efast/v1/dir/rename |
重命名文件夹 |
get_suggest_dir_name |
POST /api/efast/v1/dir/getsuggestname |
获取建议目录名(防冲突) |
上传
| 方法 | 端点 | 说明 |
|---|---|---|
upload_file_s3 |
POST begin → S3 POST → end | 文件上传 |
predupload_check |
POST /api/efast/v1/file/predupload |
预上传检查 |
权限
| 方法 | 端点 | 说明 |
|---|---|---|
get_quota |
GET /api/efast/v1/quota/user |
获取存储配额 |
check_permission |
POST /api/eacp/v1/perm1/check |
检查对指定对象的权限 |
get_share_config |
POST /api/eacp/v1/perm1/getsharedocconfig |
获取共享策略配置 |
get_lock_info |
POST /api/eacp/v1/autolock/getlockinfo |
获取文件锁定状态 |
联系人
| 方法 | 端点 | 说明 |
|---|---|---|
get_contact_groups |
POST /api/eacp/v1/contactor/getgroups |
获取联系人分组列表 |
get_contact_persons |
POST /api/eacp/v1/contactor/getpersons |
获取分组内联系人 |
get_department_roots |
POST /api/eacp/v1/department/getroots |
获取根级部门列表 |
get_sub_departments |
POST /api/eacp/v1/department/getsubdeps |
获取子部门 |
get_department_users |
POST /api/eacp/v1/department/getsubusers |
获取部门内用户 |
共享管理
| 方法 | 端点 | 说明 |
|---|---|---|
list_shares_with_users |
GET /api/doc-share/v1/docs-shared-with-users |
列出分享给指定用户的文档 |
list_shares_with_anyone |
GET /api/doc-share/v1/docs-shared-with-anyone |
列出分享给所有人的文档 |
list_blocked_doc_libs |
GET /api/doc-share/v1/blocked-doc-lib |
列出已屏蔽的文档库 |
其他
| 方法 | 端点 | 说明 |
|---|---|---|
get_notifications |
GET /api/message/v1/notifications |
获取系统通知 |
walk_folder |
(组合 browse_folder 递归) | 递归遍历文件夹,收集所有文件 |
5. 枚举类型
| 枚举 | 类型 | 值 | 说明 |
|---|---|---|---|
SortField |
str |
NAME, TIME, SIZE |
排序字段 |
SortDirection |
str |
ASC, DESC |
排序方向 |
ObjectMode |
str |
ALL, FILES, DIRS |
浏览模式过滤 |
DocLibType |
str |
USER, SHARED_USER, GROUP |
文档库类型 |
OnDup |
int |
FORBID=0, RENAME=1, OVERWRITE=3 |
文件名冲突策略 |
CsfLevel |
int |
LOW=0, INTERNAL=5, CONFIDENTIAL=6, SECRET=7, TOP_SECRET=8 |
安全定级 |
PermissionType |
str |
DISPLAY, PREVIEW, DOWNLOAD, CREATE, MODIFY, DELETE, CACHE |
权限类型 |
6. 异常类型
| 异常类 | 说明 |
|---|---|
AnyShareError |
所有异常的基类 |
AnyShareNetworkError |
网络层错误(连接失败、超时) |
AnyShareAuthError |
认证/授权失败(401, 403) |
AnyShareAPIError |
API 返回的错误(含 code, cause, status_code 字段) |
AnyShareInputError |
用户输入无效(如非法 GNS 路径) |
7. 路径解析
AnyShare 使用 gns:// 格式的内部路径标识对象。格式为:
gns://{doc_lib_id}/{folder_id}/.../{file_or_folder_id}
库提供 anyshare_unofficial.utils.gns 模块中的辅助函数:
is_gns_path(path)— 验证 GNS 路径parse_gns_path(path)— 拆分为段列表build_gns_path(*segments)— 从段构建quote_gns_path(path)— URL 编码
许可证 Licensing
本项目基于 MIT 开源许可证,详情参见 LICENSE 页面。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters