diff --git a/lib/frenzy/task/fetch_favicon.ex b/lib/frenzy/task/fetch_favicon.ex index fd79aa4..e23a7a1 100644 --- a/lib/frenzy/task/fetch_favicon.ex +++ b/lib/frenzy/task/fetch_favicon.ex @@ -10,16 +10,25 @@ defmodule Frenzy.Task.FetchFavicon do def run(feed) do Logger.metadata(favicon_task_id: generate_task_id()) - case fetch_favicon_from_webpage(feed.site_url) do + site_url = + case feed.site_url do + url when is_binary(url) -> + url + + _ -> + %URI{URI.parse(feed.feed_url) | path: nil, query: nil, fragment: nil} |> URI.to_string() + end + + case fetch_favicon_from_webpage(site_url) do {:ok, favicon_data} -> changeset = Feed.changeset(feed, %{favicon: favicon_data}) {:ok, _feed} = Repo.update(changeset) {:error, reason} -> - Logger.info("Couldn't fetch favicon for #{feed.site_url}: #{reason}") + Logger.info("Couldn't fetch favicon for #{site_url}: #{reason}") favicon_uri = - %{URI.parse(feed.site_url) | path: "/favicon.ico", query: nil, fragment: nil} + %{URI.parse(site_url) | path: "/favicon.ico", query: nil, fragment: nil} |> URI.to_string() Logger.info("Trying default path: #{favicon_uri}") @@ -30,12 +39,12 @@ defmodule Frenzy.Task.FetchFavicon do {:ok, _feed} = Repo.update(changeset) {:error, reason} -> - Logger.info("Couldn't fetch default /favicon.ico for #{feed.site_url}: #{reason}") + Logger.info("Couldn't fetch default /favicon.ico for #{site_url}: #{reason}") end end end - defp fetch_favicon_from_webpage(url) do + defp fetch_favicon_from_webpage(url) when is_binary(url) do case HTTP.get(url) do {:ok, %HTTPoison.Response{body: body}} -> extract_favicon(body) @@ -45,6 +54,8 @@ defmodule Frenzy.Task.FetchFavicon do end end + defp fetch_favicon_from_webpage(_), do: {:error, "URL must be a string"} + defp extract_favicon(body) do html_tree = Floki.parse(body)