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.{
Config,
Error,
Operation,
Response
}
@doc """
Performs a Flickr API request.
## Options
* `consumer_key` - Flickr API consumer key.
* `consumer_secret` - Flickr API consumer secret.
* `oauth_token` - Flickr user access token.
* `oauth_token_secret` - Flickr user access token secret.
* `url` - API Endpoint URL.
* `http_client` - HTTP client module. See `Flickrex.Request.HttpClient`.
* `http_opts` - HTTP client options.
* `json_decoder` - Decoder module for REST JSON responses.
* `rest_decoder` - Decoder module for REST XML responses.
These options can be configured for all operations in your Mix config file:
config :flickrex, :config, [
consumer_key: "...",
consumer_secret: "...",
]
These options can also be overriden for each service:
config :flickrex, :api, url: "https://api-proxy.example.com"
config :flickrex, :upload, url: "https://upload-proxy.example.com"
"""
@spec request(Operation.t()) :: term
@spec request(Operation.t(), Keyword.t()) :: {:ok, Response.t()} | {:error, term}
def request(operation, opts \\ []) do
config = Config.new(operation.service, opts)
Operation.perform(operation, config)
end
@doc """
Performs a Flickr API request. Raises on failure.
See `request/2`.
"""
@spec request!(Operation.t(), Keyword.t()) :: term | no_return
def request!(operation, opts \\ []) do
case request(operation, opts) do
{:ok, result} ->
result
error ->
raise Error, """
Flickrex Request Error
#{inspect(error)}
"""
end
end
end