You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
2.3 KiB
117 lines
2.3 KiB
package musicobj
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
func newSys(options Options) (sys *Music, err error) {
|
|
sys = &Music{
|
|
options: options,
|
|
}
|
|
return
|
|
}
|
|
|
|
type Music struct {
|
|
options Options
|
|
}
|
|
|
|
// 搜索歌曲
|
|
func (this *Music) SearchMusic(keywords string, limit, offset int) (result *SearchResultResponse, err error) {
|
|
var (
|
|
req *http.Request
|
|
resp *http.Response
|
|
body []byte
|
|
)
|
|
// keywords = url.QueryEscape(keywords)
|
|
|
|
// 创建JSON请求体
|
|
requestData := map[string]interface{}{
|
|
"keywords": keywords,
|
|
"limit": limit,
|
|
"offset": offset,
|
|
}
|
|
url := fmt.Sprintf("%s/api/music/music_search", this.options.ApiBaseUrl)
|
|
|
|
jsonData, err := json.Marshal(requestData)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
req, err = http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 设置请求头
|
|
req.Header.Set("Content-Type", "application/json")
|
|
// 执行请求
|
|
client := &http.Client{}
|
|
resp, err = client.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
err = fmt.Errorf("StatusCode:%d", resp.StatusCode)
|
|
}
|
|
// 读取响应内容
|
|
body, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 输出响应内容
|
|
// fmt.Println(string(body))
|
|
result = &SearchResultResponse{}
|
|
err = json.Unmarshal(body, result)
|
|
return
|
|
}
|
|
|
|
// 音乐连接获取
|
|
func (this *Music) MusicUrl(id int64) (result *UrlResultResponse, err error) {
|
|
var (
|
|
req *http.Request
|
|
resp *http.Response
|
|
body []byte
|
|
)
|
|
// 创建JSON请求体
|
|
requestData := map[string]interface{}{
|
|
"id": id,
|
|
}
|
|
jsonData, err := json.Marshal(requestData)
|
|
if err != nil {
|
|
return
|
|
}
|
|
url := fmt.Sprintf("%s/api/music/music_url", this.options.ApiBaseUrl)
|
|
req, err = http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 设置请求头
|
|
req.Header.Set("Content-Type", "application/json")
|
|
// 发起请求
|
|
client := &http.Client{}
|
|
resp, err = client.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// 读取响应内容
|
|
body, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if resp.StatusCode != http.StatusOK {
|
|
err = fmt.Errorf("StatusCode:%d", resp.StatusCode)
|
|
return
|
|
}
|
|
// 打印结果
|
|
fmt.Println(string(body))
|
|
result = &UrlResultResponse{}
|
|
err = json.Unmarshal(body, result)
|
|
return
|
|
}
|
|
|