Revert "Revert "Merge branch 'fix/ogp-title' into 'develop'""
This reverts commit b6af80f769.
			
			
This commit is contained in:
		
							parent
							
								
									8dbcff2fed
								
							
						
					
					
						commit
						58c4d5312b
					
				
					 3 changed files with 59 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -1,15 +1,19 @@
 | 
			
		|||
defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do
 | 
			
		||||
  def parse(html, data, prefix, error_message, key_name, value_name \\ "content") do
 | 
			
		||||
    with elements = [_ | _] <- get_elements(html, key_name, prefix),
 | 
			
		||||
         meta_data =
 | 
			
		||||
           Enum.reduce(elements, data, fn el, acc ->
 | 
			
		||||
             attributes = normalize_attributes(el, prefix, key_name, value_name)
 | 
			
		||||
    meta_data =
 | 
			
		||||
      html
 | 
			
		||||
      |> get_elements(key_name, prefix)
 | 
			
		||||
      |> Enum.reduce(data, fn el, acc ->
 | 
			
		||||
        attributes = normalize_attributes(el, prefix, key_name, value_name)
 | 
			
		||||
 | 
			
		||||
             Map.merge(acc, attributes)
 | 
			
		||||
           end) do
 | 
			
		||||
      {:ok, meta_data}
 | 
			
		||||
        Map.merge(acc, attributes)
 | 
			
		||||
      end)
 | 
			
		||||
      |> maybe_put_title(html)
 | 
			
		||||
 | 
			
		||||
    if Enum.empty?(meta_data) do
 | 
			
		||||
      {:error, error_message}
 | 
			
		||||
    else
 | 
			
		||||
      _e -> {:error, error_message}
 | 
			
		||||
      {:ok, meta_data}
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,4 +31,17 @@ defp normalize_attributes(html_node, prefix, key_name, value_name) do
 | 
			
		|||
 | 
			
		||||
    %{String.to_atom(data[key_name]) => data[value_name]}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  defp maybe_put_title(%{title: _} = meta, _), do: meta
 | 
			
		||||
 | 
			
		||||
  defp maybe_put_title(meta, html) do
 | 
			
		||||
    case get_page_title(html) do
 | 
			
		||||
      "" -> meta
 | 
			
		||||
      title -> Map.put_new(meta, :title, title)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  defp get_page_title(html) do
 | 
			
		||||
    Floki.find(html, "title") |> Floki.text()
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								test/fixtures/rich_media/ogp-missing-title.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/fixtures/rich_media/ogp-missing-title.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
<html prefix="og: http://ogp.me/ns#">
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
  <title>The Rock (1996)</title>
 | 
			
		||||
  <meta property="og:type" content="video.movie" />
 | 
			
		||||
  <meta property="og:url" content="http://www.imdb.com/title/tt0117500/" />
 | 
			
		||||
  <meta property="og:image" content="http://ia.media-imdb.com/images/rock.jpg" />
 | 
			
		||||
  <meta property="og:description"
 | 
			
		||||
    content="Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.">
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,6 +9,15 @@ defmodule Pleroma.Web.RichMedia.ParserTest do
 | 
			
		|||
      } ->
 | 
			
		||||
        %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")}
 | 
			
		||||
 | 
			
		||||
      %{
 | 
			
		||||
        method: :get,
 | 
			
		||||
        url: "http://example.com/ogp-missing-title"
 | 
			
		||||
      } ->
 | 
			
		||||
        %Tesla.Env{
 | 
			
		||||
          status: 200,
 | 
			
		||||
          body: File.read!("test/fixtures/rich_media/ogp-missing-title.html")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      %{
 | 
			
		||||
        method: :get,
 | 
			
		||||
        url: "http://example.com/twitter-card"
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +60,19 @@ test "parses ogp" do
 | 
			
		|||
              }}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "falls back to <title> when ogp:title is missing" do
 | 
			
		||||
    assert Pleroma.Web.RichMedia.Parser.parse("http://example.com/ogp-missing-title") ==
 | 
			
		||||
             {:ok,
 | 
			
		||||
              %{
 | 
			
		||||
                image: "http://ia.media-imdb.com/images/rock.jpg",
 | 
			
		||||
                title: "The Rock (1996)",
 | 
			
		||||
                description:
 | 
			
		||||
                  "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",
 | 
			
		||||
                type: "video.movie",
 | 
			
		||||
                url: "http://www.imdb.com/title/tt0117500/"
 | 
			
		||||
              }}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "parses twitter card" do
 | 
			
		||||
    assert Pleroma.Web.RichMedia.Parser.parse("http://example.com/twitter-card") ==
 | 
			
		||||
             {:ok,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue