37 lines
895 B
Elixir
37 lines
895 B
Elixir
|
defmodule Frenzy.Pipeline.Extractor.MacStories do
|
||
|
@moduledoc """
|
||
|
Extractor for https://macstories.net
|
||
|
"""
|
||
|
|
||
|
alias Frenzy.Pipeline.Extractor
|
||
|
@behaviour Extractor
|
||
|
|
||
|
@impl Extractor
|
||
|
def extract(html_tree) do
|
||
|
case Floki.find(html_tree, ".post-content") do
|
||
|
[content_elem | _] ->
|
||
|
content_elem =
|
||
|
content_elem
|
||
|
# some images have full size links, strip those out
|
||
|
|> Floki.filter_out("a.view-full-size")
|
||
|
# rewrite non-standard images captions to <figure>/<figcaption>
|
||
|
|> Floki.map(&rewrite_element/1)
|
||
|
|
||
|
{:ok, content_elem}
|
||
|
|
||
|
_ ->
|
||
|
{:error, "no matching elements"}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp rewrite_element({"div", [{"class", "media-wrapper"}]}) do
|
||
|
{"figure", []}
|
||
|
end
|
||
|
|
||
|
defp rewrite_element({"p", [{"class", "image-caption"}]}) do
|
||
|
{"figcaption", []}
|
||
|
end
|
||
|
|
||
|
defp rewrite_element(elem), do: elem
|
||
|
end
|