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.
195 lines
6.7 KiB
195 lines
6.7 KiB
package http |
|
|
|
import ( |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/interface/main/report-click/model" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/metadata" |
|
) |
|
|
|
// reportPlayer write the archive data. |
|
func reportPlayer(c *bm.Context) { |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
buvid := header.Get("Buvid") |
|
displayid := header.Get("Display-ID") |
|
ts := params.Get("ts") |
|
aid := params.Get("aid") |
|
cid := params.Get("cid") |
|
playedTime := params.Get("played_time") |
|
mid := params.Get("mid") |
|
moAp := params.Get("mobi_app") |
|
typeID := params.Get("type") |
|
subType := params.Get("sub_type") |
|
sid := params.Get("sid") |
|
epid := params.Get("epid") |
|
infocRealTime.Info(ts, buvid, displayid, mid, aid, cid, playedTime, strconv.FormatInt(time.Now().Unix(), 10), "1", moAp, "", typeID, subType, sid, epid, "") |
|
c.JSON(nil, nil) |
|
} |
|
|
|
// reportHeartbeat write the archive data. |
|
func reportHeartbeat(c *bm.Context) { |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
buvid := header.Get("Buvid") |
|
displayid := header.Get("Display-ID") |
|
sts := params.Get("start_ts") |
|
aid := params.Get("aid") |
|
if aid == "" { |
|
aid = params.Get("avid") |
|
} |
|
cid := params.Get("cid") |
|
playedTime := params.Get("played_time") |
|
mid := params.Get("mid") |
|
moAp := params.Get("mobi_app") |
|
typeID := params.Get("type") |
|
subType := params.Get("sub_type") |
|
sid := params.Get("sid") |
|
epid := params.Get("epid") |
|
playType := params.Get("play_type") |
|
if playType == "" { |
|
playType = params.Get("playtype") |
|
} |
|
infocRealTime.Info(sts, buvid, displayid, mid, aid, cid, playedTime, strconv.FormatInt(time.Now().Unix(), 10), "2", moAp, "", typeID, subType, sid, epid, playType) |
|
c.JSON(nil, nil) |
|
} |
|
|
|
func heartbeatMobile(c *bm.Context) { |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
sts := params.Get("start_ts") |
|
build := params.Get("build") |
|
buvid := header.Get("Buvid") |
|
mobileApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
platform := params.Get("platform") |
|
session := params.Get("session") |
|
mid := params.Get("mid") |
|
aid := params.Get("aid") |
|
cid := params.Get("cid") |
|
sid := params.Get("sid") |
|
epid := params.Get("epid") |
|
tp := params.Get("type") |
|
subType := params.Get("sub_type") |
|
quality := params.Get("quality") |
|
totalTime := params.Get("total_time") |
|
pausedTime := params.Get("paused_time") |
|
playedTime := params.Get("played_time") |
|
videoDuration := params.Get("video_duration") |
|
playType := params.Get("play_type") |
|
networkType := params.Get("network_type") |
|
playProgressTimeLast := params.Get("last_play_progress_time") |
|
playProgressTimeMax := params.Get("max_play_progress_time") |
|
playMode := params.Get("play_mode") |
|
from := params.Get("from") |
|
epidStatus := params.Get("epid_status") |
|
playStatus := params.Get("play_status") |
|
userStatus := params.Get("user_status") |
|
actualPlayedTime := params.Get("actual_played_time") |
|
autoPlay := params.Get("auto_play") |
|
detailPlayTime := params.Get("detail_play_time") |
|
listPlayTime := params.Get("list_play_time") |
|
userAgent := c.Request.Header.Get("User-Agent") |
|
ts, err := strconv.ParseInt(sts, 10, 64) |
|
if err != nil || ts <= 0 { |
|
ts = time.Now().Unix() |
|
sts = strconv.FormatInt(ts, 10) |
|
} |
|
// NOTE /x/report//heartbeat/mobile auto_play = 2 ===> /x/report/click/android2 & ios |
|
// (自动播放的上报>> 2:天马feed流inline) 播放时长转成播放点击 |
|
autoPlayInt, _ := strconv.ParseInt(autoPlay, 10, 64) |
|
fromInt, _ := strconv.ParseInt(from, 10, 64) |
|
videoDurInt, _ := strconv.ParseInt(videoDuration, 10, 64) |
|
playedTimeInt, _ := strconv.ParseInt(playedTime, 10, 64) |
|
var needCompens bool |
|
if (autoPlayInt == 2 || autoPlayInt == 1) && fromMap[fromInt] { |
|
userAgent = userAgent + " (inline_play_to_view)" // change from auto_play to inline_play_heartbeat, then to inline_play_to_view |
|
needCompens = true |
|
} |
|
if (autoPlayInt == 2 || autoPlayInt == 1) && fromInlineMap[fromInt] && playedTimeInt >= inlineDuration && (videoDurInt >= playedTimeInt) { |
|
userAgent += " (played_time_enough)" // new logic, if inline play more than 10s, count it also |
|
needCompens = true |
|
} |
|
if needCompens { |
|
var cookieSid, plat string |
|
if ck, err := c.Request.Cookie("sid"); err == nil { |
|
cookieSid = ck.Value |
|
} |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
switch platform { |
|
case "android": |
|
plat = _platAndroid |
|
case "ios": |
|
plat = _platIos |
|
} |
|
clickSvr.Play(c, plat, aid, cid, params.Get("part"), mid, params.Get("lv"), |
|
"0", sts, buvid, ip, userAgent, buvid, |
|
cookieSid, c.Request.Header.Get("Referer"), tp, |
|
subType, sid, epid, playMode, platform, device, mobileApp, autoPlay, session) |
|
|
|
log.Warn("plat:%s,aid:%s,cid:%s,part:%s,mid:%s,lv:%s,0:%s,sts:%s,buvid:%s,ip:%s,userAgent:%s,"+ |
|
"buvid:%s,cookieSid:%s,Referer:%s,tp:%s,subType:%s,sid:%s,epid:%s,playMode:%s,"+ |
|
"platform:%s,device:%s,mobileApp:%s,autoPlay:%s,session:%s", |
|
plat, aid, cid, params.Get("part"), mid, params.Get("lv"), |
|
"0", sts, buvid, ip, userAgent, buvid, |
|
cookieSid, c.Request.Header.Get("Referer"), tp, |
|
subType, sid, epid, playMode, platform, device, mobileApp, autoPlay, session) |
|
} |
|
buildInt, _ := strconv.ParseInt(build, 10, 64) |
|
clickSvr.SuccReport(c, &model.SuccReport{ // record the success by different build |
|
MobiApp: mobileApp, |
|
Build: buildInt, |
|
}) |
|
infocStatistics.Info(sts, build, buvid, mobileApp, platform, session, mid, aid, cid, sid, |
|
epid, tp, subType, quality, totalTime, pausedTime, playedTime, videoDuration, |
|
playType, networkType, playProgressTimeLast, playProgressTimeMax, playMode, device, from, epidStatus, playStatus, userStatus, actualPlayedTime, autoPlay, detailPlayTime, listPlayTime) |
|
data := make(map[string]interface{}, 1) |
|
data["ts"] = ts |
|
c.JSON(data, nil) |
|
} |
|
|
|
// webHeartbeat write the archive data. |
|
func webHeartbeat(c *bm.Context) { |
|
var ( |
|
buvid, mid, term string |
|
params = c.Request.Form |
|
) |
|
if ck, err := c.Request.Cookie("buvid3"); err == nil { |
|
buvid = ck.Value |
|
} |
|
sts := params.Get("start_ts") |
|
aid := params.Get("aid") |
|
cid := params.Get("cid") |
|
pause := params.Get("pause") |
|
playType := params.Get("play_type") |
|
if playType == "" { |
|
playType = params.Get("playtype") |
|
} |
|
playedTime := params.Get("played_time") |
|
if midI, ok := c.Get("mid"); ok { |
|
mid = strconv.FormatInt(midI.(int64), 10) |
|
} |
|
tp := params.Get("type") |
|
subType := params.Get("sub_type") |
|
sid := params.Get("sid") |
|
if sid == "" { |
|
sid = params.Get("seasonID") |
|
} |
|
epid := params.Get("epid") |
|
dt := params.Get("dt") |
|
if dt == "7" { |
|
// count m.bilibili.com visits times. |
|
term = "h5" |
|
} else { |
|
dt = "2" |
|
term = "web" |
|
} |
|
realtime := params.Get("realtime") |
|
ts := strconv.FormatInt(time.Now().Unix(), 10) |
|
infocRealTime.Info(sts, buvid, "", mid, aid, cid, playedTime, ts, dt, term, pause, tp, subType, sid, epid, playType) |
|
clickSvr.Report(c, playedTime, cid, tp, subType, realtime, aid, mid, sid, epid, dt, ts) |
|
c.JSON(nil, nil) |
|
}
|
|
|