commit cb06b74d174c861c55f1f40126a50a5985246eea Author: Tracreed Date: Tue Nov 27 13:46:50 2018 +0100 stuff diff --git a/main.go b/main.go new file mode 100644 index 0000000..e262de1 --- /dev/null +++ b/main.go @@ -0,0 +1,127 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "git.fuyu.moe/Fuyu/router" + "io/ioutil" + "net/http" + "strconv" +) + +func main() { + //fmt.Println("Hello world") + r := router.New() + r.GET(`/`, home) + r.GET(`/compare/:user`, compare) + r.Start(`:8080`) +} + +type jikanAPIUserList struct { + RequestHash string `json:"request_hash"` + RequestCached bool `json:"request_cached"` + RequestCacheExpiry int `json:"request_cache_expiry"` + Completed int `json:"completed"` + Watching int `json:"watching"` + Dropped int `json:"dropped"` + PlanToWatch int `json:"plan_to_watch"` + OnHold int `json:"on_hold"` + Anime []jikanAPIAnime `json:"anime"` +} + +type jikanAPIAnime struct { + MalID int `json:"mal_id"` + Title string `json:"title"` + ImageURL string `json:"image_url"` + Type string `json:"type"` + WatchingStatus int `json:"watching_status"` + Score int `json:"score"` + WatchedEpisodes int `json:"watched_episodes"` + TotalEpisodes int `json:"total_episodes"` + MeikanID int `json:"meikan_id"` +} + +type meikanAPIIDs struct { + MeikanID int `json:"meikan"` + MyanimelistID int `json:"myanimelist"` + AnidbID int `json:"anidb"` +} + +func check(e error) { + if e != nil { + panic(e) + } +} + +func home(c *router.Context) error { + return c.String(200, "Test") +} + +func compare(c *router.Context) error { + user := c.Param(`user`) + //https://api.jikan.moe/v3/user/nekomata1037/animelist/all + //https://api.meikan.moe/v1/ids/anime + jikanList := jikanAPIGetUserAnimelist(user) + //fmt.Println(result) + IDs := meikanAPIGetIDs() + for i := 0; i < len(jikanList.Anime); i++ { + //fmt.Println(result.Anime[i].Title) + for d := 0; d < len(IDs); d++ { + if jikanList.Anime[i].MalID == IDs[d].MyanimelistID { + jikanList.Anime[i].MeikanID = IDs[d].MeikanID + } + } + if jikanList.Anime[i].WatchingStatus == 1 { + jikanList.Watching++ + } else if jikanList.Anime[i].WatchingStatus == 2 { + jikanList.Completed++ + } else if jikanList.Anime[i].WatchingStatus == 3 { + jikanList.OnHold++ + } else if jikanList.Anime[i].WatchingStatus == 4 { + jikanList.Dropped++ + } else if jikanList.Anime[i].WatchingStatus == 6 { + jikanList.PlanToWatch++ + } + } + //resJSON, err := json.MarshalIndent(result, "", "\t") + //check(err) + //jsonfile := []byte(resJSON) + return c.JSON(200, jikanList) +} + +func jikanAPIGetUserAnimelist(user string) jikanAPIUserList { + var result jikanAPIUserList + for i := 1; ; i++ { + resp, err := http.Get("https://api.jikan.moe/v3/user/" + user + "/animelist/all/" + strconv.Itoa(i)) + check(err) + defer resp.Body.Close() + var tempResult jikanAPIUserList + body, err := ioutil.ReadAll(resp.Body) + check(err) + if i == 1 { + _ = json.NewDecoder(bytes.NewReader(body)).Decode(&result) + fmt.Println("Searching page 1") + continue + } else { + _ = json.NewDecoder(bytes.NewReader(body)).Decode(&tempResult) + result.Anime = append(result.Anime, tempResult.Anime...) + fmt.Println("Searching page " + strconv.Itoa(i)) + } + if len(tempResult.Anime) == 0 { + break + } + } + return result +} + +func meikanAPIGetIDs() []meikanAPIIDs { + resp, err := http.Get("https://api.meikan.moe/v1/ids/anime") + check(err) + defer resp.Body.Close() + var result []meikanAPIIDs + body, err := ioutil.ReadAll(resp.Body) + check(err) + _ = json.NewDecoder(bytes.NewReader(body)).Decode(&result) + return result +}