558 lines
14 KiB
Go
558 lines
14 KiB
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
"time"
|
|
|
|
"go-common/app/interface/main/app-view/model"
|
|
"go-common/app/interface/main/app-view/model/view"
|
|
resource "go-common/app/service/main/resource/model"
|
|
"go-common/library/ecode"
|
|
bm "go-common/library/net/http/blademaster"
|
|
"go-common/library/net/metadata"
|
|
)
|
|
|
|
const (
|
|
_viewPath = "/x/v2/view"
|
|
_viewPagePath = "/x/v2/view/page"
|
|
_headerBuvid = "Buvid"
|
|
)
|
|
|
|
var (
|
|
_rate = []int64{564, 1328, 2592, 4192}
|
|
_formats = map[int]string{1: "mp4", 2: "hdmp4", 3: "flv", 4: "flv"}
|
|
_dislike = []*view.Dislike{
|
|
{
|
|
ID: 5,
|
|
Name: "标题党/封面党",
|
|
},
|
|
{
|
|
ID: 6,
|
|
Name: "内容质量差",
|
|
},
|
|
{
|
|
ID: 7,
|
|
Name: "内容/封面令人不适",
|
|
},
|
|
{
|
|
ID: 8,
|
|
Name: "营销广告",
|
|
},
|
|
}
|
|
)
|
|
|
|
// viewIndex view handler
|
|
func viewIndex(c *bm.Context) {
|
|
var (
|
|
mid, aid, movieID int64
|
|
err error
|
|
parentMode int
|
|
)
|
|
params := c.Request.Form
|
|
header := c.Request.Header
|
|
// get params
|
|
aidStr := params.Get("aid")
|
|
movieidStr := params.Get("movie_id")
|
|
mobiApp := params.Get("mobi_app")
|
|
device := params.Get("device")
|
|
ak := params.Get("access_key")
|
|
buildStr := params.Get("build")
|
|
from := params.Get("from")
|
|
trackid := params.Get("trackid")
|
|
network := params.Get("network")
|
|
adExtra := params.Get("ad_extra")
|
|
parentModeStr := params.Get("parent_mode")
|
|
parentMode, _ = strconv.Atoi(parentModeStr)
|
|
qnStr := params.Get("qn")
|
|
qn, _ := strconv.Atoi(qnStr)
|
|
fnverStr := params.Get("fnver")
|
|
fnver, _ := strconv.Atoi(fnverStr)
|
|
fnvalStr := params.Get("fnval")
|
|
fnval, _ := strconv.Atoi(fnvalStr)
|
|
forceHost, _ := strconv.Atoi(params.Get("force_host"))
|
|
spmid := params.Get("spmid")
|
|
fromSpmid := params.Get("from_spmid")
|
|
// check params
|
|
if aidStr == "" && movieidStr == "" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if aidStr != "" && aidStr != "0" {
|
|
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
} else if movieidStr != "" && movieidStr != "0" {
|
|
if movieID, err = strconv.ParseInt(movieidStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
}
|
|
if aid < 1 && movieID < 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
build, err := strconv.Atoi(buildStr)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
plat := model.Plat(mobiApp, device)
|
|
buvid := header.Get("Buvid")
|
|
disid := header.Get("Display-ID")
|
|
cdnIP := header.Get("X-Cache-Server-Addr")
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
autoplay, _ := strconv.Atoi(params.Get("autoplay"))
|
|
now := time.Now()
|
|
// view
|
|
ip := metadata.String(c, metadata.RemoteIP)
|
|
viewSvr.ViewInfoc(mid, int(plat), trackid, aidStr, ip, _viewPath, buildStr, buvid, disid, from, now, err, autoplay, spmid, fromSpmid)
|
|
data, err := viewSvr.View(c, mid, aid, movieID, plat, build, qn, fnver, fnval, forceHost, parentMode, ak, mobiApp, device, buvid, cdnIP, network, adExtra, from, now)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
data.Dislikes = _dislike
|
|
compMeta(data, build)
|
|
if mid == 0 && data.Duration > 360 {
|
|
data.Paster, _ = viewSvr.Paster(c, plat, resource.VdoAdsTypeNologin, aidStr, strconv.Itoa(int(data.TypeID)), buvid)
|
|
}
|
|
c.JSON(data, nil)
|
|
viewSvr.RelateInfoc(mid, aid, int(plat), trackid, buildStr, buvid, disid, ip, _viewPath, data.ReturnCode, data.UserFeature, from, data.Relates, now, data.IsRec)
|
|
}
|
|
|
|
// viewPage view page handler.
|
|
func viewPage(c *bm.Context) {
|
|
var (
|
|
mid, aid int64
|
|
build int
|
|
err error
|
|
)
|
|
params := c.Request.Form
|
|
header := c.Request.Header
|
|
// get params
|
|
aidStr := params.Get("aid")
|
|
mobiApp := params.Get("mobi_app")
|
|
device := params.Get("device")
|
|
ak := params.Get("access_key")
|
|
buildStr := params.Get("build")
|
|
from := params.Get("from")
|
|
trackid := params.Get("trackid")
|
|
spmid := params.Get("spmid")
|
|
fromSpmid := params.Get("from_spmid")
|
|
// check params
|
|
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if aid < 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if build, err = strconv.Atoi(buildStr); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
plat := model.Plat(mobiApp, device)
|
|
buvid := header.Get("Buvid")
|
|
disid := header.Get("Display-ID")
|
|
cdnIP := header.Get("X-Cache-Server-Addr")
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
autoplay, _ := strconv.Atoi(params.Get("autoplay"))
|
|
ip := metadata.String(c, metadata.RemoteIP)
|
|
now := time.Now()
|
|
// view page
|
|
viewSvr.ViewInfoc(mid, int(plat), trackid, aidStr, ip, _viewPagePath, buildStr, buvid, disid, from, now, err, autoplay, spmid, fromSpmid)
|
|
data, err := viewSvr.ViewPage(c, mid, aid, 0, plat, build, ak, mobiApp, device, cdnIP, false, now)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
compMeta(data, build)
|
|
c.JSON(data, nil)
|
|
}
|
|
|
|
// videoShot video shot .
|
|
func videoShot(c *bm.Context) {
|
|
var aid, cid int64
|
|
params := c.Request.Form
|
|
if aid, _ = strconv.ParseInt(params.Get("aid"), 10, 64); aid < 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if cid, _ = strconv.ParseInt(params.Get("cid"), 10, 64); cid < 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(viewSvr.Shot(c, aid, cid))
|
|
}
|
|
|
|
// addShare add a share.
|
|
func addShare(c *bm.Context) {
|
|
params := c.Request.Form
|
|
mobiApp := params.Get("mobi_app")
|
|
buvid := c.Request.Header.Get("Buvid")
|
|
from := params.Get("from")
|
|
build := params.Get("build")
|
|
// check
|
|
aidStr := params.Get("aid")
|
|
aid, err := strconv.ParseInt(aidStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
var mid int64
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
share, isReport, upID, err := viewSvr.AddShare(c, aid, mid, metadata.String(c, metadata.RemoteIP))
|
|
c.JSON(struct {
|
|
Aid int64 `json:"aid"`
|
|
Count int `json:"count"`
|
|
}{aid, share}, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// for ai big data
|
|
sendUserAct(mid, mobiApp, buvid, from, build, aidStr, "av", "share")
|
|
if collector != nil && isReport {
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(upID, 10), strconv.FormatInt(aid, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(aid, 10), "av", "share", "")
|
|
}
|
|
}
|
|
|
|
func addCoin(c *bm.Context) {
|
|
var (
|
|
mid, aid, upID int64
|
|
avType int64
|
|
actLike = "cointolike"
|
|
actCoin = "coin"
|
|
)
|
|
params := c.Request.Form
|
|
// check
|
|
mobiApp := params.Get("mobi_app")
|
|
buvid := c.Request.Header.Get("Buvid")
|
|
from := params.Get("from")
|
|
build := params.Get("build")
|
|
aidStr := params.Get("aid")
|
|
upIDStr := params.Get("upid")
|
|
ak := params.Get("access_key")
|
|
multiStr := params.Get("multiply")
|
|
selectLikeStr := params.Get("select_like")
|
|
selectLike, _ := strconv.Atoi(selectLikeStr)
|
|
aid, _ = strconv.ParseInt(aidStr, 10, 64)
|
|
upID, _ = strconv.ParseInt(upIDStr, 10, 64)
|
|
multiply, err := strconv.ParseInt(multiStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if avType, _ = strconv.ParseInt(params.Get("avtype"), 10, 64); avType == 0 {
|
|
avType = 1
|
|
}
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
// for ai big data
|
|
sendUserAct(mid, mobiApp, buvid, from, build, aidStr, "av", actCoin)
|
|
if selectLike == 1 {
|
|
sendUserAct(mid, mobiApp, buvid, from, build, aidStr, "av", actLike)
|
|
}
|
|
prompt, like, err := viewSvr.AddCoin(c, aid, mid, upID, avType, multiply, ak, selectLike)
|
|
c.JSON(struct {
|
|
Prompt bool `json:"prompt,omitempty"`
|
|
Like bool `json:"like"`
|
|
}{Prompt: prompt, Like: like}, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if collector != nil {
|
|
var itemType = "archive"
|
|
if avType == 2 {
|
|
itemType = "article"
|
|
}
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(upID, 10), strconv.FormatInt(aid, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(aid, 10), itemType, actCoin, "")
|
|
if like {
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(upID, 10), strconv.FormatInt(aid, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(aid, 10), "av", actLike, "")
|
|
}
|
|
}
|
|
}
|
|
|
|
func like(c *bm.Context) {
|
|
var mid int64
|
|
params := c.Request.Form
|
|
// check
|
|
mobiApp := params.Get("mobi_app")
|
|
buvid := c.Request.Header.Get("Buvid")
|
|
from := params.Get("from")
|
|
build := params.Get("build")
|
|
aidStr := params.Get("aid")
|
|
aid, err := strconv.ParseInt(aidStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
like, err := strconv.Atoi(params.Get("like"))
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if like != 0 && like != 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
upperID, toast, err := viewSvr.Like(c, aid, mid, int8(like))
|
|
c.JSON(struct {
|
|
Toast string `json:"toast"`
|
|
}{Toast: toast}, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// for ai big data
|
|
action := "like"
|
|
if like == 1 {
|
|
action = "like_cancel"
|
|
}
|
|
sendUserAct(mid, mobiApp, buvid, from, build, aidStr, "av", action)
|
|
if collector != nil {
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(upperID, 10), strconv.FormatInt(aid, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(aid, 10), "av", action, "")
|
|
}
|
|
}
|
|
|
|
func dislike(c *bm.Context) {
|
|
var mid int64
|
|
params := c.Request.Form
|
|
mobiApp := params.Get("mobi_app")
|
|
buvid := c.Request.Header.Get("Buvid")
|
|
from := params.Get("from")
|
|
build := params.Get("build")
|
|
// check
|
|
aidStr := params.Get("aid")
|
|
aid, err := strconv.ParseInt(aidStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
dislike, err := strconv.Atoi(params.Get("dislike"))
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if dislike != 0 && dislike != 1 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
upperID, err := viewSvr.Dislike(c, aid, mid, int8(dislike))
|
|
c.JSON(nil, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// for ai big data
|
|
action := "dislike"
|
|
if dislike == 1 {
|
|
action = "dislike_cancel"
|
|
}
|
|
sendUserAct(mid, mobiApp, buvid, from, build, aidStr, "av", action)
|
|
if collector != nil {
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(upperID, 10), strconv.FormatInt(aid, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(aid, 10), "av", action, "")
|
|
}
|
|
}
|
|
|
|
func addFav(c *bm.Context) {
|
|
var (
|
|
mid int64
|
|
vmid int64
|
|
fid int64
|
|
aid int64
|
|
err error
|
|
)
|
|
params := c.Request.Form
|
|
if midI, ok := c.Get("mid"); ok {
|
|
mid = midI.(int64)
|
|
}
|
|
// check
|
|
if aid, err = strconv.ParseInt(params.Get("aid"), 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if vmid, err = strconv.ParseInt(params.Get("vmid"), 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if fid, err = strconv.ParseInt(params.Get("fid"), 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
ak := params.Get("access_key")
|
|
prompt, err := viewSvr.AddFav(c, mid, vmid, []int64{fid}, aid, ak)
|
|
c.JSON(struct {
|
|
Prompt bool `json:"prompt,omitempty"`
|
|
}{Prompt: prompt}, err)
|
|
}
|
|
|
|
// adDislike ad dislike
|
|
func adDislike(c *bm.Context) {
|
|
var mid int64
|
|
params := c.Request.Form
|
|
header := c.Request.Header
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
gt := params.Get("goto")
|
|
id, _ := strconv.ParseInt(params.Get("id"), 10, 64)
|
|
reasonID, _ := strconv.ParseInt(params.Get("reason_id"), 10, 64)
|
|
cmreasonID, _ := strconv.ParseInt(params.Get("cm_reason_id"), 10, 64)
|
|
rid, _ := strconv.ParseInt(params.Get("rid"), 10, 64)
|
|
tagID, _ := strconv.ParseInt(params.Get("tag_id"), 10, 64)
|
|
adcb := params.Get("ad_cb")
|
|
buvid := header.Get("Buvid")
|
|
if buvid == "" && mid == 0 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
// for ad data
|
|
err := dislikePub.Send(context.TODO(), strconv.FormatInt(mid, 10), &cmDislike{
|
|
ID: id,
|
|
Buvid: buvid,
|
|
Goto: gt,
|
|
Mid: mid,
|
|
ReasonID: reasonID,
|
|
CMReasonID: cmreasonID,
|
|
UpperID: 0,
|
|
Rid: rid,
|
|
TagID: tagID,
|
|
ADCB: adcb,
|
|
})
|
|
c.JSON(nil, err)
|
|
}
|
|
|
|
func compMeta(v *view.View, build int) {
|
|
if build == 5800 || build == 508000 {
|
|
for _, vp := range v.Pages {
|
|
metas := make([]*view.Meta, 0, 4)
|
|
for i, r := range _rate {
|
|
meta := &view.Meta{
|
|
Quality: i + 1,
|
|
Size: int64(float64(r*v.Duration) * 1.1 / 8.0),
|
|
Format: _formats[i+1],
|
|
}
|
|
metas = append(metas, meta)
|
|
}
|
|
vp.Metas = metas
|
|
}
|
|
}
|
|
}
|
|
|
|
// vipPlayURL get big-member token.
|
|
func vipPlayURL(c *bm.Context) {
|
|
var mid int64
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
params := c.Request.Form
|
|
aid, err := strconv.ParseInt(params.Get("aid"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
cid, _ := strconv.ParseInt(params.Get("cid"), 10, 64)
|
|
if aid == 0 || cid == 0 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(viewSvr.VipPlayURL(c, aid, cid, mid))
|
|
}
|
|
|
|
// follow check if follow.
|
|
func follow(c *bm.Context) {
|
|
var mid int64
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
params := c.Request.Form
|
|
vmid, err := strconv.ParseInt(params.Get("vmid"), 10, 64)
|
|
if err != nil || vmid <= 0 {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
c.JSON(viewSvr.Follow(c, vmid, mid))
|
|
}
|
|
|
|
func upperRecmd(c *bm.Context) {
|
|
var (
|
|
mid int64
|
|
vmid int64
|
|
header = c.Request.Header
|
|
params = c.Request.Form
|
|
)
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
mobiApp := params.Get("mobi_app")
|
|
device := params.Get("device")
|
|
platform := params.Get("platform")
|
|
buildStr := params.Get("build")
|
|
build, err := strconv.Atoi(buildStr)
|
|
if err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
if vmid, err = strconv.ParseInt(params.Get("vmid"), 10, 64); err != nil {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
plat := model.Plat(mobiApp, device)
|
|
buvid := header.Get(_headerBuvid)
|
|
data, err := viewSvr.UpperRecmd(c, plat, platform, mobiApp, device, buvid, build, mid, vmid)
|
|
c.JSON(data, err)
|
|
}
|
|
|
|
func likeTriple(c *bm.Context) {
|
|
var (
|
|
mid int64
|
|
actTriple = "triplelike"
|
|
)
|
|
params := &view.TripleParam{}
|
|
if err := c.Bind(params); err != nil {
|
|
return
|
|
}
|
|
buvid := c.Request.Header.Get("Buvid")
|
|
if midInter, ok := c.Get("mid"); ok {
|
|
mid = midInter.(int64)
|
|
}
|
|
// for ai big data
|
|
sendUserAct(mid, params.MobiApp, buvid, params.From, params.Build, strconv.FormatInt(params.AID, 10), "av", actTriple)
|
|
triple, err := viewSvr.LikeTriple(c, params.AID, mid, params.Ak)
|
|
c.JSON(triple, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if collector != nil && triple.Anticheat {
|
|
collector.InfoAntiCheat2(c, strconv.FormatInt(triple.UpID, 10), strconv.FormatInt(params.AID, 10), strconv.FormatInt(mid, 10), strconv.FormatInt(params.AID, 10), "av", actTriple, "")
|
|
}
|
|
}
|
|
|
|
func sendUserAct(mid int64, mobiApp, buvid, from, build, itemID, itemType, action string) {
|
|
userActPub.Send(context.TODO(), strconv.FormatInt(mid, 10), &userAct{
|
|
Client: mobiApp,
|
|
Buvid: buvid,
|
|
Mid: mid,
|
|
Time: time.Now().Unix(),
|
|
From: from,
|
|
Build: build,
|
|
ItemID: itemID,
|
|
ItemType: itemType,
|
|
Action: action,
|
|
})
|
|
}
|