aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/api/stream.clj
blob: d0a7c81a5482199bcbd74f107ad4e023787367fb (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
(ns tau.api.stream
  (:require
   [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-stream-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))
                -1)
    :verified? (.isUploaderVerified stream)}))

(defn get-stream-info
  [url]
  (let [info (StreamInfo/getInfo (url-decode url))]
    (map->Stream
     {:name (.getName 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 (map #(get-stream-result %) (.getRelatedStreams info))})))