64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/animenotifier/jikan"
|
|
|
|
"github.com/animenotifier/arn"
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
var jikanDB = arn.Node.Namespace("jikan")
|
|
|
|
func main() {
|
|
color.Yellow("Syncing characters with Jikan API")
|
|
defer arn.Node.Close()
|
|
|
|
allAnime := jikanDB.All("Anime")
|
|
|
|
count := 0
|
|
|
|
for animeObj := range allAnime {
|
|
anime := animeObj.(*jikan.Anime)
|
|
|
|
if len(anime.Character) == 0 {
|
|
continue
|
|
}
|
|
|
|
fmt.Println(anime.Title)
|
|
|
|
for _, character := range anime.Character {
|
|
characterID := jikan.GetCharacterIDFromURL(character.URL)
|
|
|
|
if characterID == "" {
|
|
fmt.Println("Invalid character ID")
|
|
continue
|
|
}
|
|
|
|
fetchCharacter(characterID)
|
|
}
|
|
}
|
|
|
|
color.Green("Finished syncing %d characters.", count)
|
|
}
|
|
|
|
func fetchCharacter(malCharacterID string) {
|
|
fmt.Printf("Fetching character ID %s\n", malCharacterID)
|
|
|
|
if jikanDB.Exists("Character", malCharacterID) {
|
|
return
|
|
}
|
|
|
|
time.Sleep(500 * time.Millisecond)
|
|
character, err := jikan.GetCharacter(malCharacterID)
|
|
|
|
if err == nil {
|
|
jikanDB.Set("Character", malCharacterID, character)
|
|
return
|
|
}
|
|
|
|
fmt.Printf("Error fetching %s: %v\n", malCharacterID, err)
|
|
}
|