summaryrefslogtreecommitdiff
path: root/lib/nola_plugins/link_plugin/youtube.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nola_plugins/link_plugin/youtube.ex')
-rw-r--r--lib/nola_plugins/link_plugin/youtube.ex72
1 files changed, 0 insertions, 72 deletions
diff --git a/lib/nola_plugins/link_plugin/youtube.ex b/lib/nola_plugins/link_plugin/youtube.ex
deleted file mode 100644
index f7c7541..0000000
--- a/lib/nola_plugins/link_plugin/youtube.ex
+++ /dev/null
@@ -1,72 +0,0 @@
-defmodule Nola.IRC.LinkPlugin.YouTube do
- @behaviour Nola.IRC.LinkPlugin
-
- @moduledoc """
- # YouTube link preview
-
- needs an API key:
-
- ```
- config :nola, :youtube,
- api_key: "xxxxxxxxxxxxx"
- ```
-
- options:
-
- * `invidious`: Add a link to invidious.
- """
-
- @impl true
- def match(uri = %URI{host: yt, path: "/watch", query: "v="<>video_id}, _opts) when yt in ["youtube.com", "www.youtube.com"] do
- {true, %{video_id: video_id}}
- end
-
- def match(%URI{host: "youtu.be", path: "/"<>video_id}, _opts) do
- {true, %{video_id: video_id}}
- end
-
- def match(_, _), do: false
-
- @impl true
- def post_match(_, _, _, _), do: false
-
- @impl true
- def expand(uri, %{video_id: video_id}, opts) do
- key = Application.get_env(:nola, :youtube)[:api_key]
- params = %{
- "part" => "snippet,contentDetails,statistics",
- "id" => video_id,
- "key" => key
- }
- headers = []
- options = [params: params]
- case HTTPoison.get("https://www.googleapis.com/youtube/v3/videos", [], options) do
- {:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
- case Jason.decode(body) do
- {:ok, json} ->
- item = List.first(json["items"])
- if item do
- snippet = item["snippet"]
- duration = item["contentDetails"]["duration"] |> String.replace("PT", "") |> String.downcase
- date = snippet["publishedAt"]
- |> DateTime.from_iso8601()
- |> elem(1)
- |> Timex.format("{relative}", :relative)
- |> elem(1)
-
- line = if host = Keyword.get(opts, :invidious) do
- ["-> https://#{host}/watch?v=#{video_id}"]
- else
- []
- end
- {:ok, line ++ ["#{snippet["title"]}", "— #{duration} — uploaded by #{snippet["channelTitle"]} — #{date}"
- <> " — #{item["statistics"]["viewCount"]} views, #{item["statistics"]["likeCount"]} likes"]}
- else
- :error
- end
- _ -> :error
- end
- end
- end
-
-end