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.
64 lines
1.8 KiB
64 lines
1.8 KiB
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 |
|
}
|
|
|