blob: 8ef29e51437454f9a3ce23b576fc9af54166c924 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
(ns tau.api.channel
(:require
[tau.api.stream :as stream]
[tau.api.playlist :as playlist]
[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-results
[items]
(map #(case (.name (.getInfoType %))
"STREAM" (stream/get-result %)
"CHANNEL" (get-result %)
"PLAYLIST" (playlist/get-result %))
items))
(defn get-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-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 (get-results (.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 (get-results (.getItems info))
:next-page (j/from-java (.getNextPage info))}))))
|