Packages

Anilist API client for Elixir

Retired package: Deprecated

Current section

Files

Jump to
anilixir lib anilixir.ex
Raw

lib/anilixir.ex

defmodule Anilixir do
@moduledoc """
Provides a simple interface to the Anilist API
"""
use Application
alias Application, as: App
alias Anilixir.Auth, as: Auth
alias Anilixir.Request, as: Request
alias Anilixir.Token, as: Token
@doc false
def start(_type, _args) do
Token.start_link
end
@doc """
Provides Anilixir with authentication information to use.
Must be called before using `Anilixir.get`.
## Examples
Anilixir.config!("my_id", "my_secret")
Or in `config/config.exs`:
config :anilixir, id: "my_id"
config :anilixir, secret: "my_secret"
"""
def config!(id, secret) do
App.put_env(:anilixir, :id, id)
App.put_env(:anilixir, :secret, secret)
end
@doc """
Makes Anilist queries and returns either an `{:ok, data}` or an `{:error, reason}` tuple.
## Examples
Anilixir.get("user/1")
"""
def get(query) do
token = Token.get
case Request.make(token, query) do
{:ok, data} ->
{:ok, data}
{:error, "Not authenticated"} ->
authenticate_and_redo(query)
{:error, message} ->
{:error, message}
end
end
defp authenticate_and_redo(query) do
id = App.get_env(:anilixir, :id, "")
secret = App.get_env(:anilixir, :secret, "")
case Auth.get_token(id, secret) do
{:ok, %{"access_token" => token}} ->
Token.put(token)
get(query)
{:error, message} ->
{:error, message}
end
end
end