mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-08 08:57:40 +08:00
feat: add popularity data for live
This commit is contained in:
+5
-4
@@ -49,10 +49,11 @@ func WithThreshold(threshold float64) CVOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Popularity struct {
|
type Popularity struct {
|
||||||
Stars string `json:"stars"` // 点赞数
|
Stars string `json:"stars,omitempty"` // 点赞数
|
||||||
Comments string `json:"comments"` // 评论数
|
Comments string `json:"comments,omitempty"` // 评论数
|
||||||
Favorites string `json:"favorites"` // 收藏数
|
Favorites string `json:"favorites,omitempty"` // 收藏数
|
||||||
Shares string `json:"shares"` // 分享数
|
Shares string `json:"shares,omitempty"` // 分享数
|
||||||
|
LiveUsers string `json:"live_users,omitempty"` // 直播间人数
|
||||||
}
|
}
|
||||||
|
|
||||||
type OcrResult struct {
|
type OcrResult struct {
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (s *VideoStat) incrFeed(ocrResult *OcrResult, driverExt *DriverExt) error {
|
|||||||
// add popularity data for feed
|
// add popularity data for feed
|
||||||
popularityData := ocrResult.Texts.FilterScope(driverExt.GenAbsScope(0.8, 0.5, 1, 0.8))
|
popularityData := ocrResult.Texts.FilterScope(driverExt.GenAbsScope(0.8, 0.5, 1, 0.8))
|
||||||
if len(popularityData) != 4 {
|
if len(popularityData) != 4 {
|
||||||
log.Warn().Interface("popularity", popularityData).Msg("get popularity data failed")
|
log.Warn().Interface("popularity", popularityData).Msg("get feed popularity data failed")
|
||||||
} else {
|
} else {
|
||||||
ocrResult.Popularity = Popularity{
|
ocrResult.Popularity = Popularity{
|
||||||
Stars: popularityData[0].Text,
|
Stars: popularityData[0].Text,
|
||||||
@@ -131,6 +131,26 @@ func (s *VideoStat) incrFeed(ocrResult *OcrResult, driverExt *DriverExt) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// incrLive increases live count and live stat
|
||||||
|
func (s *VideoStat) incrLive(ocrResult *OcrResult, driverExt *DriverExt) error {
|
||||||
|
// TODO: check live type
|
||||||
|
|
||||||
|
// add popularity data for live
|
||||||
|
popularityData := ocrResult.Texts.FilterScope(driverExt.GenAbsScope(0.7, 0.05, 1, 0.15))
|
||||||
|
if len(popularityData) != 1 {
|
||||||
|
log.Warn().Interface("popularity", popularityData).Msg("get live popularity data failed")
|
||||||
|
} else {
|
||||||
|
ocrResult.Popularity = Popularity{
|
||||||
|
LiveUsers: popularityData[0].Text,
|
||||||
|
}
|
||||||
|
log.Info().Interface("popularity", ocrResult.Popularity).
|
||||||
|
Msg("found live popularity success")
|
||||||
|
}
|
||||||
|
|
||||||
|
s.LiveCount++
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type TargetLabel struct {
|
type TargetLabel struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
Scope Scope `json:"scope"`
|
Scope Scope `json:"scope"`
|
||||||
@@ -213,18 +233,8 @@ func (l *LiveCrawler) Run(driver *DriverExt, enterPoint PointF) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// take screenshot and get screen texts by OCR
|
|
||||||
imagePath, _, err := l.driver.GetScreenTextsByOCR()
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Msg("OCR GetTexts failed")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
l.driver.cacheStepData.OcrResults[imagePath].Tags = []string{"live"}
|
|
||||||
|
|
||||||
// TODO: check live type
|
|
||||||
|
|
||||||
// swipe to next live video
|
// swipe to next live video
|
||||||
err = l.driver.SwipeUp()
|
err := l.driver.SwipeUp()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("swipe up failed")
|
log.Error().Err(err).Msg("swipe up failed")
|
||||||
// TODO: retry maximum 3 times
|
// TODO: retry maximum 3 times
|
||||||
@@ -236,9 +246,19 @@ func (l *LiveCrawler) Run(driver *DriverExt, enterPoint PointF) error {
|
|||||||
log.Error().Err(err).Msg("sleep random failed")
|
log.Error().Err(err).Msg("sleep random failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check live type
|
// take screenshot and get screen texts by OCR
|
||||||
|
imagePath, _, err := l.driver.GetScreenTextsByOCR()
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("OCR GetTexts failed")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
ocrResult := l.driver.cacheStepData.OcrResults[imagePath]
|
||||||
|
ocrResult.Tags = []string{"live"}
|
||||||
|
|
||||||
l.currentStat.LiveCount++
|
// check live type and incr live count
|
||||||
|
if err := l.currentStat.incrLive(ocrResult, l.driver); err != nil {
|
||||||
|
log.Error().Err(err).Msg("incr live failed")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user