Initial commit

This commit is contained in:
The Foxon 2023-09-12 22:25:44 +12:00
commit 605652b0e3
20 changed files with 410 additions and 0 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"nuxt.isNuxtApp": false
}

23
anilibria/GetTeam.go Normal file
View File

@ -0,0 +1,23 @@
package anilibria
import (
"encoding/json"
"errors"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTeam() (team *model.Team, err error) {
reqBody, status, err := request("GET", "/v3/team", nil)
if status != 200 {
return nil, errors.New(errorFetchTeam)
}
if err = json.Unmarshal(reqBody, &team); err != nil {
return nil, err
}
return
}

View File

@ -0,0 +1,24 @@
package anilibria
import (
"encoding/json"
"errors"
"fmt"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleByCode(code string) (title *model.Title, err error) {
reqBody, status, err := request("GET", fmt.Sprintf("/v3/title?code=%s", code), nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &title); err != nil {
return nil, err
}
return
}

28
anilibria/GetTitleByID.go Normal file
View File

@ -0,0 +1,28 @@
package anilibria
import (
"encoding/json"
"errors"
"fmt"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleByID(id uint64) (title *model.Title, err error) {
if id == 0 {
return nil, errors.New(errorTitleIdIsZero)
}
reqBody, status, err := request("GET", fmt.Sprintf("/v3/title?id=%d", id), nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &title); err != nil {
return nil, err
}
return
}

View File

@ -0,0 +1,28 @@
package anilibria
import (
"encoding/json"
"errors"
"fmt"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleByTorrentID(id uint64) (title *model.Title, err error) {
if id == 0 {
return nil, errors.New(errorTitleIdIsZero)
}
reqBody, status, err := request("GET", fmt.Sprintf("/v3/title?torrent_id=%d", id), nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &title); err != nil {
return nil, err
}
return
}

View File

@ -0,0 +1,23 @@
package anilibria
import (
"encoding/json"
"errors"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleChanges() (titles *[]model.TitleList, err error) {
reqBody, status, err := request("GET", "/v3/title/changes", nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &titles); err != nil {
return nil, err
}
return
}

23
anilibria/GetTitleList.go Normal file
View File

@ -0,0 +1,23 @@
package anilibria
import (
"encoding/json"
"errors"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleList() (title *[]model.Title, err error) {
reqBody, status, err := request("GET", "/v3/title/list", nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &title); err != nil {
return nil, err
}
return
}

View File

@ -0,0 +1,23 @@
package anilibria
import (
"encoding/json"
"errors"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleRandom() (titles *model.TitleList, err error) {
reqBody, status, err := request("GET", "/v3/title/random", nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &titles); err != nil {
return nil, err
}
return
}

View File

@ -0,0 +1,23 @@
package anilibria
import (
"encoding/json"
"errors"
"git.thefoxon.ru/anilibria/anilibria-go/model"
)
func GetTitleUpdates() (titles *[]model.TitleList, err error) {
reqBody, status, err := request("GET", "/v3/title/updates", nil)
if status != 200 {
return nil, errors.New(errorFetchTitle)
}
if err = json.Unmarshal(reqBody, &titles); err != nil {
return nil, err
}
return
}

9
anilibria/errors.go Normal file
View File

@ -0,0 +1,9 @@
package anilibria
const (
// GetTitleErrors
errorFetchTitle = "Error fetch title"
errorTitleIdIsZero = "Error title ID is zero"
// GetTeamErrors
errorFetchTeam = "Error fetch team"
)

35
anilibria/request.go Normal file
View File

@ -0,0 +1,35 @@
package anilibria
import (
"fmt"
"io"
"net/http"
)
func request(method string, url string, body io.Reader) ([]byte, int, error) {
var err error
var req *http.Request
var res *http.Response
var client *http.Client = http.DefaultClient
url = getURL(url)
if req, err = http.NewRequest(method, url, body); err != nil {
return nil, -1, err
}
if res, err = client.Do(req); err != nil {
return nil, -1, err
}
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
if err != nil {
return nil, res.StatusCode, err
}
return data, res.StatusCode, nil
}
func getURL(path string) string {
return fmt.Sprintf("%s%s", BASE_URL, path)
}

3
anilibria/vars.go Normal file
View File

@ -0,0 +1,3 @@
package anilibria
var BASE_URL string = "http://api.anilibria.tv"

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module git.thefoxon.ru/anilibria/anilibria-go
go 1.21.1

7
model/Episodes.go Normal file
View File

@ -0,0 +1,7 @@
package model
type Episodes struct {
First int `json:"first"`
Last int `json:"last"`
String string `json:"string"`
}

8
model/Pagination.go Normal file
View File

@ -0,0 +1,8 @@
package model
type Pagination struct {
Pages int64 `json:"pages"`
CurrentPage int64 `json:"current_page"`
ItemsPerPage int64 `json:"items_per_page"`
TotalItems int64 `json:"total_items"`
}

37
model/Player.go Normal file
View File

@ -0,0 +1,37 @@
package model
type Player struct {
AlternativePlayer string `json:"alternative_player"`
Host string `json:"host"`
IsRutube bool `json:"is_rutube"`
Episodes Episodes `json:"episodes"`
List map[string]playerEpisode `json:"list"`
Rutube map[string]rutubeEpisod `json:"rutube"`
}
type playerEpisode struct {
Episode int `json:"episode"`
Name string `json:"name"`
UUID string `json:"uuid"`
CreatedTimestamp int `json:"created_timestamp"`
Preview string `json:"preview"`
Skips playerSkips `json:"skips"`
Hls playerHls `json:"hls"`
}
type playerSkips struct {
Opening []any `json:"opening"`
Ending []any `json:"ending"`
}
type playerHls struct {
Fhd string `json:"fhd"`
Hd string `json:"hd"`
Sd string `json:"sd"`
}
type rutubeEpisod struct {
Episode int `json:"episode"`
CreatedTimestamp int `json:"created_timestamp"`
RutubeID string `json:"rutube_id"`
}

9
model/Team.go Normal file
View File

@ -0,0 +1,9 @@
package model
type Team struct {
Voice []string `json:"voice"`
Translator []string `json:"translator"`
Editing []string `json:"editing"`
Decor []string `json:"decor"`
Timing []string `json:"timing"`
}

69
model/Title.go Normal file
View File

@ -0,0 +1,69 @@
package model
type Title struct {
ID int `json:"id"`
Code string `json:"code"`
Names titleNames `json:"names"`
Franchises []any `json:"franchises"`
Announce any `json:"announce"`
Status titleStatus `json:"status"`
Posters titlePosters `json:"posters"`
Updated int `json:"updated"`
LastChange int `json:"last_change"`
Type titleType `json:"type"`
Genres []string `json:"genres"`
Team Team `json:"team"`
Season titleSeason `json:"season"`
Description string `json:"description"`
InFavorites int `json:"in_favorites"`
Blocked titleBlocked `json:"blocked"`
Player Player `json:"player"`
Torrents titleTorrents `json:"torrents"`
}
type titleNames struct {
Ru string `json:"ru"`
En string `json:"en"`
Alternative any `json:"alternative"`
}
type titleStatus struct {
String string `json:"string"`
Code int `json:"code"`
}
type titlePoster struct {
URL string `json:"url"`
RawBase64File any `json:"raw_base64_file"`
}
type titlePosters struct {
Small titlePoster `json:"small"`
Medium titlePoster `json:"medium"`
Original titlePoster `json:"original"`
}
type titleType struct {
FullString string `json:"full_string"`
Code int `json:"code"`
String string `json:"string"`
Episodes int `json:"episodes"`
Length int `json:"length"`
}
type titleSeason struct {
String string `json:"string"`
Code int `json:"code"`
Year int `json:"year"`
WeekDay int `json:"week_day"`
}
type titleBlocked struct {
Blocked bool `json:"blocked"`
Bakanim bool `json:"bakanim"`
}
type titleTorrents struct {
Episodes Episodes `json:"episodes"`
List []Torrent `json:"list"`
}

6
model/TitleList.go Normal file
View File

@ -0,0 +1,6 @@
package model
type TitleList struct {
List []Title `json:"list"`
Pagination Pagination `json:"pagination"`
}

26
model/Torrent.go Normal file
View File

@ -0,0 +1,26 @@
package model
type Torrent struct {
TorrentID int `json:"torrent_id"`
Episodes Episodes `json:"episodes"`
Quality torrentQuality `json:"quality"`
Leechers int `json:"leechers"`
Seeders int `json:"seeders"`
Downloads int `json:"downloads"`
TotalSize int64 `json:"total_size"`
SizeString string `json:"size_string"`
URL string `json:"url"`
Magnet string `json:"magnet"`
UploadedTimestamp int `json:"uploaded_timestamp"`
Hash string `json:"hash"`
Metadata any `json:"metadata"`
RawBase64File *string `json:"raw_base64_file"`
}
type torrentQuality struct {
String string `json:"string"`
Type string `json:"type"`
Resolution string `json:"resolution"`
Encoder string `json:"encoder"`
LqAudio any `json:"lq_audio"`
}