defmodule Emoj do @moduledoc """ Exposes a function to find relevant emoji from text """ @url "emoji.getdango.com/api/emoji" alias Poison.Parser @doc """ Searches relevant emoji from the given `text` ## Example Emoj.search("I love chicken") {:ok, ["🐔", "🍗", "🐓", "🐥", "🐤", "🐣", "🍖", "😋", "😍", "👅"]} """ @spec search(String.t) :: {:ok, list(String.t)} | {:error, any} def search(text) do encoded = URI.encode(text) query = "#{@url}?q=#{encoded}" query |> HTTPoison.get([], [follow_redirect: true]) |> handle_response |> handle_body end defp handle_response({:ok, %{status_code: 200, body: body}}) do {:ok, Parser.parse!(body)} end defp handle_response({:error, %HTTPoison.Error{id: _id, reason: reason}}) do {:error, reason} end defp handle_body({:ok, body}) do result = body |> Map.get("results") |> Enum.map(fn(x) -> x["text"] end) {:ok, result} end defp handle_body({:error, reason}), do: {:error, reason} end