mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-13 21:48:30 +08:00
Initial commit
This commit is contained in:
105
provider/bilibili.go
Normal file
105
provider/bilibili.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/player"
|
||||
"fmt"
|
||||
"github.com/tidwall/gjson"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type Bilibili struct {
|
||||
InfoApi string
|
||||
FileApi string
|
||||
SearchApi string
|
||||
}
|
||||
|
||||
func _newBilibili() *Bilibili {
|
||||
return &Bilibili{
|
||||
InfoApi: "https://www.bilibili.com/audio/music-service-c/web/song/info?sid=%s",
|
||||
FileApi: "https://api.bilibili.com/audio/music-service-c/url?device=phone&mid=8047632&mobi_app=iphone&platform=ios&privilege=2&songid=%s&quality=2",
|
||||
SearchApi: "https://api.bilibili.com/audio/music-service-c/s?search_type=music&keyword=%s&page=1&pagesize=100",
|
||||
}
|
||||
}
|
||||
|
||||
var BilibiliAPI *Bilibili
|
||||
|
||||
func init() {
|
||||
BilibiliAPI = _newBilibili()
|
||||
Providers[BilibiliAPI.GetName()] = BilibiliAPI
|
||||
}
|
||||
|
||||
func (b *Bilibili) GetName() string {
|
||||
return "bilibili"
|
||||
}
|
||||
|
||||
func (b *Bilibili) FormatPlaylistUrl(uri string) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (b *Bilibili) GetPlaylist(meta Meta) ([]*player.Media, error) {
|
||||
return nil, ErrorExternalApi
|
||||
}
|
||||
|
||||
func (b *Bilibili) Search(keyword string) ([]*player.Media, error) {
|
||||
resp := httpGetString(fmt.Sprintf(b.SearchApi, url.QueryEscape(keyword)), map[string]string{
|
||||
"user-agent": "BiliMusic/2.233.3",
|
||||
})
|
||||
if resp == "" {
|
||||
return nil, ErrorExternalApi
|
||||
}
|
||||
result := make([]*player.Media, 0)
|
||||
gjson.Get(resp, "data.result").ForEach(func(key, value gjson.Result) bool {
|
||||
result = append(result, &player.Media{
|
||||
Title: value.Get("title").String(),
|
||||
Cover: value.Get("cover").String(),
|
||||
Artist: value.Get("author").String(),
|
||||
Meta: Meta{
|
||||
Name: b.GetName(),
|
||||
Id: value.Get("id").String(),
|
||||
},
|
||||
})
|
||||
return true
|
||||
})
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (b *Bilibili) UpdateMedia(media *player.Media) error {
|
||||
resp := httpGetString(fmt.Sprintf(b.InfoApi, media.Meta.(Meta).Id), map[string]string{
|
||||
"user-agent": "BiliMusic/2.233.3",
|
||||
})
|
||||
if resp == "" {
|
||||
return ErrorExternalApi
|
||||
}
|
||||
if gjson.Get(resp, "data.title").String() == "" {
|
||||
return ErrorExternalApi
|
||||
}
|
||||
media.Title = gjson.Get(resp, "data.title").String()
|
||||
media.Cover = gjson.Get(resp, "data.cover").String()
|
||||
media.Artist = gjson.Get(resp, "data.author").String()
|
||||
media.Album = media.Title
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bilibili) UpdateMediaUrl(media *player.Media) error {
|
||||
resp := httpGetString(fmt.Sprintf(b.FileApi, media.Meta.(Meta).Id), map[string]string{
|
||||
"user-agent": "BiliMusic/2.233.3",
|
||||
})
|
||||
|
||||
if resp == "" {
|
||||
return ErrorExternalApi
|
||||
}
|
||||
media.Header = map[string]string{
|
||||
"user-agent": "BiliMusic/2.233.3",
|
||||
}
|
||||
fmt.Println(fmt.Sprintf(b.InfoApi, media.Meta.(Meta).Id))
|
||||
uri := gjson.Get(resp, "data.cdns.0").String()
|
||||
if uri == "" {
|
||||
return ErrorExternalApi
|
||||
}
|
||||
media.Url = uri
|
||||
return nil
|
||||
}
|
||||
func (k *Bilibili) UpdateMediaLyric(media *player.Media) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user