From a5a96fe4673048d49f8f14665e4065e199b1179b Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Mon, 14 Feb 2022 22:28:04 +0530 Subject: Added functionality to get authenticated user's info. More details to be added later --- user/client.go | 27 +++++++++++++++++++++++++++ user/request_handler.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ user/user.go | 36 ++++++++++++++++++++++++++++++++++++ user/user.structs.go | 30 ++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 user/client.go create mode 100644 user/request_handler.go create mode 100644 user/user.go create mode 100644 user/user.structs.go diff --git a/user/client.go b/user/client.go new file mode 100644 index 0000000..7d5b800 --- /dev/null +++ b/user/client.go @@ -0,0 +1,27 @@ +/* MAL2Go - MyAnimeList V2 API wrapper for Go + * Copyright (C) 2022 Vidhu Kant Sharma + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +package user + +import ( + "net/http" +) + +// MyAnimeList Client for mal2go/anime package +type MALUserClient struct { + AuthToken, RefreshToken string + HttpClient http.Client +} diff --git a/user/request_handler.go b/user/request_handler.go new file mode 100644 index 0000000..da8c5f7 --- /dev/null +++ b/user/request_handler.go @@ -0,0 +1,48 @@ +/* MAL2Go - MyAnimeList V2 API wrapper for Go + * Copyright (C) 2022 Vidhu Kant Sharma + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +package user + +import ( + "io/ioutil" + "log" + "net/http" +) + +// Handles HTTP request with your OAuth token as a Header +func (c MALUserClient) requestHandler(endpoint string) string { + // generate request + req, err := http.NewRequest("GET", endpoint, nil) + if err != nil { + log.Fatal(err) + } + req.Header.Add("Authorization", c.AuthToken) + + // do request + res, err := c.HttpClient.Do(req) + if err != nil { + log.Fatal(err) + } + defer res.Body.Close() + + // read body + body, err := ioutil.ReadAll(res.Body) + if err != nil { + log.Fatal(err) + } + + return string(body) +} diff --git a/user/user.go b/user/user.go new file mode 100644 index 0000000..31ac8dc --- /dev/null +++ b/user/user.go @@ -0,0 +1,36 @@ +/* MAL2Go - MyAnimeList V2 API wrapper for Go + * Copyright (C) 2022 Vidhu Kant Sharma + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +package user + +import ( + "encoding/json" +) + +const BASE_URL string = "https://api.myanimelist.net/v2/users" + +// Get info of logged in user +func (c *MALUserClient) GetSelfUserInfo() UserInfo { + /* MAL only supports @me for this */ + endpoint := BASE_URL + "/@me?fields=anime_statistics" + + // get data from API + var userData UserInfo + data := c.requestHandler(endpoint) + json.Unmarshal([]byte(data), &userData) + + return userData +} diff --git a/user/user.structs.go b/user/user.structs.go new file mode 100644 index 0000000..b730033 --- /dev/null +++ b/user/user.structs.go @@ -0,0 +1,30 @@ +/* MAL2Go - MyAnimeList V2 API wrapper for Go + * Copyright (C) 2022 Vidhu Kant Sharma + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +package user + +type UserInfo struct { + Id int `json:"id"` + Name string `json:"name"` + Picture string `json:"picture"` + Gender string `json:"gender"` + Birthday string `json:"birthday"` + Location string `json:"location"` + JoinedAt string `json:"joined_at"` + // TODO: Add AnimeStatistics + TimeZone string `json:"time_zone"` + IsSupporter bool `json:"is_supporter"` +} -- cgit v1.2.3