Current section
Files
Jump to
Current section
Files
lib/flickrex.ex
defmodule Flickrex do
@moduledoc ~S"""
Performs Flickr API requests.
# Examples
operation = Flickrex.Flickr.Photos.get_recent(per_page: 5)
config = [url: "https://flickr-proxy.example.com"]
{:ok, resp} = Flickrex.request(operation, config)
"""
alias Flickrex.API
alias Flickrex.API.Auth
alias Flickrex.Client
alias Flickrex.Parser
alias Flickrex.XmlParser
alias Flickrex.Schema
@doc """
Performs a Flickr API request.
## Options
* `consumer_key` - Flickr API consumer key.
* `consumer_secret` - Flickr API consumer secret.
* `oauth_token` - Flicker user access token.
* `oauth_token_secret` - Flicker user access token secret.
* `url` - API Endpoint URL.
* `http_client` - HTTP client function. See `Flickrex.Request.HttpClient`.
"""
@spec request(Flickrex.Operation.t) :: term
@spec request(Flickrex.Operation.t, Keyword.t) :: {:ok, term} | {:error, term}
def request(operation, opts \\ []) do
config = Flickrex.Config.new(operation.service, opts)
request =
operation
|> Flickrex.Operation.prepare(config)
|> Map.put(:http_client, config.http_client)
Flickrex.Operation.perform(operation, request)
end
@doc """
Performs a Flickr API request. Raises on failure.
See `request/2`.
"""
@spec request!(Flickrex.Operation.t, Keyword.t) :: term | no_return
def request!(operation, opts \\ []) do
case request(operation, opts) do
{:ok, result} ->
result
error ->
raise Flickrex.Error, """
Flickrex Request Error
#{inspect error}
"""
end
end
@doc false
@spec new :: Client.t
def new do
IO.warn("Flickrex.new/0 is deprecated.", [])
new(Application.get_env(:flickrex, :oauth))
end
@doc false
@spec new(Keyword.t) :: Client.t
def new(config) do
IO.warn("Flickrex.new/1 is deprecated.", [])
Client.new(config)
end
@doc false
@spec update(Client.t, atom, String.t) :: Client.t
def update(client, key, value) do
IO.warn("Flickrex.update/3 is deprecated.", [])
Client.put(client, key, value)
end
@doc false
@spec put_access_token(Client.t, Schema.Access.t) :: Client.t
def put_access_token(client, %Schema.Access{oauth_token: token, oauth_token_secret: secret}) do
IO.warn("Flickrex.put_access_token/2 is deprecated.", [])
put_access_token(client, token, secret)
end
@doc false
@spec put_access_token(Client.t, String.t, String.t) :: Client.t
def put_access_token(client, token, secret) do
IO.warn("Flickrex.put_access_token/3 is deprecated.", [])
client |> Client.put(:access_token, token) |> Client.put(:access_token_secret, secret)
end
@doc false
@spec fetch_request_token(Client.t, Keyword.t) :: {:ok, Client.Request.t} | {:error, binary}
def fetch_request_token(client, params \\ []) do
IO.warn("Flickrex.fetch_request_token/2 is deprecated.", [])
Auth.fetch_request_token(client, params)
end
@doc false
@spec get_authorize_url(Client.Request.t, Keyword.t) :: binary
def get_authorize_url(request_token, params \\ []) do
IO.warn("Flickrex.get_authorize_url/2 is deprecated.", [])
Auth.get_authorize_url(request_token, params)
end
@doc false
@spec fetch_access_token(Client.t, Client.Request.t, binary) :: Schema.Access.t | {:error, term}
def fetch_access_token(client, request_token, verify) do
IO.warn("Flickrex.fetch_access_token/3 is deprecated.", [])
API.Auth.fetch_access_token(client, request_token, verify)
end
@doc false
@spec fetch_access_token(Client.t, String.t, String.t, binary) :: Schema.Access.t | {:error, term}
def fetch_access_token(client, token, secret, verify) do
IO.warn("Flickrex.fetch_access_token/4 is deprecated.", [])
fetch_access_token(client, %Client.Request{token: token, secret: secret}, verify)
end
@doc false
@spec get(Client.t, binary, Keyword.t) :: Parser.response
def get(client, method, args \\ []) do
IO.warn("Flickrex.get/3 is deprecated.", [])
call(client, :get, method, args)
end
@doc false
@spec post(Client.t, binary, Keyword.t) :: Parser.response
def post(client, method, args \\ []) do
IO.warn("Flickrex.get/3 is deprecated.", [])
call(client, :post, method, args)
end
@spec call(Client.t, :get | :post, binary, Keyword.t) :: Parser.response
defp call(client, http_method, method, args) do
case API.Base.call(client, http_method, method, args) do
{:ok, result} -> Parser.parse(result)
result -> result
end
end
@doc false
@spec upload(Client.t, Keyword.t) :: {:ok | :error, binary}
def upload(client, args \\ []) do
IO.warn("Flickrex.upload/2 is deprecated.", [])
client |> API.Base.upload_photo(args) |> photo_result()
end
@doc false
@spec replace(Client.t, Keyword.t) :: {:ok | :error, binary}
def replace(client, args \\ []) do
IO.warn("Flickrex.replace/2 is deprecated.", [])
client |> API.Base.replace_photo(args) |> photo_result()
end
defp photo_result(result) do
case result do
{:ok, response} ->
XmlParser.parse(response)
result ->
result
end
end
end