package web import ( "strings" "videoweb/app/service/playletser" "videoweb/app/service/videoser" "github.com/gin-gonic/gin" ) // Play 播放页:GET /api/app/playlet/detail + GET /api/app/playlet/chapter/detail。 // 文档:http://172.104.181.99:25319/swagger/index.html#/app短剧相关接口/get_api_app_playlet_detail func Play(c *gin.Context) { if c.Request.URL.Query().Has("guessPage") { NotFound(c) return } q := playletser.ParsePlayQuery(c.Param("slug"), c.Param("ep")) if strings.TrimSpace(c.Param("ep")) != "" && q.ChapterID <= 0 { NotFound(c) return } playletKey := c.Param("slug") playlet := playletser.FetchDetailOrNilByKey(c, playletKey) if playlet == nil { NotFound(c) return } chapterID := playletser.ResolvePlayChapterID(playlet, q.ChapterID) listedChapter := playletser.FindChapter(playlet, chapterID) if chapterID <= 0 || (q.ChapterID > 0 && listedChapter == nil) { NotFound(c) return } chapter := playletser.FetchChapterDetailOrNil(c, chapterID, playlet.ID, playlet.Slug) if chapter == nil { if listedChapter != nil { chapter = playletser.ChapterFromList(*listedChapter) } } if chapter == nil { NotFound(c) return } seo := playletser.ResolvePlayPageSEO(chapter, playlet) title := playletser.ResolvePlayPageTitle(chapter, playlet) if title == "" { title = "在线播放 - 黄果短剧" } hot := playletser.FetchAllListOrEmpty(c, playletser.AllListQuery{ PageNum: 1, PageSize: 8, SortType: 2, // 最热 UpdateStatus: 0, // 全部 }) hotList := []playletser.CommonData(nil) if hot != nil { hotList = hot.List } guessPage := playletser.ParseGuessLikePage(c) guessLike := playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{ PlayletID: playlet.ID, PageNum: guessPage, PageSize: 6, }) if len(guessLike.List) == 0 && guessPage > 1 { guessLike = playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{ PlayletID: playlet.ID, PageNum: 1, PageSize: 6, }) } canWatch := false episode := 0 if chapter != nil { canWatch = chapter.AllowWatch() episode = chapter.CurrentEpisode } if episode <= 0 { for i, item := range playlet.PlayletChapterInfo { if item.ID != chapterID { continue } episode = item.CurrentEpisode if episode <= 0 { episode = i + 1 } break } } if episode <= 0 { episode = 1 } previewURL := strings.TrimSpace(playlet.Preview) mainURL := "" if canWatch && chapter != nil { mainURL = strings.TrimSpace(chapter.VideoURL) } data := gin.H{ "title": title, "navActive": "list", "seoInfo": seo, "playlet": playlet, "chapter": chapter, "chapterID": chapterID, "episode": episode, "canWatch": canWatch, "mainURL": mainURL, "previewURL": previewURL, "hasPreview": previewURL != "", "nextChapterID": playletser.NextChapterID(playlet, chapterID), "advitise": playlet.Advitise, "related": playlet.RelatedRecommendData, "guessLike": guessLike.List, "guessPage": guessLike.PageNum, "guessPageSize": guessLike.PageSize, "guessTotal": guessLike.TotalCount, "hotList": hotList, "hotMoreURL": playletser.AllListURL("all", 0, 0, 2, 1), "playResponse": gin.H{ "playlet": playlet, "chapter": chapter, "chapterID": chapterID, "canWatch": canWatch, "mainURL": mainURL, "previewURL": previewURL, "hasPreview": previewURL != "", "guessLike": guessLike, "hotList": hotList, }, } data["canonicalPath"] = playletser.PlayPath(playlet.Slug, playlet.ID) HTMLOK(c, "play.html", data) } // SeriesPlay 视频播放页:GET /api/app/video/detail。 // 文档:http://172.104.181.99:25319/swagger/index.html#/视频相关接口/get_api_app_video_detail func SeriesPlay(c *gin.Context) { if c.Request.URL.Query().Has("guessPage") { NotFound(c) return } key := c.Param("slug") video := videoser.FetchVideoDetailOrNilByKey(c, key) if video == nil { NotFound(c) return } title := videoser.ResolveVideoPageTitle(video) if title == "" { title = "在线播放 - 黄果短剧" } else { title = title + " - 黄果短剧" } cover := video.CoverImg if cover == "" { cover = video.Video.Cover } videoURL := strings.TrimSpace(video.Video.URL) canWatch := videoURL != "" hot := playletser.FetchAllListOrEmpty(c, playletser.AllListQuery{ PageNum: 1, PageSize: 8, SortType: 2, // 最热 UpdateStatus: 0, // 全部 }) hotList := []playletser.CommonData(nil) if hot != nil { hotList = hot.List } // 视频详情无 recommendVideos:猜你喜欢与 play.html 一致,走短剧同题材推荐。 // 以热榜首部短剧为种子 playletId(排除该剧本身)。 guessPlayletID := int64(0) if len(hotList) > 0 { guessPlayletID = hotList[0].ID } guessPage := playletser.ParseGuessLikePage(c) guessLike := playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{ PlayletID: guessPlayletID, PageNum: guessPage, PageSize: 6, }) if len(guessLike.List) == 0 && guessPage > 1 { guessLike = playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{ PlayletID: guessPlayletID, PageNum: 1, PageSize: 6, }) } data := gin.H{ "title": title, "navActive": "aiSeries", "seoInfo": video.SeoInfo, "video": video, "videoID": video.ID, "videoSlug": video.Slug, "cover": cover, "videoURL": videoURL, "canWatch": canWatch, "guessLike": guessLike.List, "guessPage": guessLike.PageNum, "guessPageSize": guessLike.PageSize, "guessTotal": guessLike.TotalCount, "guessPlayletID": guessPlayletID, "advitise": video.Advitise, "hotList": hotList, "hotMoreURL": playletser.AllListURL("all", 0, 0, 2, 1), "videoResponse": gin.H{ "video": video, "videoURL": videoURL, "canWatch": canWatch, "hotList": hotList, "guessLike": guessLike, "guessPlayletID": guessPlayletID, }, "playDebug": gin.H{ "canWatch": canWatch, "videoURL": videoURL, "cover": cover, "videoTime": video.Video.VideoTime, }, } if strings.TrimSpace(c.Param("guessPage")) != "" { data["canonicalPath"] = videoser.VideoPlayURL(video.Slug, video.ID) } HTMLOK(c, "seriesPlay.html", data) }