From d6ac82fabf41521db282ddca44c463d0d19b1d62 Mon Sep 17 00:00:00 2001 From: Andreas Mieke Date: Sat, 27 Feb 2016 16:13:07 +0100 Subject: [PATCH] Adding CLI with add_lt mode --- gparser/cli.go | 103 ++++++++++++++++++++++++++++++++++++++++++++++++ gparser/main.go | 3 ++ 2 files changed, 106 insertions(+) create mode 100644 gparser/cli.go diff --git a/gparser/cli.go b/gparser/cli.go new file mode 100644 index 0000000..0310027 --- /dev/null +++ b/gparser/cli.go @@ -0,0 +1,103 @@ +package main + +import ( + "os" + "log" + "time" + "flag" + + "github.com/ChannelMeter/iso8601duration" + + "git.1750studios.com/gronkhDE/gogronkh/config" + "git.1750studios.com/gronkhDE/gogronkh/database" + "git.1750studios.com/gronkhDE/gogronkh/image" + "git.1750studios.com/gronkhDE/gogronkh/youtube" +) + +var mode string + +var slug string +var name string +var aslug string +var youtubeid string +var poster string + +func InitCli() { + flag.StringVar(&mode, "mode", "", "Specifies the action to be done. Can be add_lt and merge_lps") + + // For add_lt + flag.StringVar(&slug, "slug", "", "Slug as it would be on gronkh.de") + flag.StringVar(&name, "name", "", "Name as it would be on gronkh.de") + flag.StringVar(&aslug, "author", "", "Author slug") + flag.StringVar(&youtubeid, "youtube", "", "YouTube ID of the video") + flag.StringVar(&poster, "poster", "", "Poster URL that should be used") +} + +func DoCli() { + flag.Parse() + + if mode != "" { + if mode == "add_lt" { + if (slug == "" || name == "" || aslug == "" || youtubeid == "" || poster == "") { + log.Fatalf("slug, name, author, youtube, poster must be specified") + } + ParseCliLT() + } else if mode == "merge_lps" { + + } + os.Exit(0) + } +} + +func ParseCliLT() { + var err error + var LT database.LetsTest + LT.Slug.String = slug + LT.Name.String = name + LT.PosterS.String, LT.PosterB.String, err = image.ResizeCover(poster) + if err != nil { + log.Printf("WAR LT %s: Error resizing cover: %+v", slug, err) + } + + var AT database.Author + database.Db.Where("slug = ?", aslug).First(&AT) + LT.AuthorID = AT.ID + + LT.Youtube.String = youtubeid + ytres, err := youtube.GetVideos([]string {"snippet", "statistics", "status", "contentDetails"}, []string {LT.Youtube.String}, config.C.YoutubeKey) + if err != nil || len(ytres.Items) == 0 || ytres.Items[0].Status.UploadStatus != "processed" { + log.Printf("ERR LT %s: Video %s is private (%+v)", slug, LT.Youtube.String, err) + return + } + + LT.Descr.String = ytres.Items[0].Snippet.Description + + if thumb, ok := ytres.Items[0].Snippet.Thumbnails["maxres"]; ok { + LT.ThumbS.String, LT.ThumbB.String, err = image.ResizeThumb(thumb.Url) + } else if thumb, ok := ytres.Items[0].Snippet.Thumbnails["high"]; ok { + LT.ThumbS.String, LT.ThumbB.String, err = image.ResizeThumb(thumb.Url) + } + if err != nil { + log.Printf("WAR LT %s: Error resizing thumbnail: %+v", slug, err) + } + + LT.Aired, err = time.Parse(time.RFC3339Nano, ytres.Items[0].Snippet.PublishedAt) + if err != nil { + log.Printf("ERR LT %s: Failed to parse aired", slug) + return + } + + dur, err := duration.FromString(ytres.Items[0].ContentDetails.Duration) + if err == nil { + LT.Duration.Int64 = int64(dur.ToDuration().Seconds()) + } else { + log.Printf("ERR LT %s: Failed to parse duration", slug) + return + } + + LT.Rating.Float64, LT.Votes.Int64 = youtube.GetRatingAndVotesWithRes(ytres) + + if err := database.Db.Create(<).Error; err != nil { + log.Printf("ERR LT %s: Could not be added to databse (%+v)", slug, err) + } +} \ No newline at end of file diff --git a/gparser/main.go b/gparser/main.go index cfd4504..5a55827 100644 --- a/gparser/main.go +++ b/gparser/main.go @@ -35,6 +35,9 @@ func main() { err = database.InitDb(config.C.DatabaseConnection) + InitCli() + DoCli() + ParseAll() StartCron()