Improved import
This commit is contained in:
@ -1,92 +1,29 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"fmt"
|
||||
|
||||
"github.com/animenotifier/arn"
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
var allAnime []*arn.Anime
|
||||
|
||||
func init() {
|
||||
allAnime, _ = arn.AllAnime()
|
||||
}
|
||||
|
||||
func main() {
|
||||
arn.PanicOnError(arn.AniList.Authorize())
|
||||
println(arn.AniList.AccessToken)
|
||||
color.Green(arn.AniList.AccessToken)
|
||||
|
||||
user, _ := arn.GetUserByNick("Boltasar")
|
||||
animeList, err := arn.AniList.GetAnimeList(user)
|
||||
allAnime, err := arn.AllAnime()
|
||||
arn.PanicOnError(err)
|
||||
|
||||
importList(animeList.Lists.Watching)
|
||||
importList(animeList.Lists.Completed)
|
||||
}
|
||||
count := 0
|
||||
stream := arn.AniList.StreamAnime()
|
||||
|
||||
func importList(animeListItems []*arn.AniListAnimeListItem) {
|
||||
imported := []*arn.Anime{}
|
||||
for aniListAnime := range stream {
|
||||
anime := arn.FindAniListAnime(aniListAnime, allAnime)
|
||||
|
||||
for _, item := range animeListItems {
|
||||
anime := findAniListAnime(item.Anime)
|
||||
if anime != nil {
|
||||
// fmt.Println(item.Anime.TitleRomaji, "=>", anime.Title.Romaji)
|
||||
imported = append(imported, anime)
|
||||
fmt.Println(aniListAnime.TitleRomaji, "=>", anime.Title.Canonical)
|
||||
}
|
||||
}
|
||||
|
||||
color.Green("%d / %d", len(imported), len(animeListItems))
|
||||
}
|
||||
|
||||
func findAniListAnime(search *arn.AniListAnime) *arn.Anime {
|
||||
match, err := arn.GetAniListToAnime(strconv.Itoa(search.ID))
|
||||
|
||||
if err == nil {
|
||||
anime, _ := arn.GetAnime(match.AnimeID)
|
||||
return anime
|
||||
}
|
||||
|
||||
var mostSimilar *arn.Anime
|
||||
var similarity float64
|
||||
|
||||
for _, anime := range allAnime {
|
||||
anime.Title.Japanese = strings.Replace(anime.Title.Japanese, "2ndシーズン", "2", 1)
|
||||
anime.Title.Romaji = strings.Replace(anime.Title.Romaji, " 2nd Season", " 2", 1)
|
||||
search.TitleJapanese = strings.TrimSpace(strings.Replace(search.TitleJapanese, "2ndシーズン", "2", 1))
|
||||
search.TitleRomaji = strings.TrimSpace(strings.Replace(search.TitleRomaji, " 2nd Season", " 2", 1))
|
||||
|
||||
titleSimilarity := arn.StringSimilarity(anime.Title.Romaji, search.TitleRomaji)
|
||||
|
||||
if strings.ToLower(anime.Title.Japanese) == strings.ToLower(search.TitleJapanese) {
|
||||
titleSimilarity += 1.0
|
||||
}
|
||||
|
||||
if strings.ToLower(anime.Title.Romaji) == strings.ToLower(search.TitleRomaji) {
|
||||
titleSimilarity += 1.0
|
||||
}
|
||||
|
||||
if strings.ToLower(anime.Title.English) == strings.ToLower(search.TitleEnglish) {
|
||||
titleSimilarity += 1.0
|
||||
}
|
||||
|
||||
if titleSimilarity > similarity {
|
||||
mostSimilar = anime
|
||||
similarity = titleSimilarity
|
||||
}
|
||||
}
|
||||
|
||||
if mostSimilar.EpisodeCount != search.TotalEpisodes {
|
||||
similarity -= 0.02
|
||||
}
|
||||
|
||||
if similarity >= 0.92 {
|
||||
// fmt.Printf("MATCH: %s => %s (%.2f)\n", search.TitleRomaji, mostSimilar.Title.Romaji, similarity)
|
||||
return mostSimilar
|
||||
}
|
||||
|
||||
color.Red("MISMATCH: %s => %s (%.2f)", search.TitleRomaji, mostSimilar.Title.Romaji, similarity)
|
||||
|
||||
return nil
|
||||
count++
|
||||
}
|
||||
}
|
||||
|
@ -1,73 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"strconv"
|
||||
|
||||
"github.com/animenotifier/arn"
|
||||
)
|
||||
|
||||
// OldMatch ...
|
||||
type OldMatch struct {
|
||||
ID int `json:"id"`
|
||||
ServiceID int `json:"providerId"`
|
||||
Title string `json:"title"`
|
||||
ServiceTitle string `json:"providerTitle"`
|
||||
Similarity float64 `json:"similarity"`
|
||||
Edited string `json:"edited"`
|
||||
EditedBy string `json:"editedBy"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
matches := []OldMatch{}
|
||||
data, _ := ioutil.ReadFile("MatchKitsu.json")
|
||||
json.Unmarshal(data, &matches)
|
||||
|
||||
for _, match := range matches {
|
||||
// Custom anime in 3.0
|
||||
if match.ID >= 1000000 {
|
||||
continue
|
||||
}
|
||||
|
||||
// New match type
|
||||
newMatch := &arn.AniListToAnime{
|
||||
AnimeID: strconv.Itoa(match.ServiceID),
|
||||
ServiceID: strconv.Itoa(match.ID),
|
||||
Similarity: match.Similarity,
|
||||
Edited: match.Edited,
|
||||
EditedBy: match.EditedBy,
|
||||
}
|
||||
|
||||
// Get anime
|
||||
anime, err := arn.GetAnime(newMatch.AnimeID)
|
||||
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if anime.GetMapping("anilist/anime") != "" {
|
||||
continue
|
||||
}
|
||||
|
||||
anime.Mappings = append(anime.Mappings, &arn.Mapping{
|
||||
Service: "anilist/anime",
|
||||
ServiceID: newMatch.ServiceID,
|
||||
Created: newMatch.Edited,
|
||||
CreatedBy: newMatch.EditedBy,
|
||||
})
|
||||
|
||||
// Save
|
||||
fmt.Println(anime.Title.Canonical)
|
||||
arn.PanicOnError(anime.Save())
|
||||
arn.PanicOnError(arn.DB.Set("AniListToAnime", newMatch.ServiceID, newMatch))
|
||||
}
|
||||
}
|
||||
|
||||
// AnilistToAnime
|
||||
/*
|
||||
AnimeID
|
||||
ServiceID
|
||||
|
||||
*/
|
Reference in New Issue
Block a user