/
qqmusic.go
131 lines (123 loc) · 2.69 KB
/
qqmusic.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package qqmusicapi
import (
"io/ioutil"
"log"
"strings"
"time"
"github.com/BetaGoRobot/BetaGo/httptool"
"github.com/BetaGoRobot/BetaGo/neteaseapi"
jsoniter "github.com/json-iterator/go"
)
var json = jsoniter.ConfigCompatibleWithStandardLibrary
func init() {
if neteaseapi.IsTest == "true" {
qqmusicBaseURL = "http://localhost:3300"
}
}
func autoRefreshLogin() {
for {
time.Sleep(time.Minute * 5)
httptool.PostWithTimestamp(httptool.RequestInfo{
URL: qqmusicBaseURL + "/user/refresh",
})
}
}
func init() {
//获取存储的Cookie
_, err := httptool.PostWithTimestamp(httptool.RequestInfo{
URL: qqmusicBaseURL + "/user/cookie",
})
if err != nil {
log.Println(err.Error())
}
go autoRefreshLogin()
}
// SearchMusic 搜索音乐
// @receiver ctx
// @param keywords
// @return result
// @return err
func (ctx *QQmusicContext) SearchMusic(keywords []string) (result []SearchMusicRes, err error) {
resp, err := httptool.PostWithTimestamp(
httptool.RequestInfo{
URL: qqmusicBaseURL + "/search",
Params: map[string][]string{
"key": {strings.Join(keywords, " ")},
"pageNo": {"1"},
"pageSize": {"3"},
"t": {"0"},
},
},
)
if err != nil {
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
defer func() {
_ = resp.Body.Close()
}()
searchResp := &QQmusicSearchResponse{}
json.Unmarshal(body, searchResp)
for _, song := range searchResp.Data.List {
var ArtistName string
for _, name := range song.Singer {
if ArtistName != "" {
ArtistName += ","
}
ArtistName += name.Name
}
songURL, errIn := ctx.GetMusicURLByID(song.Songmid, song.StrMediaMid)
if errIn != nil {
err = errIn
return
}
if len(songURL) == 0 {
continue
}
result = append(result, SearchMusicRes{
ID: song.Songmid,
Name: song.Songname,
ArtistName: ArtistName,
SongURL: songURL,
PicURL: getAlbumPicURL(song.Albummid),
})
}
return
}
// GetMusicURLByID 获取音乐的url
// @receiver ctx
// @param IDName
// @return musicURL
// @return err
func (ctx *QQmusicContext) GetMusicURLByID(mid, mediaMid string) (musicURL string, err error) {
resp, err := httptool.PostWithTimestamp(
httptool.RequestInfo{
URL: qqmusicBaseURL + "/song/url",
Params: map[string][]string{
"id": {mid},
"type": {"128"},
"mediaId": {mediaMid},
},
},
)
if err != nil {
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
defer func() {
_ = resp.Body.Close()
}()
music := &MusicURLId{}
err = json.Unmarshal(body, music)
musicURL = music.SongURL
return
}
func getAlbumPicURL(albumMID string) (picURL string) {
return qqmusicPicBaseURL + albumMID + ".jpg"
}