defmodule Strava do @moduledoc """ Provides access to Strava’s V3 API. The Strava V3 API is a publicly available interface allowing developers access to the rich Strava dataset. More info: http://strava.github.io/api/ """ use HTTPoison.Base @endpoint "https://www.strava.com/api/v3/" @max_page_size 200 @default_delay_between_requests_in_milliseconds 1_000 @doc """ Submit a request to the Strava API """ def request(path, %Strava.Client{access_token: access_token}, opts \\ []) do path |> Strava.get!(%{"Authorization" => "Bearer #{access_token}"}) |> parse(opts) end defp parse(response, opts), do: Poison.decode!(response.body, opts ++ [keys: :atoms]) defp process_url(path), do: @endpoint <> path @doc """ Gets the Strava API Client ID from :strava, :client_id application env or STRAVA_CLIENT_ID from system ENV """ def client_id do Application.get_env(:strava, :client_id) || System.get_env("STRAVA_CLIENT_ID") end @doc """ Gets the Strava API Client Secret from :strava, :client_secret application env or STRAVA_CLIENT_SECRET from system ENV """ def client_secret do Application.get_env(:strava, :client_secret) || System.get_env("STRAVA_CLIENT_SECRET") end @doc """ Gets the Strava API access token from :strava, :access_token application env or STRAVA_ACCESS_TOKEN from system ENV Any registered Strava user can obtain an access_token by first creating an application at https://strava.com/developers """ def access_token do Application.get_env(:strava, :access_token) || System.get_env("STRAVA_ACCESS_TOKEN") end def redirect_uri do Application.get_env(:strava, :redirect_uri) || System.get_env("STRAVA_REDIRECT_URI") end def max_page_size, do: @max_page_size def delay_between_requests_in_milliseconds do Application.get_env(:strava, :delay_between_requests_in_milliseconds) || @default_delay_between_requests_in_milliseconds end end