package main import ( "log" "net/url" "path" "github.com/PuerkitoBio/goquery" "github.com/cheggaaa/pb" "git.1750studios.com/gronkhDE/gogronkh/config" "git.1750studios.com/gronkhDE/gogronkh/database" "git.1750studios.com/gronkhDE/gogronkh/image" "git.1750studios.com/gronkhDE/gogronkh/youtube" ) // Parse new authors func ParseAuthors() { bar := pb.StartNew(0) res, err := GetHTTPResource(config.C.GronkhUrl + "/lets-player") if err != nil { log.Printf("ERR AT Page: Request failed (%+v)", err) return } doc, err := goquery.NewDocumentFromResponse(res) if err != nil { log.Printf("ERR AT Page: Document failure (%+v)", err) return } // Parse the Episodes doc.Find("div.column > a").Each(func(i int, s *goquery.Selection) { wg.Add(1) go ParseAuthor(i, s, bar) }) wg.Wait() bar.FinishPrint("Parsed authors") } func ParseAuthor(i int, s *goquery.Selection, bar *pb.ProgressBar) { defer wg.Done() if bar != nil { defer bar.Increment() } u, _ := s.Attr("href") ur, _ := url.Parse(u) slug := path.Base(ur.Path) var count int if database.Db.Model(database.Author{}).Where("slug = ?", slug).Count(&count); count > 0 { return } var AT database.Author AT.Slug.String = slug AT.Name.String, _ = s.Attr("title") res, err := GetHTTPResource(config.C.GronkhUrl + u) if err != nil { log.Printf("ERR AT %s: Request failed (%+v)", slug, err) return } doc, err := goquery.NewDocumentFromResponse(res) if err != nil { log.Printf("ERR AT %s: Document failure (%+v)", slug, err) return } if AT.Name.String == "Honeyball" { AT.Youtube.String = "UCwF-rMpz0gbgWZIbrgGXuGQ" } else { ytna, _ := doc.Find("iframe#fr").Attr("src") ytn, _ := url.Parse(ytna) ytname := ytn.Query().Get("p") AT.Youtube.String, _ = youtube.GetChannelId(ytname, config.C.YoutubeKey) } ytres, _ := youtube.GetChannel([]string {"snippet", "brandingSettings"}, AT.Youtube.String, config.C.YoutubeKey) AT.AvatarS.String, AT.AvatarB.String, err = image.ResizeAvatar(ytres.Items[0].Snippet.Thumbnails["high"].Url) if err != nil { log.Printf("WAR AT %s: Error resizing avatar: %+v", slug, err) } if fa, ok := ytres.Items[0].BrandingSettings.Image["bannerTvHighImageUrl"]; ok { AT.FanArtS.String, AT.FanArtB.String, err = image.ResizeFanArt(fa) } else if fa, ok := ytres.Items[0].BrandingSettings.Image["bannerTvImageUrl"]; ok { AT.FanArtS.String, AT.FanArtB.String, err = image.ResizeFanArt(fa) } if err != nil { log.Printf("WAR AT %s: Error resizing fanart: %+v", slug, err) } if err := database.Db.Create(&AT).Error; err != nil { log.Printf("ERR AT %s: Could not be added to databse (%+v)", slug, err) } else { log.Printf("SUC AT %s: Added to database", slug) } } // Update authors func UpdateAuthors() { var ATs []database.Author var count int database.Db.Find(&ATs).Count(&count) bar := pb.StartNew(count) for _, AT := range ATs { wg.Add(1) go UpdateAuthor(AT, bar) } wg.Wait() bar.FinishPrint("Updated authors") } func UpdateAuthor(AT database.Author, bar *pb.ProgressBar) { defer wg.Done() if bar != nil { defer bar.Increment() } ytres, err := youtube.GetChannel([]string {"snippet", "brandingSettings"}, AT.Youtube.String, config.C.YoutubeKey) AT.AvatarS.String, AT.AvatarB.String, err = image.ResizeAvatar(ytres.Items[0].Snippet.Thumbnails["high"].Url) if err != nil { log.Printf("WAR AT %s: Error resizing avatar: %+v", AT.Slug.String, err) } if fa, ok := ytres.Items[0].BrandingSettings.Image["bannerTvHighImageUrl"]; ok { AT.FanArtS.String, AT.FanArtB.String, err = image.ResizeFanArt(fa) } else if fa, ok := ytres.Items[0].BrandingSettings.Image["bannerTvImageUrl"]; ok { AT.FanArtS.String, AT.FanArtB.String, err = image.ResizeFanArt(fa) } if err != nil { log.Printf("WAR AT %s: Error resizing fanart: %+v", AT.Slug.String, err) } if err := database.Db.Save(&AT).Error; err != nil { log.Printf("ERR AT %s: Could not be updated in database (%+v)", AT.Slug.String, err) } else { log.Printf("SUC AT %s: Updated in database", AT.Slug.String) } }