blob: 63ab183f2d8769b83a02902e6a1db0884a1424a6 (
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
(ns tau.api.stream
(:require
[tau.api.playlist :as playlist]
[tau.api.channel :as channel]
[clojure.java.data :as j]
[ring.util.codec :refer [url-decode]])
(:import
org.schabi.newpipe.extractor.stream.StreamInfo
org.schabi.newpipe.extractor.NewPipe
org.schabi.newpipe.extractor.localization.DateWrapper
java.time.Instant))
(defrecord Stream
[name description upload-date
upload-author upload-url upload-avatar
thumbnail-url service-id duration view-count like-count
dislike-count subscriber-count upload-verified? hls-url
dash-mpd-url category tags audio-streams video-streams
related-streams])
(defrecord StreamResult
[name url thumbnail-url upload-author upload-url
upload-avatar upload-date short-description
duration view-count uploaded verified?])
(defn get-result
[stream]
(map->StreamResult
{:url (.getUrl stream)
:name (.getName stream)
:thumbnail-url (.getThumbnailUrl stream)
:upload-author (.getUploaderName stream)
:upload-url (.getUploaderUrl stream)
:upload-avatar (.getUploaderAvatarUrl stream)
:upload-date (.getTextualUploadDate stream)
:short-description (.getShortDescription stream)
:duration (.getDuration stream)
:view-count (.getViewCount stream)
:uploaded (if (.getUploadDate stream)
(.. stream (getUploadDate) (offsetDateTime) (toInstant) (toEpochMilli))
false)
:verified? (.isUploaderVerified stream)}))
(defn get-results
[items]
(map #(case (.name (.getInfoType %))
"STREAM" (get-result %)
"CHANNEL" (channel/get-result %)
"PLAYLIST" (playlist/get-result %))
items))
(defn get-info
[url]
(let [info (StreamInfo/getInfo (url-decode url))]
(map->Stream
{:name (.getName info)
:url (.getUrl info)
:description (.. info (getDescription) (getContent))
:upload-date (.getTextualUploadDate info)
:upload-author (.getUploaderName info)
:upload-url (.getUploaderUrl info)
:upload-avatar (.getUploaderAvatarUrl info)
:upload-verified? (.isUploaderVerified info)
:service-id (.getServiceId info)
:thumbnail-url (.getThumbnailUrl info)
:duration (.getDuration info)
:tags (.getTags info)
:category (.getCategory info)
:view-count (.getViewCount info)
:like-count (.getLikeCount info)
:dislike-count (.getDislikeCount info)
:subscriber-count (.getUploaderSubscriberCount info)
:audio-streams (j/from-java (.getAudioStreams info))
:video-streams (j/from-java (.getVideoStreams info))
:hls-url (.getHlsUrl info)
:dash-mpd-url (.getDashMpdUrl info)
:related-streams (get-results (.getRelatedStreams info))})))
|