pan

package
v1.5.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 17, 2026 License: GPL-3.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrorCodeMap = map[int]string{
	-1:     "链接错误,链接失效或缺少提取码",
	-3:     "分享失败,文件不存在或无法分享",
	-4:     "转存失败,无效登录。请退出账号在其他地方的登录",
	-6:     "转存失败,请用浏览器无痕模式获取 Cookie 后再试",
	-7:     "转存失败,转存文件夹名有非法字符,不能包含 < > | * ? \\ :",
	-8:     "转存失败,目录中已有同名文件或文件夹存在",
	-9:     "链接错误,提取码错误",
	-10:    "转存失败,容量不足",
	-12:    "链接错误,提取码错误",
	-62:    "转存失败,链接访问次数过多,请稍后再试",
	0:      "转存成功",
	2:      "转存失败,目标目录不存在",
	4:      "转存失败,目录中存在同名文件",
	12:     "转存失败,转存文件数超过限制",
	20:     "转存失败,容量不足",
	105:    "链接错误,所访问的页面不存在",
	115:    "分享链接已失效(文件禁止分享)",
	145:    "分享链接已失效",
	-65:    "触发频率限制",
	132:    "删除文件需要二次身份验证(手机短信),请在浏览器登录账号完成验证后再试",
	200025: "提取码输入错误,请检查提取码",
}

ErrorCodeMap 百度网盘 errno → 可读中文消息

Functions

func ErrnoMessage added in v1.4.0

func ErrnoMessage(errno int) string

ErrnoMessage 查 errno 对应消息,未知码返回兜底文案

func ExtractSurl added in v1.4.0

func ExtractSurl(shareURL string) string

ExtractSurl 从百度分享链接提取 surl(去掉 /s/ 前导的 "1")

func IsAccountCredentials added in v1.3.5

func IsAccountCredentials(ck string) bool

IsAccountCredentials 检查ck是否包含账号密码信息

func ParseCapacityString

func ParseCapacityString(capacityStr string) int64

ParseCapacityString 解析容量字符串为字节数

func ParseSharePageHTML added in v1.4.0

func ParseSharePageHTML(response string) ([]baiduShareFile, error)

ParseSharePageHTML 解析百度分享页 HTML/JSON 片段,提取 shareid/share_uk/fs_id/server_filename/isdir

func RefreshSystemConfigCache added in v1.2.3

func RefreshSystemConfigCache()

RefreshSystemConfigCache 全局刷新系统配置缓存(供外部调用)

func SanitizeCookie added in v1.4.0

func SanitizeCookie(raw string) string

SanitizeCookie 清理 Cookie 字符串:移除换行/回车/制表符,trim 首尾空白。 用户从浏览器 DevHeaders 直接复制的 Cookie 经常夹带这些不可见字符, 导致 HTTP 请求头格式错误、百度返回 401 或 set-cookie 异常。 参考实现:moss baidu_utils.go:115-118。

Types

type AlipanExtraData added in v1.5.1

type AlipanExtraData struct {
	AccessToken   string `json:"access_token"`
	RefreshToken  string `json:"refresh_token"`   // 最新轮换值(与 Cks.Ck 冗余,便于单字段读写)
	DriveID       string `json:"drive_id"`        // 网盘 ID(去硬编码,research R2)
	ExpiresAt     int64  `json:"expires_at"`      // access_token 过期 unix 秒
	UrldbFolderID string `json:"urldb_folder_id"` // urldb 目录 file_id(懒初始化,research R5)
	DeviceID      string `json:"device_id"`       // 设备指纹(x-device-id)
	UserID        string `json:"user_id"`         // 阿里云盘 user_id(从 access_token JWT 解析,动态签名需要)
	PrivateKey    string `json:"private_key"`     // secp256k1 私钥 hex(动态签名用,移植 OpenList)
}

AlipanExtraData 阿里云盘运行期数据,JSON 序列化后存入 Cks.Extra(data-model.md §2.1)

type AlipanService

type AlipanService struct {
	*BasePanService
	// contains filtered or unexported fields
}

AlipanService 阿里云盘服务

func NewAlipanService

func NewAlipanService(config *PanConfig) *AlipanService

NewAlipanService 创建阿里云盘服务(每次新建实例;per-account 限速器在 SetCKSRepository 时按账号绑定)

func (*AlipanService) DeleteFiles

func (a *AlipanService) DeleteFiles(fileList []string) (*TransferResult, error)

DeleteFiles 删除文件(清理用;FR-008)。fid 可能是逗号分隔(转存时 join 存储)。 错误信息确保能被 cleanup_service.isFileNotExist 宽松匹配(research R8)。

func (*AlipanService) GetFiles

func (a *AlipanService) GetFiles(pdirFid string) (*TransferResult, error)

GetFiles 获取文件列表

func (*AlipanService) GetServiceType

func (a *AlipanService) GetServiceType() ServiceType

GetServiceType 获取服务类型

func (*AlipanService) GetUserInfo

func (a *AlipanService) GetUserInfo(ck *string) (*UserInfo, error)

GetUserInfo 传入的 *ck 为 refresh_token(Cks.Ck 或表单输入)。 用 refresh_token 换 access_token,调 /v2/user/get,返回容量/会员/昵称, 并经 UserInfo.ExtraData 携带 AlipanExtraData(含 access_token/drive_id)供首次持久化。

func (*AlipanService) GetUserInfoByEntity added in v1.3.0

func (a *AlipanService) GetUserInfoByEntity(cks entity.Cks) (*UserInfo, error)

GetUserInfoByEntity 从 entity.Cks 获取用户信息(research R13)

func (*AlipanService) SetCKSRepository added in v1.3.0

func (a *AlipanService) SetCKSRepository(cksRepo repo.CksRepository, cks entity.Cks)

SetCKSRepository 注入账号凭证仓储(research R4) 从 cks.Ck(refresh_token) 与 cks.Extra(AlipanExtraData) 解析凭证,并绑定 per-account 限速器。

func (*AlipanService) Transfer

func (a *AlipanService) Transfer(shareID string) (*TransferResult, error)

func (*AlipanService) UpdateConfig

func (a *AlipanService) UpdateConfig(config *PanConfig)

UpdateConfig 更新配置(线程安全)

type BaiduPanService

type BaiduPanService struct {
	*BasePanService
}

BaiduPanService 百度网盘服务

func NewBaiduPanService

func NewBaiduPanService(config *PanConfig) *BaiduPanService

NewBaiduPanService 创建百度网盘服务

func (*BaiduPanService) DeleteFiles

func (b *BaiduPanService) DeleteFiles(fileList []string) (*TransferResult, error)

DeleteFiles 删除文件(fileList 元素可能是逗号连接的多路径)

func (*BaiduPanService) GetFiles

func (b *BaiduPanService) GetFiles(pdirFid string) (*TransferResult, error)

GetFiles 获取文件列表

func (*BaiduPanService) GetServiceType

func (b *BaiduPanService) GetServiceType() ServiceType

GetServiceType 获取服务类型

func (*BaiduPanService) GetUserInfo

func (b *BaiduPanService) GetUserInfo(cookie *string) (*UserInfo, error)

GetUserInfo 获取用户信息

百度网盘网页版的用户信息分散在两个 API:

  1. /api/gettemplatevariable —— 仅返回 username / uk / vip_type(不含容量)
  2. /api/quota —— 返回 total / used(字节数,int64)

历史代码试图用单个 API 拿全部字段(fields 里塞 total_capacity/used_capacity), 但百度会静默忽略不支持的 field,导致容量恒为 0。这里改成两次请求组合。

func (*BaiduPanService) GetUserInfoByEntity added in v1.3.0

func (b *BaiduPanService) GetUserInfoByEntity(cks entity.Cks) (*UserInfo, error)

GetUserInfoByEntity 根据 entity.Cks 获取用户信息(待实现)

func (*BaiduPanService) SetCKSRepository added in v1.3.0

func (u *BaiduPanService) SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks)

func (*BaiduPanService) Share added in v1.5.4

func (b *BaiduPanService) Share(fid string) (*TransferResult, error)

Share 对系统已存文件按 fid 重新生成百度分享链接(实现 Sharer,FR-015)。 fid 即百度 fs_id(int64,存为字符串);period=1 永久分享。失败时由调用方回退到「判原始→转存」。

func (*BaiduPanService) Transfer

func (b *BaiduPanService) Transfer(shareID string) (*TransferResult, error)

Transfer 转存分享链接

func (*BaiduPanService) UpdateConfig added in v1.3.0

func (x *BaiduPanService) UpdateConfig(config *PanConfig)

type BasePanService

type BasePanService struct {
	// contains filtered or unexported fields
}

BasePanService 基础网盘服务

func NewBasePanService

func NewBasePanService(config *PanConfig) *BasePanService

NewBasePanService 创建基础网盘服务

func (*BasePanService) ExecuteWithRetry

func (b *BasePanService) ExecuteWithRetry(executeFunc func() ([]byte, error), maxRetries int, retryDelay time.Duration) ([]byte, error)

ExecuteWithRetry 带重试的请求执行

func (*BasePanService) ExtractFileName

func (b *BasePanService) ExtractFileName(urlStr string) string

ExtractFileName 从URL中提取文件名

func (*BasePanService) GetConfig

func (b *BasePanService) GetConfig() *PanConfig

GetConfig 获取配置

func (*BasePanService) GetHeader

func (b *BasePanService) GetHeader(key string) string

GetHeader 获取请求头

func (*BasePanService) HTTPDelete

func (b *BasePanService) HTTPDelete(requestURL string) ([]byte, error)

HTTPDelete 发送DELETE请求

func (*BasePanService) HTTPGet

func (b *BasePanService) HTTPGet(requestURL string, queryParams map[string]string) ([]byte, error)

HTTPGet 发送GET请求

func (*BasePanService) HTTPPatch added in v1.5.0

func (b *BasePanService) HTTPPatch(requestURL string, data interface{}) ([]byte, error)

HTTPPatch 发送PATCH请求

func (*BasePanService) HTTPPost

func (b *BasePanService) HTTPPost(requestURL string, data interface{}, queryParams map[string]string) ([]byte, error)

HTTPPost 发送POST请求

func (*BasePanService) HTTPPostForm added in v1.4.0

func (b *BasePanService) HTTPPostForm(requestURL string, rawBody string, queryParams map[string]string) ([]byte, error)

HTTPPostForm 发送原始字符串 body(如 application/x-www-form-urlencoded), 不做 JSON 包装。用于百度 verify/transfer/pset/filemanager。

func (*BasePanService) HTTPPut

func (b *BasePanService) HTTPPut(requestURL string, data interface{}) ([]byte, error)

HTTPPut 发送PUT请求

func (*BasePanService) IsValidURL

func (b *BasePanService) IsValidURL(urlStr string) bool

IsValidURL 验证URL格式

func (*BasePanService) ParseJSONResponse

func (b *BasePanService) ParseJSONResponse(data []byte, v interface{}) error

ParseJSONResponse 解析JSON响应

func (*BasePanService) SanitizeFileName

func (b *BasePanService) SanitizeFileName(fileName string) string

SanitizeFileName 清理文件名

func (*BasePanService) SetHeader

func (b *BasePanService) SetHeader(key, value string)

SetHeader 设置请求头

func (*BasePanService) SetHeaders

func (b *BasePanService) SetHeaders(headers map[string]string)

SetHeaders 批量设置请求头

type CaptchaData added in v1.3.0

type CaptchaData struct {
	CaptchaToken string `json:"captcha_token"`
	ExpiresAt    int64  `json:"expires_at"`
}

CaptchaData 存储在数据库中的验证码令牌数据

type PanConfig

type PanConfig struct {
	URL         string `json:"url"`
	Code        string `json:"code"`
	IsType      int    `json:"isType"`      // 0: 转存并分享后的资源信息, 1: 直接获取资源信息
	ExpiredType int    `json:"expiredType"` // 1: 分享永久, 2: 临时
	AdFid       string `json:"adFid"`       // 夸克专用 - 分享时带上这个文件的fid
	Stoken      string `json:"stoken"`
	Cookie      string `json:"cookie"`
}

PanConfig 网盘配置

type PanFactory

type PanFactory struct{}

PanFactory 网盘工厂

func GetInstance

func GetInstance() *PanFactory

GetInstance 获取单例实例(推荐使用)

func NewPanFactory

func NewPanFactory() *PanFactory

NewPanFactory 创建网盘工厂实例(单例模式)

func (*PanFactory) CreatePanService

func (f *PanFactory) CreatePanService(url string, config *PanConfig) (PanService, error)

CreatePanService 根据URL创建对应的网盘服务

func (*PanFactory) CreatePanServiceByType

func (f *PanFactory) CreatePanServiceByType(serviceType ServiceType, config *PanConfig) (PanService, error)

CreatePanServiceByType 根据服务类型创建对应的网盘服务

func (*PanFactory) GetAlipanService

func (f *PanFactory) GetAlipanService(config *PanConfig) PanService

GetAlipanService 获取阿里云盘服务单例

func (*PanFactory) GetBaiduService

func (f *PanFactory) GetBaiduService(config *PanConfig) PanService

GetBaiduService 获取百度网盘服务单例

func (*PanFactory) GetQuarkService

func (f *PanFactory) GetQuarkService(config *PanConfig) PanService

GetQuarkService 获取夸克网盘服务单例

func (*PanFactory) GetUCService

func (f *PanFactory) GetUCService(config *PanConfig) PanService

GetUCService 获取UC网盘服务单例

func (*PanFactory) GetXunleiService added in v1.2.3

func (f *PanFactory) GetXunleiService(config *PanConfig) PanService

GetXunleiService 获取迅雷网盘服务单例

type PanService

type PanService interface {
	// Transfer 转存分享链接
	Transfer(shareID string) (*TransferResult, error)

	// GetFiles 获取文件列表
	GetFiles(pdirFid string) (*TransferResult, error)

	// DeleteFiles 删除文件
	DeleteFiles(fileList []string) (*TransferResult, error)

	// GetUserInfo 获取用户信息
	GetUserInfo(ck *string) (*UserInfo, error)

	// GetServiceType 获取服务类型
	GetServiceType() ServiceType

	SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks)

	UpdateConfig(config *PanConfig)
}

PanService 网盘服务接口

type PasswordResult

type PasswordResult struct {
	ShareURL   string `json:"share_url"`
	ShareTitle string `json:"share_title"`
	Code       string `json:"code"`
	FirstFile  struct {
		Fid string `json:"fid"`
	} `json:"first_file"`
}

type QuarkPanService

type QuarkPanService struct {
	*BasePanService
	// contains filtered or unexported fields
}

QuarkPanService 夸克网盘服务

func GetQuarkInstance

func GetQuarkInstance() *QuarkPanService

GetQuarkInstance 获取夸克网盘服务单例实例

func NewQuarkPanService

func NewQuarkPanService(config *PanConfig) *QuarkPanService

NewQuarkPanService 创建夸克网盘服务(单例模式)

func (*QuarkPanService) DeleteFiles

func (q *QuarkPanService) DeleteFiles(fileList []string) (*TransferResult, error)

DeleteFiles 删除文件

func (*QuarkPanService) GetCookie added in v1.0.9

func (q *QuarkPanService) GetCookie() string

GetCookie 获取当前Cookie

func (*QuarkPanService) GetFiles

func (q *QuarkPanService) GetFiles(pdirFid string) (*TransferResult, error)

GetFiles 获取文件列表

func (*QuarkPanService) GetServiceType

func (q *QuarkPanService) GetServiceType() ServiceType

GetServiceType 获取服务类型

func (*QuarkPanService) GetUserInfo

func (q *QuarkPanService) GetUserInfo(cookie *string) (*UserInfo, error)

GetUserInfo 获取用户信息

func (*QuarkPanService) SetCKSRepository added in v1.3.0

func (xq *QuarkPanService) SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks)

func (*QuarkPanService) SetCookie added in v1.0.9

func (q *QuarkPanService) SetCookie(cookie string)

SetCookie 设置Cookie

func (*QuarkPanService) Share added in v1.5.4

func (q *QuarkPanService) Share(fid string) (*TransferResult, error)

Share 对系统已存文件按 fid 重新生成夸克分享链接(实现 Sharer,FR-015)。 夸克分享为异步任务,流程须与 Transfer 的分享段完全对齐:

getShareBtn 创建任务 → waitForTask 轮询直到 Status==2 拿 share_id → getSharePassword 取最终 ShareURL。

早期实现只看 share_id 非空就返回、且跳过 getSharePassword,会在任务尚未完成时拿到未生效的 share_id, 导致拼出的链接打开是「已删除」状态。此处复用 waitForTask(检查 Status==2)+ getSharePassword 修复。 失败时由调用方(决策树)回退到「判原始→转存」,故此处失败是安全的降级。

func (*QuarkPanService) Transfer

func (q *QuarkPanService) Transfer(shareID string) (*TransferResult, error)

Transfer 转存分享链接

func (*QuarkPanService) UpdateConfig

func (q *QuarkPanService) UpdateConfig(config *PanConfig)

UpdateConfig 更新配置(线程安全)

type SaveResult

type SaveResult struct {
	TaskID string `json:"task_id"`
}

type ServiceType

type ServiceType int

ServiceType 定义网盘服务类型

const (
	Quark ServiceType = iota
	Alipan
	BaiduPan
	UC
	NotFound
	Xunlei
	Tianyi
	Pan123
	Pan115
)

func ExtractServiceType

func ExtractServiceType(url string) ServiceType

ExtractServiceType 从URL中提取服务类型

func ExtractShareId

func ExtractShareId(url string) (string, ServiceType)

ExtractShareId 从URL中提取分享ID

func (ServiceType) String

func (s ServiceType) String() string

String 返回服务类型的字符串表示

type ShareBtnResult

type ShareBtnResult struct {
	TaskID string `json:"task_id"`
}

type ShareResult

type ShareResult struct {
	Share struct {
		Title string `json:"title"`
	} `json:"share"`
	List []struct {
		Fid           string `json:"fid"`
		ShareFidToken string `json:"share_fid_token"`
	} `json:"list"`
}

type Sharer added in v1.5.4

type Sharer interface {
	// Share 对系统已存文件(fid)重新生成分享链接,返回含 ShareURL 的结果。
	Share(fid string) (*TransferResult, error)
}

Sharer 对系统已存文件按 fid 重新生成分享链接的能力(独立于 PanService,仅 quark/xunlei/baidu 实现)。 用于「转存链接 saveUrl 已存在但失效」时的恢复操作(FR-015),避免对原始链接重复转存。

type StokenResult

type StokenResult struct {
	Stoken string `json:"stoken"`
	Title  string `json:"title"`
}

定义各种结果结构体

type TaskResult

type TaskResult struct {
	Status  int    `json:"status"`
	ShareID string `json:"share_id"`
	SaveAs  struct {
		SaveAsTopFids []string `json:"save_as_top_fids"`
	} `json:"save_as"`
}

type TransferResult

type TransferResult struct {
	Success  bool        `json:"success"`
	Message  string      `json:"message"`
	Data     interface{} `json:"data,omitempty"`
	ShareURL string      `json:"shareUrl,omitempty"`
	Title    string      `json:"title,omitempty"`
	Fid      string      `json:"fid,omitempty"`
}

TransferResult 转存结果

func ErrorResult

func ErrorResult(message string) *TransferResult

ErrorResult 创建错误结果

func SuccessResult

func SuccessResult(message string, data interface{}) *TransferResult

SuccessResult 创建成功结果

type UCPasswordResult added in v1.5.0

type UCPasswordResult struct {
	ShareURL   string `json:"share_url"`
	ShareTitle string `json:"share_title"`
	Code       string `json:"code"`
	FirstFile  struct {
		Fid string `json:"fid"`
	} `json:"first_file"`
}

type UCSaveResult added in v1.5.0

type UCSaveResult struct {
	TaskID string `json:"task_id"`
}

type UCService

type UCService struct {
	*BasePanService
	// contains filtered or unexported fields
}

UCService UC网盘服务

func NewUCService

func NewUCService(config *PanConfig) *UCService

NewUCService 创建UC网盘服务

func (*UCService) DeleteFiles

func (u *UCService) DeleteFiles(fileList []string) (*TransferResult, error)

DeleteFiles 删除文件

func (*UCService) GetFiles

func (u *UCService) GetFiles(pdirFid string) (*TransferResult, error)

GetFiles 获取文件列表

func (*UCService) GetServiceType

func (u *UCService) GetServiceType() ServiceType

GetServiceType 获取服务类型

func (*UCService) GetUserInfo

func (u *UCService) GetUserInfo(cookie *string) (*UserInfo, error)

GetUserInfo 获取用户信息(容量 + 会员状态)。

走 UC 已验证可用的 /member 接口(主机 pc-api.uc.cn/1/clouddrive,pr=UCBrowser), 取 total_capacity / use_capacity / member_type。

注意:早期实现的 https://drive.uc.cn/api/user/info 为无效端点(302 跳转回首页 HTML, 导致 "invalid character '<'" 解析错误),已弃用。/member 不返回昵称,而 UC 无公开的 昵称接口(/user/info 返回 404),故 Username 使用占位值。

func (*UCService) GetUserInfoByEntity added in v1.3.0

func (u *UCService) GetUserInfoByEntity(cks entity.Cks) (*UserInfo, error)

GetUserInfoByEntity 根据 entity.Cks 获取用户信息

func (*UCService) SetCKSRepository added in v1.3.0

func (u *UCService) SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks)

SetCKSRepository 设置CKS仓储(与夸克保持一致的空实现形态)

func (*UCService) Share added in v1.5.4

func (u *UCService) Share(fid string) (*TransferResult, error)

Share 对系统已存文件按 fid 重新生成 UC 分享链接(实现 Sharer,FR-015)。 UC 与夸克同构,分享为异步任务,流程须与 Transfer 的分享段完全对齐:

getShareBtn 创建任务 → waitForTask 轮询直到 Status==2 拿 share_id → getSharePassword 取最终 ShareURL。

若像早期 quark Share 那样只看 share_id 非空就返回、跳过 getSharePassword, 会拿到任务尚未完成时的未生效 share_id,导致链接打开是「已删除」状态。 失败时由调用方(决策树)回退到「判原始→转存」,故此处失败是安全的降级。

func (*UCService) Transfer

func (u *UCService) Transfer(shareID string) (*TransferResult, error)

Transfer 转存分享链接

func (*UCService) UpdateConfig added in v1.3.0

func (u *UCService) UpdateConfig(config *PanConfig)

UpdateConfig 更新配置(线程安全)

type UCShareBtnResult added in v1.5.0

type UCShareBtnResult struct {
	TaskID string `json:"task_id"`
}

type UCShareResult added in v1.5.0

type UCShareResult struct {
	Share struct {
		Title string `json:"title"`
	} `json:"share"`
	List []struct {
		Fid           string `json:"fid"`
		ShareFidToken string `json:"share_fid_token"`
	} `json:"list"`
}

type UCStokenResult added in v1.5.0

type UCStokenResult struct {
	Stoken string `json:"stoken"`
	Title  string `json:"title"`
}

type UCTaskResult added in v1.5.0

type UCTaskResult struct {
	Status  int    `json:"status"`
	ShareID string `json:"share_id"`
	SaveAs  struct {
		SaveAsTopFids []string `json:"save_as_top_fids"`
	} `json:"save_as"`
}

type UserInfo

type UserInfo struct {
	Username    string `json:"username"`    // 用户名
	VIPStatus   bool   `json:"vipStatus"`   // VIP状态
	UsedSpace   int64  `json:"usedSpace"`   // 已使用空间
	TotalSpace  int64  `json:"totalSpace"`  // 总空间
	ServiceType string `json:"serviceType"` // 服务类型
	ExtraData   string `json:"extraData"`   // 额外信息
}

UserInfo 用户信息结构体

type XLBatchShareResp added in v1.2.3

type XLBatchShareResp struct {
	Data struct {
		ShareURL string `json:"share_url"`
	} `json:"data"`
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type XLCommonResp added in v1.2.3

type XLCommonResp struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type XLFileInfo added in v1.2.3

type XLFileInfo struct {
	FileID string `json:"file_id"`
	Name   string `json:"name"`
}

type XLRestoreResp added in v1.2.3

type XLRestoreResp struct {
	Data struct {
		TaskID string `json:"task_id"`
	} `json:"data"`
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type XLShareFolderResp added in v1.2.3

type XLShareFolderResp struct {
	Data struct {
		Files []struct {
			FileID string `json:"file_id"`
			Name   string `json:"name"`
		} `json:"files"`
	} `json:"data"`
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type XLShareInfo added in v1.2.3

type XLShareInfo struct {
	ShareID string       `json:"share_id"`
	Title   string       `json:"title"`
	Files   []XLFileInfo `json:"files"`
}

新增辅助结构体

type XLShareListResp added in v1.2.3

type XLShareListResp struct {
	Data struct {
		List []struct {
			ShareID string `json:"share_id"`
			Title   string `json:"title"`
		} `json:"list"`
	} `json:"data"`
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

结构体完全对齐 xunleix

type XLTaskResult added in v1.2.3

type XLTaskResult struct {
	Status int    `json:"status"`
	TaskID string `json:"task_id"`
	Data   struct {
		ShareID string `json:"share_id"`
	} `json:"data"`
}

type XunleiAccountCredentials added in v1.3.5

type XunleiAccountCredentials struct {
	Username     string `json:"username"`      // 手机号(不包含+86前缀)
	Password     string `json:"password"`      // 密码
	RefreshToken string `json:"refresh_token"` // 当前有效的refresh_token
	Creditkey    string `json:"creditkey"`     // 信任密钥(review 短信验证后用于绕过新设备安全验证)
	ClientType   string `json:"client_type"`   // 身份类型 android|browser,默认 android(决定 client_id/盐值/API host)
}

XunleiAccountCredentials 迅雷账号凭据结构

func ParseCredentialsFromCk added in v1.3.5

func ParseCredentialsFromCk(ck string) (*XunleiAccountCredentials, error)

ParseCredentialsFromCk 从ck字段解析账号凭据

func (*XunleiAccountCredentials) ToJsonString added in v1.3.5

func (c *XunleiAccountCredentials) ToJsonString() (string, error)

ToJsonString 转换为JSON字符串

type XunleiExtraData added in v1.3.0

type XunleiExtraData struct {
	Captcha     *CaptchaData              `json:"captcha,omitempty"`
	Token       *XunleiTokenData          `json:"token,omitempty"`
	Credentials *XunleiAccountCredentials `json:"credentials,omitempty"` // 账号密码信息
}

type XunleiPanService added in v1.2.3

type XunleiPanService struct {
	*BasePanService
	// contains filtered or unexported fields
}

func GetXunleiInstance added in v1.2.3

func GetXunleiInstance() *XunleiPanService

GetXunleiInstance 获取迅雷网盘服务单例实例

func NewXunleiPanService added in v1.2.3

func NewXunleiPanService(config *PanConfig) *XunleiPanService

NewXunleiPanService 创建迅雷网盘服务

func (*XunleiPanService) DeleteFiles added in v1.2.3

func (x *XunleiPanService) DeleteFiles(fileList []string) (*TransferResult, error)

DeleteFiles 永久删除网盘文件(不进回收站,直接释放空间)- 实现 PanService 接口。 使用 POST /drive/v1/files:batchDelete(参考 OpenList thunder_browser Remove, RemoveWay=delete), 需 access_token + captcha_token。

func (*XunleiPanService) FileBatchShare added in v1.2.3

func (x *XunleiPanService) FileBatchShare(ids []string, needPassword bool, expirationDays int) (*XLBatchShareResp, error)

FileBatchShare 创建分享(使用 BasePanService)

func (*XunleiPanService) GetAccessTokenByRefreshToken added in v1.3.0

func (x *XunleiPanService) GetAccessTokenByRefreshToken(refreshToken string) (XunleiTokenData, error)

func (*XunleiPanService) GetFiles added in v1.2.3

func (x *XunleiPanService) GetFiles(pdirFid string) (*TransferResult, error)

GetFiles 获取文件列表 - 匹配 PHP 版本接口调用

func (*XunleiPanService) GetServiceType added in v1.2.3

func (x *XunleiPanService) GetServiceType() ServiceType

GetServiceType 获取服务类型

func (*XunleiPanService) GetShareFolder added in v1.2.3

func (x *XunleiPanService) GetShareFolder(shareID, passCodeToken, parentID string) (*XLShareFolderResp, error)

GetShareFolder 获取分享内容(使用 BasePanService)

func (*XunleiPanService) GetShareList added in v1.2.3

func (x *XunleiPanService) GetShareList(pageToken string) (*XLShareListResp, error)

GetShareList 严格对齐 GET + query(使用 BasePanService)

func (*XunleiPanService) GetUserInfo added in v1.2.3

func (x *XunleiPanService) GetUserInfo(cookie *string) (*UserInfo, error)

GetUserInfo 获取用户信息 - 实现 PanService 接口,cookie 参数为 refresh_token,先获取 access_token 再访问 API

func (*XunleiPanService) GetUserInfoByEntity added in v1.3.0

func (x *XunleiPanService) GetUserInfoByEntity(cks entity.Cks) (*UserInfo, error)

GetUserInfoByEntity 根据 entity.Cks 获取用户信息(待实现)

func (*XunleiPanService) Keepalive added in v1.5.0

func (x *XunleiPanService) Keepalive() error

Keepalive 保活:刷新并持久化 access_token(顺带给 refresh_token 续命),供定时保活任务调用。 仅刷新令牌,不调用其它网盘 API,避免因无关接口失败而误判账号失效。

func (*XunleiPanService) LoginByRefreshToken added in v1.5.0

func (x *XunleiPanService) LoginByRefreshToken(refreshToken string) (XunleiTokenData, error)

LoginByRefreshToken 用 refresh_token 直接登录。

func (*XunleiPanService) LoginWithCredentials added in v1.3.5

func (x *XunleiPanService) LoginWithCredentials(username, password, creditkey string) (XunleiTokenData, error)

LoginWithCredentials 账号密码登录(保留,前端不再调用)。

func (*XunleiPanService) Restore added in v1.2.3

func (x *XunleiPanService) Restore(shareID, passCodeToken string, fileIDs []string) (*XLRestoreResp, error)

Restore 转存(使用 BasePanService)

func (*XunleiPanService) SetCKSRepository added in v1.3.0

func (x *XunleiPanService) SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks)

SetCKSRepository 设置 CksRepository 和 entity

func (*XunleiPanService) SetClientType added in v1.5.0

func (x *XunleiPanService) SetClientType(clientType string)

SetClientType 按账号 client_type(android/browser)切换身份 profile,并同步请求头。

func (*XunleiPanService) Share added in v1.5.4

func (x *XunleiPanService) Share(fid string) (*TransferResult, error)

Share 对系统已存文件按 fid 重新生成迅雷分享链接(实现 Sharer,FR-015)。 expiration_days=0 表示永久分享(迅雷语义)。失败时由调用方(决策树)回退到「判原始→转存」。

func (*XunleiPanService) ShareBatchDelete added in v1.2.3

func (x *XunleiPanService) ShareBatchDelete(ids []string) (*XLCommonResp, error)

ShareBatchDelete 取消分享(使用 BasePanService)

func (*XunleiPanService) Transfer added in v1.2.3

func (x *XunleiPanService) Transfer(shareID string) (*TransferResult, error)

Transfer 转存分享链接 - 实现 PanService 接口,匹配 XunleiPan.php 的逻辑

func (*XunleiPanService) UpdateConfig added in v1.2.3

func (x *XunleiPanService) UpdateConfig(config *PanConfig)

type XunleiReviewError added in v1.5.0

type XunleiReviewError struct {
	Creditkey string
	ReviewURL string
	DeviceID  string
}

XunleiReviewError 账号密码登录触发迅雷新设备安全验证(review)。 携带 creditkey 与验证链接,供上层透传给前端走 creditkey 闭环(对齐 OpenList)。

func (*XunleiReviewError) Error added in v1.5.0

func (e *XunleiReviewError) Error() string

type XunleiTokenData added in v1.3.0

type XunleiTokenData struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int64  `json:"expires_in"`
	ExpiresAt    int64  `json:"expires_at"`
	Sub          string `json:"sub"`
	TokenType    string `json:"token_type"`
	UserId       string `json:"user_id"`
}

XunleiExtraData 所有额外数据的容器

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL