Web.MastodonAPI.MastodonAPIController: Add Rich-Media support

This commit is contained in:
Haelwenn (lanodan) Monnier 2019-01-14 00:06:55 +01:00 committed by William Pitcock
commit 3f64379b13
3 changed files with 40 additions and 1 deletions

View file

@ -1322,6 +1322,29 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
end
defp status_first_external_url(content) do
content
|> Floki.filter_out("a.mention")
|> Floki.attribute("a", "href")
|> Enum.at(0)
end
def status_card(conn, %{"id" => status_id}) do
with %Activity{} = activity <- Repo.get(Activity, status_id),
true <- ActivityPub.is_public?(activity),
page_url <- status_first_external_url(activity.data["object"]["content"]),
{:ok, rich_media} <- Pleroma.Web.RichMedia.Parser.parse(page_url) do
card =
rich_media
|> Map.take([:image, :title, :url, :description])
|> Map.put(:type, "link")
json(conn, card)
else
_ -> json(conn, %{})
end
end
def try_render(conn, target, params)
when is_binary(target) do
res = render(conn, target, params)

View file

@ -258,7 +258,7 @@ defmodule Pleroma.Web.Router do
get("/statuses/:id", MastodonAPIController, :get_status)
get("/statuses/:id/context", MastodonAPIController, :get_context)
get("/statuses/:id/card", MastodonAPIController, :empty_object)
get("/statuses/:id/card", MastodonAPIController, :status_card)
get("/statuses/:id/favourited_by", MastodonAPIController, :favourited_by)
get("/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by)