feat: ✨ add title to tvshow
This commit is contained in:
parent
e332660f24
commit
bcbb02a663
@ -12,11 +12,12 @@ func (hq *Handlers) GetTVShow(c *gin.Context) {
|
|||||||
ttShowID := c.Query("ttid")
|
ttShowID := c.Query("ttid")
|
||||||
slog.Info("GetTVShow", "ttid", ttShowID)
|
slog.Info("GetTVShow", "ttid", ttShowID)
|
||||||
|
|
||||||
seasons := scraper.ScrapeSeasons(ttShowID)
|
title, seasons := scraper.ScrapeSeasons(ttShowID)
|
||||||
|
|
||||||
slog.Info("scraped seasons", "ttid", ttShowID)
|
slog.Info("scraped seasons", "ttid", ttShowID, "title", title)
|
||||||
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"title": title,
|
||||||
"seasons": seasons,
|
"seasons": seasons,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,20 +24,29 @@ type Episode struct {
|
|||||||
|
|
||||||
type Season []Episode
|
type Season []Episode
|
||||||
|
|
||||||
const seasonsSelector = "ul.ipc-tabs a[data-testid='tab-season-entry']"
|
const (
|
||||||
const episodesSelector = "section.sc-1e7f96be-0.ZaQIL"
|
titleSelector = "h2.sc-b8cc654b-9.dmvgRY"
|
||||||
const nextSeasonButtonSelector = "#next-season-btn"
|
seasonsSelector = "ul.ipc-tabs a[data-testid='tab-season-entry']"
|
||||||
const imdbEpisodesURL = "https://www.imdb.com/title/%s/episodes?season=%d"
|
episodesSelector = "section.sc-1e7f96be-0.ZaQIL"
|
||||||
|
nextSeasonButtonSelector = "#next-season-btn"
|
||||||
|
imdbEpisodesURL = "https://www.imdb.com/title/%s/episodes?season=%d"
|
||||||
|
visitURL = "https://www.imdb.com/title/%s/episodes"
|
||||||
|
)
|
||||||
|
|
||||||
func ScrapeSeasons(ttImdb string) []Season {
|
func ScrapeSeasons(ttImdb string) (string, []Season) {
|
||||||
c := colly.NewCollector(
|
c := colly.NewCollector(
|
||||||
colly.AllowedDomains("imdb.com", "www.imdb.com"),
|
colly.AllowedDomains("imdb.com", "www.imdb.com"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
c.OnRequest(func(r *colly.Request) {
|
||||||
|
r.Headers.Set("Accept-Language", "en-US")
|
||||||
|
})
|
||||||
|
|
||||||
var allSeasons []Season
|
var allSeasons []Season
|
||||||
var seasons []int
|
var seasons []int
|
||||||
|
var title string
|
||||||
|
|
||||||
c.OnHTML("ul.ipc-tabs a[data-testid='tab-season-entry']", func(e *colly.HTMLElement) {
|
c.OnHTML(seasonsSelector, func(e *colly.HTMLElement) {
|
||||||
seasonText := strings.TrimSpace(e.Text)
|
seasonText := strings.TrimSpace(e.Text)
|
||||||
seasonNum, err := strconv.Atoi(seasonText)
|
seasonNum, err := strconv.Atoi(seasonText)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -45,6 +54,10 @@ func ScrapeSeasons(ttImdb string) []Season {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
c.OnHTML(titleSelector, func(e *colly.HTMLElement) {
|
||||||
|
title = e.Text
|
||||||
|
})
|
||||||
|
|
||||||
c.OnScraped(func(r *colly.Response) {
|
c.OnScraped(func(r *colly.Response) {
|
||||||
seasonMap := make(map[int]bool)
|
seasonMap := make(map[int]bool)
|
||||||
uniqueSeasons := []int{}
|
uniqueSeasons := []int{}
|
||||||
@ -75,10 +88,10 @@ func ScrapeSeasons(ttImdb string) []Season {
|
|||||||
episodeCollector.Wait()
|
episodeCollector.Wait()
|
||||||
})
|
})
|
||||||
|
|
||||||
c.Visit(fmt.Sprintf("https://www.imdb.com/title/%s/episodes", ttImdb))
|
c.Visit(fmt.Sprintf(visitURL, ttImdb))
|
||||||
c.Wait()
|
c.Wait()
|
||||||
|
|
||||||
return allSeasons
|
return title, allSeasons
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractEpisodesFromSeason(data string) Season {
|
func extractEpisodesFromSeason(data string) Season {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user