Added anime popularity
This commit is contained in:
parent
3caad5cb0d
commit
831c6118d9
@ -7,7 +7,12 @@ import (
|
|||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
const currentlyAiringBonus = 4.0
|
const (
|
||||||
|
currentlyAiringBonus = 4.0
|
||||||
|
popularityThreshold = 5
|
||||||
|
popularityPenalty = 4.0
|
||||||
|
watchingPopularityWeight = 0.1
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
color.Yellow("Caching airing anime")
|
color.Yellow("Caching airing anime")
|
||||||
@ -21,17 +26,30 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sort.Slice(animeList, func(i, j int) bool {
|
sort.Slice(animeList, func(i, j int) bool {
|
||||||
scoreA := animeList[i].Rating.Overall
|
a := animeList[i]
|
||||||
scoreB := animeList[j].Rating.Overall
|
b := animeList[j]
|
||||||
|
scoreA := a.Rating.Overall
|
||||||
|
scoreB := b.Rating.Overall
|
||||||
|
|
||||||
if animeList[i].Status == "current" {
|
if a.Status == "current" {
|
||||||
scoreA += currentlyAiringBonus
|
scoreA += currentlyAiringBonus
|
||||||
}
|
}
|
||||||
|
|
||||||
if animeList[j].Status == "current" {
|
if b.Status == "current" {
|
||||||
scoreB += currentlyAiringBonus
|
scoreB += currentlyAiringBonus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if a.Popularity.Total() < popularityThreshold {
|
||||||
|
scoreA -= popularityPenalty
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.Popularity.Total() < popularityThreshold {
|
||||||
|
scoreB -= popularityPenalty
|
||||||
|
}
|
||||||
|
|
||||||
|
scoreA += float64(a.Popularity.Watching) * watchingPopularityWeight
|
||||||
|
scoreB += float64(b.Popularity.Watching) * watchingPopularityWeight
|
||||||
|
|
||||||
return scoreA > scoreB
|
return scoreA > scoreB
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
var ratings = map[string][]*arn.AnimeRating{}
|
var ratings = map[string][]*arn.AnimeRating{}
|
||||||
var finalRating = map[string]*arn.AnimeRating{}
|
var finalRating = map[string]*arn.AnimeRating{}
|
||||||
|
var popularity = map[string]*arn.AnimePopularity{}
|
||||||
|
|
||||||
// Note this is using the airing-anime as a template with modfications
|
// Note this is using the airing-anime as a template with modfications
|
||||||
// made to it.
|
// made to it.
|
||||||
@ -18,9 +19,10 @@ func main() {
|
|||||||
|
|
||||||
for _, animeList := range allAnimeLists {
|
for _, animeList := range allAnimeLists {
|
||||||
extractRatings(animeList)
|
extractRatings(animeList)
|
||||||
|
extractPopularity(animeList)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate
|
// Calculate rating
|
||||||
for animeID := range finalRating {
|
for animeID := range finalRating {
|
||||||
overall := []float64{}
|
overall := []float64{}
|
||||||
story := []float64{}
|
story := []float64{}
|
||||||
@ -59,6 +61,14 @@ func main() {
|
|||||||
arn.PanicOnError(anime.Save())
|
arn.PanicOnError(anime.Save())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save popularity
|
||||||
|
for animeID := range popularity {
|
||||||
|
anime, err := arn.GetAnime(animeID)
|
||||||
|
arn.PanicOnError(err)
|
||||||
|
anime.Popularity = popularity[animeID]
|
||||||
|
arn.PanicOnError(anime.Save())
|
||||||
|
}
|
||||||
|
|
||||||
color.Green("Finished.")
|
color.Green("Finished.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,3 +102,28 @@ func extractRatings(animeList *arn.AnimeList) {
|
|||||||
ratings[item.AnimeID] = append(ratings[item.AnimeID], item.Rating)
|
ratings[item.AnimeID] = append(ratings[item.AnimeID], item.Rating)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func extractPopularity(animeList *arn.AnimeList) {
|
||||||
|
for _, item := range animeList.Items {
|
||||||
|
_, found := popularity[item.AnimeID]
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
popularity[item.AnimeID] = &arn.AnimePopularity{}
|
||||||
|
}
|
||||||
|
|
||||||
|
counter := popularity[item.AnimeID]
|
||||||
|
|
||||||
|
switch item.Status {
|
||||||
|
case arn.AnimeListStatusWatching:
|
||||||
|
counter.Watching++
|
||||||
|
case arn.AnimeListStatusCompleted:
|
||||||
|
counter.Completed++
|
||||||
|
case arn.AnimeListStatusPlanned:
|
||||||
|
counter.Planned++
|
||||||
|
case arn.AnimeListStatusHold:
|
||||||
|
counter.Hold++
|
||||||
|
case arn.AnimeListStatusDropped:
|
||||||
|
counter.Dropped++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -111,6 +111,11 @@ func sync(data *kitsu.Anime) *arn.Anime {
|
|||||||
anime.Rating.Reset()
|
anime.Rating.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Popularity
|
||||||
|
if anime.Popularity == nil {
|
||||||
|
anime.Popularity = &arn.AnimePopularity{}
|
||||||
|
}
|
||||||
|
|
||||||
// Trailers
|
// Trailers
|
||||||
anime.Trailers = []*arn.ExternalMedia{}
|
anime.Trailers = []*arn.ExternalMedia{}
|
||||||
|
|
||||||
|
@ -2,4 +2,4 @@ component AnimeGrid(animeList []*arn.Anime)
|
|||||||
.anime-grid
|
.anime-grid
|
||||||
each anime in animeList
|
each anime in animeList
|
||||||
a.anime-grid-cell.ajax(href="/anime/" + toString(anime.ID))
|
a.anime-grid-cell.ajax(href="/anime/" + toString(anime.ID))
|
||||||
img.anime-grid-image.lazy(data-src=anime.Image.Small, alt=anime.Title.Romaji, title=anime.Title.Romaji + " (" + toString(anime.Rating.Overall) + ")")
|
img.anime-grid-image.lazy(data-src=anime.Image.Small, alt=anime.Title.Romaji, title=anime.Title.Romaji)
|
@ -169,6 +169,24 @@ component Anime(anime *arn.Anime, friends []*arn.User, listItems map[*arn.User]*
|
|||||||
if character.Character() != nil
|
if character.Character() != nil
|
||||||
Character(character.Character())
|
Character(character.Character())
|
||||||
|
|
||||||
|
h3.anime-section-name Popularity
|
||||||
|
.anime-rating-categories
|
||||||
|
.anime-rating-category
|
||||||
|
.anime-rating-category-name Watching
|
||||||
|
.anime-rating= anime.Popularity.Watching
|
||||||
|
.anime-rating-category
|
||||||
|
.anime-rating-category-name Completed
|
||||||
|
.anime-rating= anime.Popularity.Completed
|
||||||
|
.anime-rating-category
|
||||||
|
.anime-rating-category-name Planned
|
||||||
|
.anime-rating= anime.Popularity.Planned
|
||||||
|
.anime-rating-category
|
||||||
|
.anime-rating-category-name Hold
|
||||||
|
.anime-rating= anime.Popularity.Hold
|
||||||
|
.anime-rating-category
|
||||||
|
.anime-rating-category-name Dropped
|
||||||
|
.anime-rating= anime.Popularity.Dropped
|
||||||
|
|
||||||
if len(anime.Episodes().Items) > 0
|
if len(anime.Episodes().Items) > 0
|
||||||
if episodesReversed
|
if episodesReversed
|
||||||
h3.anime-section-name Latest episodes
|
h3.anime-section-name Latest episodes
|
||||||
|
16
patches/add-popularity/add-popularity.go
Normal file
16
patches/add-popularity/add-popularity.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/animenotifier/arn"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
for anime := range arn.MustStreamAnime() {
|
||||||
|
if anime.Popularity != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
anime.Popularity = &arn.AnimePopularity{}
|
||||||
|
arn.PanicOnError(anime.Save())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user