Seryiza / goshikimori

Shikimori API for Go
MIT License
2 stars 0 forks source link
api-client go golang golang-library shikimori

API Шикимори для Golang

GoDoc Go Report Card

Описание

Пакет предназначен для взаимодействия с API Шикимори.

Зависимости

Установка

go get github.com/seryiza/goshikimori

Использование

OAuth2

Прежде всего, для OAuth2 потребуется создать приложение на самом Шикимори. Для авторизации потребуется название приложения, client id и client secret.

Работа с API

Объект goshikimori.Shikimori предназначен для взаимодействия с API Шикимори. Можно использовать через:

var im structs.User err := shiki.JSONGet("users/whoami", &im) if err != nil { panic(err) }

fmt.Println(im, err) // => models.User{ // ID: 206253, // Nickname: "Seryiza", // ... // }


## Пример
Также есть примеры в папке `examples`.

```go
conf := &oauth2.Config{
  ClientID:     "your shikimori client id",
  ClientSecret: "your shikimori client secret",
  RedirectURL:  auth.StandaloneRedirectURL,
  Endpoint:     auth.ShikimoriEndpoint,
}

url := auth.GetAuthCodeURL(conf)
fmt.Println("Enter code from here: ", url)

var code string
if _, err := fmt.Scanln(&code); err != nil {
  panic(err)
}

ctx := context.Background()
ctx = goshikimori.AddTransport(ctx, "your shikimori oauth app name")

tok, err := conf.Exchange(ctx, code)
if err != nil {
  panic(err)
}

client := conf.Client(ctx, tok)
shiki := goshikimori.NewShikimori(client, "1.0")  // 1.0 -- version of Shikimori API

resp, err := shiki.Get("users/whoami")
if err != nil {
  panic(err)
}

user := &structs.User{}
jd := json.NewDecoder(resp.Body)
if err = jd.Decode(user); err != nil {
  panic(err)
}

fmt.Printf("I'm %s", user.Nickname)

Также есть вспомогательные функции helpers (использующие файлы и env-переменные) для написания меньшего кода:

// GetShikimori получает oauth2 конфиг и токен из файлов или env-переменных
// и создает Shikimori из стандартного http клиента
shiki, err := helpers.GetShikimori("1.0")
if err != nil {
  panic(err)
}
// Сохраняем токен в файл, если он изменился
defer helpers.SaveToken(shiki)

user := &structs.User{}
_, err = shiki.JSONGet("users/whoami", user)
if err != nil {
  panic(err)
}

fmt.Printf("I'm %s", user.Nickname)

Тестирование

Тесты также проверяют запрос-ответ от Шикимори. Для корректной работы всех тестов необходимо задать следующие envirement-переменные: