forked from Angey40/BaiduPCS-Go
/
baidu.go
104 lines (87 loc) · 2.56 KB
/
baidu.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package pcsconfig
import (
"errors"
"fmt"
"github.com/iikira/BaiduPCS-Go/baidupcs"
"github.com/iikira/BaiduPCS-Go/pcstable"
"github.com/iikira/baidu-tools/tieba"
"github.com/olekukonko/tablewriter"
"path/filepath"
"strconv"
"strings"
)
var (
//ErrNoSuchBaiduUser 未登录任何百度帐号
ErrNoSuchBaiduUser = errors.New("no such baidu user")
//ErrBaiduUserNotFound 未找到百度帐号
ErrBaiduUserNotFound = errors.New("baidu user not found")
)
//BaiduBase Baidu基
type BaiduBase struct {
UID uint64 `json:"uid"` // 百度ID对应的uid
Name string `json:"name"` // 真实ID
}
// Baidu 百度帐号对象
type Baidu struct {
BaiduBase
Sex string `json:"sex"` // 性别
Age float64 `json:"age"` // 帐号年龄
BDUSS string `json:"bduss"`
PTOKEN string `json:"ptoken"`
STOKEN string `json:"stoken"`
Workdir string `json:"workdir"` // 工作目录
}
// BaiduPCS 初始化*baidupcs.BaiduPCS
func (baidu *Baidu) BaiduPCS() *baidupcs.BaiduPCS {
pcs := baidupcs.NewPCS(Config.appID, baidu.BDUSS)
pcs.SetHTTPS(Config.enableHTTPS)
pcs.SetUserAgent(Config.userAgent)
return pcs
}
// GetSavePath 根据提供的网盘文件路径 path, 返回本地储存路径,
// 返回绝对路径, 获取绝对路径出错时才返回相对路径...
func (baidu *Baidu) GetSavePath(path string) string {
dirStr := fmt.Sprintf("%s/%d_%s%s/.",
Config.saveDir,
baidu.UID,
baidu.Name,
path,
)
dir, err := filepath.Abs(dirStr)
if err != nil {
dir = filepath.Clean(dirStr)
}
return dir
}
// BaiduUserList 百度帐号列表
type BaiduUserList []*Baidu
// NewUserInfoByBDUSS 检测BDUSS有效性, 同时获取百度详细信息 (无法获取 ptoken 和 stoken)
func NewUserInfoByBDUSS(bduss string) (b *Baidu, err error) {
t, err := tieba.NewUserInfoByBDUSS(bduss)
if err != nil {
return nil, err
}
b = &Baidu{
BaiduBase: BaiduBase{
UID: t.Baidu.UID,
Name: t.Baidu.Name,
},
Sex: t.Baidu.Sex,
Age: t.Baidu.Age,
BDUSS: bduss,
Workdir: "/",
}
return b, nil
}
// String 格式输出百度帐号列表
func (bl *BaiduUserList) String() string {
builder := &strings.Builder{}
tb := pcstable.NewTable(builder)
tb.SetColumnAlignment([]int{tablewriter.ALIGN_DEFAULT, tablewriter.ALIGN_RIGHT, tablewriter.ALIGN_CENTER, tablewriter.ALIGN_CENTER, tablewriter.ALIGN_CENTER})
tb.SetHeader([]string{"#", "uid", "用户名", "性别", "age"})
for k, baiduInfo := range *bl {
tb.Append([]string{strconv.Itoa(k), strconv.FormatUint(baiduInfo.UID, 10), baiduInfo.Name, baiduInfo.Sex, fmt.Sprint(baiduInfo.Age)})
}
tb.Render()
return builder.String()
}