+
+ # Regex-based 'parsing' so we don't have to pull in a full html parser
+ # It's a hack anyway. Maybe revisit this in the future
+ @mastodon_regex ~r/<link href='(.*)' rel='alternate' type='application\/atom\+xml'>/
+ @gs_regex ~r/<link title=.* href="(.*)" type="application\/atom\+xml" rel="alternate">/
+ def get_atom_url(body) do
+ cond do
+ Regex.match?(@mastodon_regex, body) ->
+ [[_, match]] = Regex.scan(@mastodon_regex, body)
+ {:ok, match}
+ Regex.match?(@gs_regex, body) ->
+ [[_, match]] = Regex.scan(@gs_regex, body)
+ {:ok, match}
+ true ->
+ Logger.debug(fn -> "Couldn't find atom link in #{inspect(body)}" end)
+ {:error, "Couldn't find the atom link"}
+ end
+ end
+
+ def fetch_activity_from_html_url(url) do
+ with {:ok, %{body: body}} <- @httpoison.get(url),
+ {:ok, atom_url} <- get_atom_url(body),
+ {:ok, %{status_code: code, body: body}} when code in 200..299 <- @httpoison.get(atom_url) do
+ handle_incoming(body)
+ end
+ end