fixed performance

This commit is contained in:
David Alasow 2018-11-29 15:31:10 +01:00
parent a53fff7391
commit e077d0484b
1 changed files with 58 additions and 20 deletions

78
main.go
View File

@ -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
}