* Started adding youtube API for fast indexing * Hooked youtube API into fast indexing * Added youtube_api_key to settings * Added youtube api key to settings UI * Added tests * Refactored the youtube api module * More refactor * Changed editing mode name from basic to standard * [WIP] started on copy changes * Updated copy
41 lines
1.3 KiB
Elixir
41 lines
1.3 KiB
Elixir
defmodule Pinchflat.HTTP.HTTPClient do
|
|
@moduledoc """
|
|
This module provides a simple interface for making HTTP requests.
|
|
|
|
Made to be easily swappable with other HTTP clients. If you need more complexity
|
|
or security, check out HTTPoison or Mint.
|
|
"""
|
|
|
|
alias Pinchflat.HTTP.HTTPBehaviour
|
|
|
|
@behaviour HTTPBehaviour
|
|
|
|
@doc """
|
|
Makes a GET request to the given URL and returns the response.
|
|
|
|
NOTE: I can't really test this with Mox and I can't think of a way to test this
|
|
that isn't ultimately redundant. I'm just going to leave it untested for now and
|
|
focus more on testing the consumers of this module.
|
|
|
|
Returns {:ok, String.t()} | {:error, String.t()}
|
|
"""
|
|
@impl HTTPBehaviour
|
|
def get(url, headers \\ [], opts \\ []) do
|
|
headers = parse_headers(headers)
|
|
|
|
case :httpc.request(:get, {url, headers}, [], opts) do
|
|
{:ok, {{_version, 200, _reason_phrase}, _headers, body}} ->
|
|
{:ok, to_string(body)}
|
|
|
|
{:ok, {{_version, status_code, reason_phrase}, _headers, _body}} ->
|
|
{:error, "HTTP request failed with status code #{status_code}: #{reason_phrase}"}
|
|
|
|
{:error, reason} ->
|
|
{:error, "HTTP request failed: #{reason}"}
|
|
end
|
|
end
|
|
|
|
defp parse_headers(headers) do
|
|
Enum.map(headers, fn {k, v} -> {to_charlist(k), to_charlist(v)} end)
|
|
end
|
|
end
|