defmodule ExFinancialModelingPrep.Api.StockLookUpTool do
@moduledoc """
[Stock Look Up Tool API](https://site.financialmodelingprep.com/developer/docs/#Stock-News)
"""
alias ExFinancialModelingPrep.Api.Client
alias ExFinancialModelingPrep.Struct.Search
@doc """
Search via ticker and company name. Values for exchange options are:
ETF | MUTUAL_FUND | COMMODITY | INDEX | CRYPTO | FOREX | TSX | AMEX | NASDAQ | NYSE | EURONEXT | XETRA | NSE | LSE
"""
@spec search(String.t(), exchange: String.t()) ::
{:ok, [Search.t()]} | {:error, HTTPoison.Error.t()}
def search(ticker_or_company, opts) do
query =
%{"query" => ticker_or_company}
|> Map.merge(Enum.into(opts, %{}))
|> URI.encode_query()
%URI{path: "/v3/search", query: query}
|> URI.to_string()
|> Client.get()
|> case do
{:ok, %{status_code: 200, body: companies}} ->
Enum.map(companies, fn company ->
%Search{
currency: company["currency"],
exchange_short_name: company["exchangeShortName"],
name: company["name"],
stock_exchange: company["stockExchange"],
symbol: company["symbol"]
}
end)
{:error, error} ->
{:error, error}
end
end
end