Packages

Unfurl is a structured data extraction tool written in Elixir. It currently supports unfurling oEmbed, Twitter Card, Facebook Open Graph, JSON-LD and plain ole' HTML `<meta />` data out of any url you supply.

Current section

Files

Jump to
unfurl lib furlex parser json_ld.ex
Raw

lib/furlex/parser/json_ld.ex

defmodule Unfurl.Parser.JsonLD do
@behaviour Unfurl.Parser
@json_library Application.get_env(:unfurl, :json_library, Jason)
@spec parse(String.t()) :: nil | {:ok, List.t()}
def parse(html, _opts \\ []) do
meta = "script[type=\"application/ld+json\"]"
html
# |> Floki.parse_document()
# |> elem(1)
|> Floki.find(meta)
|> case do
nil ->
{:ok, []}
elements ->
json_ld =
elements
|> Enum.map(&decode/1)
|> List.flatten()
|> Enum.uniq()
{:ok, json_ld}
end
end
defp decode(element) do
element
|> Floki.text(js: true)
|> @json_library.decode!()
end
end