Anime ratings
This commit is contained in:
94
jobs/anime-ratings/main.go
Normal file
94
jobs/anime-ratings/main.go
Normal file
@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/animenotifier/arn"
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
var ratings = map[string][]*arn.AnimeRating{}
|
||||
var finalRating = map[string]*arn.AnimeRating{}
|
||||
|
||||
// Note this is using the airing-anime as a template with modfications
|
||||
// made to it.
|
||||
func main() {
|
||||
color.Yellow("Updating anime ratings")
|
||||
|
||||
allAnimeLists, err := arn.AllAnimeLists()
|
||||
arn.PanicOnError(err)
|
||||
|
||||
for _, animeList := range allAnimeLists {
|
||||
extractRatings(animeList)
|
||||
}
|
||||
|
||||
// Calculate
|
||||
for animeID := range finalRating {
|
||||
overall := []float64{}
|
||||
story := []float64{}
|
||||
visuals := []float64{}
|
||||
soundtrack := []float64{}
|
||||
|
||||
for _, rating := range ratings[animeID] {
|
||||
if rating.Overall != 0 {
|
||||
overall = append(overall, rating.Overall)
|
||||
}
|
||||
|
||||
if rating.Story != 0 {
|
||||
story = append(story, rating.Story)
|
||||
}
|
||||
|
||||
if rating.Visuals != 0 {
|
||||
visuals = append(visuals, rating.Visuals)
|
||||
}
|
||||
|
||||
if rating.Soundtrack != 0 {
|
||||
soundtrack = append(soundtrack, rating.Soundtrack)
|
||||
}
|
||||
}
|
||||
|
||||
finalRating[animeID].Overall = average(overall)
|
||||
finalRating[animeID].Story = average(story)
|
||||
finalRating[animeID].Visuals = average(visuals)
|
||||
finalRating[animeID].Soundtrack = average(soundtrack)
|
||||
}
|
||||
|
||||
// Save
|
||||
for animeID := range finalRating {
|
||||
anime, err := arn.GetAnime(animeID)
|
||||
arn.PanicOnError(err)
|
||||
anime.Rating = finalRating[animeID]
|
||||
arn.PanicOnError(anime.Save())
|
||||
}
|
||||
|
||||
color.Green("Finished.")
|
||||
}
|
||||
|
||||
func average(floatSlice []float64) float64 {
|
||||
if len(floatSlice) == 0 {
|
||||
return arn.DefaultAverageRating
|
||||
}
|
||||
|
||||
var sum float64
|
||||
|
||||
for _, value := range floatSlice {
|
||||
sum += value
|
||||
}
|
||||
|
||||
return sum / float64(len(floatSlice))
|
||||
}
|
||||
|
||||
func extractRatings(animeList *arn.AnimeList) {
|
||||
for _, item := range animeList.Items {
|
||||
if item.Rating.IsNotRated() {
|
||||
continue
|
||||
}
|
||||
|
||||
_, found := ratings[item.AnimeID]
|
||||
|
||||
if !found {
|
||||
ratings[item.AnimeID] = []*arn.AnimeRating{}
|
||||
finalRating[item.AnimeID] = &arn.AnimeRating{}
|
||||
}
|
||||
|
||||
ratings[item.AnimeID] = append(ratings[item.AnimeID], item.Rating)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user