aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/api/channel.clj
diff options
context:
space:
mode:
authorMiguel Ángel Moreno <mail@migalmoreno.com>2022-11-21 17:55:28 +0100
committerMiguel Ángel Moreno <mail@migalmoreno.com>2022-12-20 00:54:46 +0100
commit452ccfd567f79126e108f69bb7ebca07b5993bdd (patch)
tree4bc2688977dcd461259683bc89ea7eb94848f627 /src/backend/tau/api/channel.clj
feat: Initial commit
Diffstat (limited to 'src/backend/tau/api/channel.clj')
-rw-r--r--src/backend/tau/api/channel.clj52
1 files changed, 52 insertions, 0 deletions
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))}))))