65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
|
package goblin
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
xhttp "net/http"
|
||
|
"net/url"
|
||
|
|
||
|
"go-common/app/interface/main/tv/model"
|
||
|
"go-common/library/ecode"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/net/metadata"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_httpHeaderRemoteIP = "x-backend-bili-real-ip"
|
||
|
)
|
||
|
|
||
|
// UgcPlayurl is use for get ugc play url
|
||
|
func (d *Dao) UgcPlayurl(ctx context.Context, p *model.PlayURLReq) (res map[string]interface{}, resp *model.PlayURLResp, err error) {
|
||
|
var (
|
||
|
params = url.Values{}
|
||
|
url = d.conf.Host.UgcPlayURL
|
||
|
bs []byte
|
||
|
req *xhttp.Request
|
||
|
ip = metadata.String(ctx, metadata.RemoteIP)
|
||
|
)
|
||
|
res = make(map[string]interface{})
|
||
|
params.Set("platform", p.Platform)
|
||
|
params.Set("device", p.Device)
|
||
|
params.Set("expire", p.Expire)
|
||
|
params.Set("build", p.Build)
|
||
|
params.Set("mid", p.Mid)
|
||
|
params.Set("qn", p.Qn)
|
||
|
params.Set("npcybs", p.Npcybs)
|
||
|
params.Set("buvid", p.Buvid)
|
||
|
params.Set("otype", "json")
|
||
|
params.Set("trackPath", p.TrackPath)
|
||
|
params.Set("cid", p.Cid)
|
||
|
params.Set("access_key", p.AccessKey)
|
||
|
params.Set("platform", "tvproj")
|
||
|
if req, err = d.client.NewRequest(xhttp.MethodGet, url, ip, params); err != nil {
|
||
|
return
|
||
|
}
|
||
|
if ip != "" { // add ip into header
|
||
|
req.Header.Set(_httpHeaderRemoteIP, ip)
|
||
|
}
|
||
|
log.Info("ugcPlayURL Cid %d, IP %s", p.Cid, ip)
|
||
|
if bs, err = d.client.Raw(ctx, req); err != nil {
|
||
|
log.Error("ugcPl URL %s, Cid %d, Client Raw Err %v", url, p.Cid, err)
|
||
|
return
|
||
|
}
|
||
|
if err = json.Unmarshal(bs, &resp); err != nil { // json unmarshal to struct, to detect error
|
||
|
log.Error("ugcPl URL %s, Cid %d, Json Unmarshal %s, Err %v", url, p.Cid, string(bs), err)
|
||
|
return
|
||
|
}
|
||
|
if resp.Code != ecode.OK.Code() {
|
||
|
log.Error("ugcPl URL %s, Cid %d, Resp Code %d, Msg %s", url, p.Cid, resp.Code, resp.Message)
|
||
|
err = ecode.TvVideoNotFound
|
||
|
return
|
||
|
}
|
||
|
err = json.Unmarshal(bs, &res)
|
||
|
return
|
||
|
}
|