Skip to content

Commit 5d9fc83

Browse files
authored
fix(115_share): adjust 115 share driver for official API update (#2068)
* fix(115_share): add user agent support and update driver dependency * fix(115): fix download error * feat: add thumbnail support for 115 driver and 115 share - Add Thumb() method to FileObj in 115 driver to return thumbnail URL - Add ThumbURL field to FileObj struct in 115 share utility - Update 115driver dependency from v1.2.2 to v1.2.3 to support thumbnail functionality - Implement Thumb() method for 115 share FileObj to return thumbnail URL
1 parent f542187 commit 5d9fc83

File tree

7 files changed

+37
-70
lines changed

7 files changed

+37
-70
lines changed

drivers/115/driver.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ func (d *Pan115) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
6868
return nil, err
6969
}
7070
userAgent := args.Header.Get("User-Agent")
71-
downloadInfo, err := d.
72-
DownloadWithUA(file.(*FileObj).PickCode, userAgent)
71+
downloadInfo, err := d.client.DownloadWithUA(file.(*FileObj).PickCode, userAgent)
7372
if err != nil {
7473
return nil, err
7574
}

drivers/115/types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ func (f *FileObj) GetHash() utils.HashInfo {
2222
return utils.NewHashInfo(utils.SHA1, f.Sha1)
2323
}
2424

25+
func (f *FileObj) Thumb() string {
26+
return f.ThumbURL
27+
}
28+
2529
type UploadResult struct {
2630
driver.BasicResp
2731
Data struct {

drivers/115/util.go

Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"encoding/json"
1010
"fmt"
1111
"io"
12-
"net/http"
1312
"net/url"
1413
"strconv"
1514
"strings"
@@ -22,11 +21,9 @@ import (
2221
"github.com/OpenListTeam/OpenList/v4/internal/model"
2322
"github.com/OpenListTeam/OpenList/v4/pkg/http_range"
2423
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
25-
"github.com/aliyun/aliyun-oss-go-sdk/oss"
26-
2724
cipher "github.com/SheltonZhu/115driver/pkg/crypto/ec115"
28-
crypto "github.com/SheltonZhu/115driver/pkg/crypto/m115"
2925
driver115 "github.com/SheltonZhu/115driver/pkg/driver"
26+
"github.com/aliyun/aliyun-oss-go-sdk/oss"
3027
"github.com/pkg/errors"
3128
)
3229

@@ -108,60 +105,6 @@ func (d *Pan115) getUA() string {
108105
return fmt.Sprintf("Mozilla/5.0 115Browser/%s", appVer)
109106
}
110107

111-
func (d *Pan115) DownloadWithUA(pickCode, ua string) (*driver115.DownloadInfo, error) {
112-
key := crypto.GenerateKey()
113-
result := driver115.DownloadResp{}
114-
params, err := utils.Json.Marshal(map[string]string{"pick_code": pickCode})
115-
if err != nil {
116-
return nil, err
117-
}
118-
119-
data := crypto.Encode(params, key)
120-
121-
bodyReader := strings.NewReader(url.Values{"data": []string{data}}.Encode())
122-
reqUrl := fmt.Sprintf("%s?t=%s", driver115.AndroidApiDownloadGetUrl, driver115.Now().String())
123-
req, _ := http.NewRequest(http.MethodPost, reqUrl, bodyReader)
124-
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
125-
req.Header.Set("Cookie", d.Cookie)
126-
req.Header.Set("User-Agent", ua)
127-
128-
resp, err := d.client.Client.GetClient().Do(req)
129-
if err != nil {
130-
return nil, err
131-
}
132-
defer resp.Body.Close()
133-
134-
body, err := io.ReadAll(resp.Body)
135-
if err != nil {
136-
return nil, err
137-
}
138-
if err := utils.Json.Unmarshal(body, &result); err != nil {
139-
return nil, err
140-
}
141-
142-
if err = result.Err(string(body)); err != nil {
143-
return nil, err
144-
}
145-
146-
b, err := crypto.Decode(string(result.EncodedData), key)
147-
if err != nil {
148-
return nil, err
149-
}
150-
151-
downloadInfo := struct {
152-
Url string `json:"url"`
153-
}{}
154-
if err := utils.Json.Unmarshal(b, &downloadInfo); err != nil {
155-
return nil, err
156-
}
157-
158-
info := &driver115.DownloadInfo{}
159-
info.PickCode = pickCode
160-
info.Header = resp.Request.Header
161-
info.Url.Url = downloadInfo.Url
162-
return info, nil
163-
}
164-
165108
func (c *Pan115) GenerateToken(fileID, preID, timeStamp, fileSize, signKey, signVal string) string {
166109
userID := strconv.FormatInt(c.client.UserID, 10)
167110
userIDMd5 := md5.Sum([]byte(userID))
@@ -309,7 +252,8 @@ func (c *Pan115) UploadByOSS(ctx context.Context, params *driver115.UploadOSSPar
309252

310253
// UploadByMultipart upload by mutipart blocks
311254
func (d *Pan115) UploadByMultipart(ctx context.Context, params *driver115.UploadOSSParams, fileSize int64, s model.FileStreamer,
312-
dirID string, up driver.UpdateProgress, opts ...driver115.UploadMultipartOption) (*UploadResult, error) {
255+
dirID string, up driver.UpdateProgress, opts ...driver115.UploadMultipartOption,
256+
) (*UploadResult, error) {
313257
var (
314258
chunks []oss.FileChunk
315259
parts []oss.UploadPart

drivers/115_share/driver.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package _115_share
33
import (
44
"context"
55

6+
"github.com/OpenListTeam/OpenList/v4/drivers/base"
67
"github.com/OpenListTeam/OpenList/v4/internal/driver"
78
"github.com/OpenListTeam/OpenList/v4/internal/errs"
89
"github.com/OpenListTeam/OpenList/v4/internal/model"
@@ -49,9 +50,16 @@ func (d *Pan115Share) List(ctx context.Context, dir model.Obj, args model.ListAr
4950
if err := d.WaitLimit(ctx); err != nil {
5051
return nil, err
5152
}
52-
53+
var ua string
54+
// TODO: will use user agent from header
55+
// if args.Header != nil {
56+
// ua = args.Header.Get("User-Agent")
57+
// }
58+
if ua == "" {
59+
ua = base.UserAgentNT
60+
}
5361
files := make([]driver115.ShareFile, 0)
54-
fileResp, err := d.client.GetShareSnap(d.ShareCode, d.ReceiveCode, dir.GetID(), driver115.QueryLimit(int(d.PageSize)))
62+
fileResp, err := d.client.GetShareSnapWithUA(ua, d.ShareCode, d.ReceiveCode, dir.GetID(), driver115.QueryLimit(int(d.PageSize)))
5563
if err != nil {
5664
return nil, err
5765
}
@@ -77,7 +85,14 @@ func (d *Pan115Share) Link(ctx context.Context, file model.Obj, args model.LinkA
7785
if err := d.WaitLimit(ctx); err != nil {
7886
return nil, err
7987
}
80-
downloadInfo, err := d.client.DownloadByShareCode(d.ShareCode, d.ReceiveCode, file.GetID())
88+
var ua string
89+
if args.Header != nil {
90+
ua = args.Header.Get("User-Agent")
91+
}
92+
if ua == "" {
93+
ua = base.UserAgent
94+
}
95+
downloadInfo, err := d.client.DownloadByShareCodeWithUA(ua, d.ShareCode, d.ReceiveCode, file.GetID())
8196
if err != nil {
8297
return nil, err
8398
}

drivers/115_share/utils.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"time"
77

8+
"github.com/OpenListTeam/OpenList/v4/drivers/base"
89
"github.com/OpenListTeam/OpenList/v4/internal/model"
910
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
1011
driver115 "github.com/SheltonZhu/115driver/pkg/driver"
@@ -20,6 +21,7 @@ type FileObj struct {
2021
FileName string
2122
isDir bool
2223
FileID string
24+
ThumbURL string
2325
}
2426

2527
func (f *FileObj) CreateTime() time.Time {
@@ -54,6 +56,10 @@ func (f *FileObj) GetPath() string {
5456
return ""
5557
}
5658

59+
func (f *FileObj) Thumb() string {
60+
return f.ThumbURL
61+
}
62+
5763
func transFunc(sf driver115.ShareFile) (model.Obj, error) {
5864
timeInt, err := strconv.ParseInt(sf.UpdateTime, 10, 64)
5965
if err != nil {
@@ -74,15 +80,14 @@ func transFunc(sf driver115.ShareFile) (model.Obj, error) {
7480
FileName: string(sf.FileName),
7581
isDir: isDir,
7682
FileID: fileID,
83+
ThumbURL: sf.ThumbURL,
7784
}, nil
7885
}
7986

80-
var UserAgent = driver115.UA115Browser
81-
8287
func (d *Pan115Share) login() error {
8388
var err error
8489
opts := []driver115.Option{
85-
driver115.UA(UserAgent),
90+
driver115.UA(base.UserAgentNT),
8691
}
8792
d.client = driver115.New(opts...)
8893
if _, err := d.client.GetShareSnap(d.ShareCode, d.ReceiveCode, ""); err != nil {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/OpenListTeam/wopan-sdk-go v0.1.5
1515
github.com/ProtonMail/go-crypto v1.3.0
1616
github.com/ProtonMail/gopenpgp/v2 v2.9.0
17-
github.com/SheltonZhu/115driver v1.1.1
17+
github.com/SheltonZhu/115driver v1.2.3
1818
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
1919
github.com/antchfx/htmlquery v1.3.5
2020
github.com/antchfx/xpath v1.3.5

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ github.com/RoaringBitmap/roaring/v2 v2.4.5 h1:uGrrMreGjvAtTBobc0g5IrW1D5ldxDQYe2
8181
github.com/RoaringBitmap/roaring/v2 v2.4.5/go.mod h1:FiJcsfkGje/nZBZgCu0ZxCPOKD/hVXDS2dXi7/eUFE0=
8282
github.com/STARRY-S/zip v0.2.1 h1:pWBd4tuSGm3wtpoqRZZ2EAwOmcHK6XFf7bU9qcJXyFg=
8383
github.com/STARRY-S/zip v0.2.1/go.mod h1:xNvshLODWtC4EJ702g7cTYn13G53o1+X9BWnPFpcWV4=
84-
github.com/SheltonZhu/115driver v1.1.1 h1:9EMhe2ZJflGiAaZbYInw2jqxTcqZNF+DtVDsEy70aFU=
85-
github.com/SheltonZhu/115driver v1.1.1/go.mod h1:rKvNd4Y4OkXv1TMbr/SKjGdcvMQxh6AW5Tw9w0CJb7E=
84+
github.com/SheltonZhu/115driver v1.2.3 h1:94XMP/ey7VXIlpoBLIJHEoXu7N8YsELZlXVbxWcDDvk=
85+
github.com/SheltonZhu/115driver v1.2.3/go.mod h1:Zk7Qz7SYO1QU0SJIne6DnUD2k36S3wx/KbsQpxcfY/Y=
8686
github.com/abbot/go-http-auth v0.4.0 h1:QjmvZ5gSC7jm3Zg54DqWE/T5m1t2AfDu6QlXJT0EVT0=
8787
github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM=
8888
github.com/aead/ecdh v0.2.0 h1:pYop54xVaq/CEREFEcukHRZfTdjiWvYIsZDXXrBapQQ=

0 commit comments

Comments
 (0)