GoGronkh/gparser/authorparser.go

117 lines
3.9 KiB
Go

package main
import (
"log"
"net/url"
"path"
"github.com/PuerkitoBio/goquery"
"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() {
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)
})
wg.Wait()
}
func ParseAuthor(i int, s *goquery.Selection) {
defer wg.Done()
u, _ := s.Attr("href")
ur, _ := url.Parse(u)
slug := path.Base(ur.Path)
var count int
if database.Db.Model(database.Author{}).Unscoped().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)
}
}
// Update authors
func UpdateAuthors() {
var ATs []database.Author
var count int
database.Db.Find(&ATs).Count(&count)
for _, AT := range ATs {
wg.Add(1)
go UpdateAuthor(AT)
}
wg.Wait()
}
func UpdateAuthor(AT database.Author) {
defer wg.Done()
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)
}
}