From 452ccfd567f79126e108f69bb7ebca07b5993bdd Mon Sep 17 00:00:00 2001 From: Miguel Ángel Moreno Date: Mon, 21 Nov 2022 17:55:28 +0100 Subject: feat: Initial commit --- src/backend/tau/api/channel.clj | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/backend/tau/api/channel.clj (limited to 'src/backend/tau/api/channel.clj') diff --git a/src/backend/tau/api/channel.clj b/src/backend/tau/api/channel.clj new file mode 100644 index 0000000..26d3b34 --- /dev/null +++ b/src/backend/tau/api/channel.clj @@ -0,0 +1,52 @@ +(ns tau.api.channel + (:require + [tau.api.stream :as stream] + [clojure.java.data :as j] + [ring.util.codec :refer [url-decode]]) + (:import + org.schabi.newpipe.extractor.channel.ChannelInfo + org.schabi.newpipe.extractor.NewPipe + org.schabi.newpipe.extractor.Page)) + +(defrecord Channel + [id name description verified? banner avatar + subscriber-count donation-links next-page + related-streams]) + +(defrecord ChannelResult + [name description verified? thumbnail-url url + subscriber-count stream-count]) + +(defrecord ChannelPage + [next-page related-streams]) + +(defn get-channel-result + [channel] + (map->ChannelResult + {:name (.getName channel) + :thumbnail-url (.getThumbnailUrl channel) + :url (.getUrl channel) + :description (.getDescription channel) + :subscriber-count (.getSubscriberCount channel) + :stream-count (.getStreamCount channel) + :verified? (.isVerified channel)})) + +(defn get-channel-info + ([url] + (let [info (ChannelInfo/getInfo (url-decode url))] + (map->Channel + {:id (.getId info) + :name (.getName info) + :verified? (.isVerified info) + :banner (.getBannerUrl info) + :avatar (.getAvatarUrl info) + :subscriber-count (.getSubscriberCount info) + :donation-links (.getDonationLinks info) + :next-page (j/from-java (.getNextPage info)) + :related-streams (map #(stream/get-stream-result %) (.getRelatedItems info))}))) + ([url page-url] + (let [service (NewPipe/getServiceByUrl (url-decode url)) + info (ChannelInfo/getMoreItems service url (Page. (url-decode page-url)))] + (map->ChannelPage + {:related-streams (map #(stream/get-stream-result %) (.getItems info)) + :next-page (j/from-java (.getNextPage info))})))) -- cgit v1.2.3