diff --git a/main.go b/main.go index 35a3931..c50a7a0 100644 --- a/main.go +++ b/main.go @@ -6,16 +6,23 @@ import ( "fmt" "git.fuyu.moe/Fuyu/router" "io/ioutil" + "mime" "net/http" + "path" + "path/filepath" "strconv" + "strings" + "time" ) func main() { //fmt.Println("Hello world") r := router.New() + r.GET(`/static/*asset`, getStatic) r.GET(`/`, home) r.GET(`/compare/:user`, compare) - r.Start(`:8070`) + err := r.Start(`:8070`) + check(err) } type jikanAPIUserList struct { @@ -40,25 +47,25 @@ type jikanAPIAnime struct { Score int `json:"score"` WatchedEpisodes int `json:"watched_episodes"` TotalEpisodes int `json:"total_episodes"` - AiringStatus int `json:"airing_status"` + AiringStatus int `json:"airing_status"` } type meikanListItem struct { - Anime meikanAnime `json:"anime"` - State string `json:"state"` - Episode int `json:"episode"` - Rating int `json:"rating"` - Hidden bool `json:"hidden"` - Recommended bool `json:"recommend"` + Anime meikanAnime `json:"anime"` + State string `json:"state"` + Episode int `json:"episode"` + Rating int `json:"rating"` + Hidden bool `json:"hidden"` + Recommended bool `json:"recommend"` } type meikanAnime struct { - ID int `json:"id"` - Title string `json:"title"` - Type string `json:"type"` - Episodes int `json:"episodes"` - State string `json:"state"` - Rating string `json:"rating"` + ID int `json:"id"` + Title string `json:"title"` + Type string `json:"type"` + Episodes int `json:"episodes"` + State string `json:"state"` + Rating string `json:"rating"` } type meikanAPIIDs struct { @@ -78,13 +85,20 @@ func home(c *router.Context) error { } func compare(c *router.Context) error { + start := time.Now() user := c.Param(`user`) //https://api.jikan.moe/v3/user/nekomata1037/animelist/all //https://api.meikan.moe/v1/ids/anime jikanList := jikanAPIGetUserAnimelist(user) var anime []meikanListItem //fmt.Println(result) + fmt.Println("Getting IDs") IDs := meikanAPIGetIDs() + confMap := map[int]int{} + for _, v := range IDs { + confMap[v.MyanimelistID] = v.MeikanID + } + fmt.Printf("35248 is %d \n", confMap[35248]) for i := 0; i < len(jikanList.Anime); i++ { //fmt.Println(result.Anime[i].Title) for d := 0; d < len(IDs); d++ { @@ -93,11 +107,11 @@ func compare(c *router.Context) error { } } temp := meikanListItem{Anime: meikanAnime{ID: jikanList.Anime[i].MeikanID, - Title: jikanList.Anime[i].Title, - Type: jikanList.Anime[i].Type, + Title: jikanList.Anime[i].Title, + Type: jikanList.Anime[i].Type, Episodes: jikanList.Anime[i].TotalEpisodes}, Episode: jikanList.Anime[i].WatchedEpisodes, - Rating: jikanList.Anime[i].Score} + Rating: jikanList.Anime[i].Score} switch jikanList.Anime[i].WatchingStatus { case 1: jikanList.Completed++ @@ -125,11 +139,14 @@ func compare(c *router.Context) error { //resJSON, err := json.MarshalIndent(result, "", "\t") //check(err) //jsonfile := []byte(resJSON) - return c.JSON(200, jikanList) + elapsed := time.Since(start) + fmt.Printf("Generating json took %s\n", elapsed) + return c.JSON(200, anime) } func jikanAPIGetUserAnimelist(user string) jikanAPIUserList { var result jikanAPIUserList + start := time.Now() for i := 1; ; i++ { resp, err := http.Get("https://api.jikan.moe/v3/user/" + user + "/animelist/all/" + strconv.Itoa(i)) check(err) @@ -139,21 +156,26 @@ func jikanAPIGetUserAnimelist(user string) jikanAPIUserList { check(err) if i == 1 { _ = json.NewDecoder(bytes.NewReader(body)).Decode(&result) - fmt.Println("Searching page 1") + elapsed := time.Since(start) + fmt.Printf("Searching page 1 took %s\n", elapsed) continue } else { _ = json.NewDecoder(bytes.NewReader(body)).Decode(&tempResult) result.Anime = append(result.Anime, tempResult.Anime...) - fmt.Println("Searching page " + strconv.Itoa(i)) + elapsed := time.Since(start) + fmt.Printf("Searching page %d took %s\n", i, elapsed) } if len(tempResult.Anime) == 0 { break } + elapsed := time.Since(start) + fmt.Printf("Searching the userlist took %s\n", elapsed) } return result } func meikanAPIGetIDs() []meikanAPIIDs { + start := time.Now() resp, err := http.Get("https://api.meikan.moe/v1/ids/anime") check(err) defer resp.Body.Close() @@ -161,5 +183,21 @@ func meikanAPIGetIDs() []meikanAPIIDs { body, err := ioutil.ReadAll(resp.Body) check(err) _ = json.NewDecoder(bytes.NewReader(body)).Decode(&result) + elapsed := time.Since(start) + fmt.Printf("Getting all the IDs took %s\n", elapsed) return result } + +func getStatic(c *router.Context) error { + path := path.Clean(strings.TrimPrefix(c.Request.URL.Path, `/static/`)) + + data, err := ioutil.ReadFile(`./static/` + path) + if err != nil { + return c.String(404, `Resource not found`) + } + + c.Response.Header().Set(`Content-Type`, mime.TypeByExtension(filepath.Ext(path))) + c.Response.Write(data) + + return nil +}