blob: 106999d4e67ee97a74dff3d4596bbc234c508d3c (
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
|
(ns tau.api.search
(:require
[tau.api.stream :as stream]
[tau.api.channel :as channel]
[tau.api.playlist :as playlist]
[clojure.java.data :as j]
[ring.util.codec :refer [url-encode url-decode]])
(:import
org.schabi.newpipe.extractor.search.SearchInfo
org.schabi.newpipe.extractor.InfoItem
org.schabi.newpipe.extractor.NewPipe
org.schabi.newpipe.extractor.Page))
(defrecord SearchResult
[items next-page search-suggestion corrected-search?])
(defrecord SearchResultPage
[items next-page])
(defn get-results
[items]
(map #(case (.name (.getInfoType %))
"STREAM" (stream/get-result %)
"CHANNEL" (channel/get-result %)
"PLAYLIST" (playlist/get-result %))
items))
(defn get-info
([service-id query content-filters sort-filter]
(let [service (NewPipe/getService service-id)
query-handler (.. service
(getSearchQHFactory)
(fromQuery query (or content-filters '()) (or sort-filter "")))
info (SearchInfo/getInfo service query-handler)]
(map->SearchResult
{:items (get-results (.getRelatedItems info))
:next-page (j/from-java (.getNextPage info))
:search-suggestion (.getSearchSuggestion info)
:corrected-search? (.isCorrectedSearch info)})))
([service-id query content-filters sort-filter page-url]
(let [service (NewPipe/getService service-id)
url (url-decode page-url)
query-handler (.. service
(getSearchQHFactory)
(fromQuery query (or content-filters '()) (or sort-filter "")))
info (SearchInfo/getMoreItems service query-handler (Page. url))]
(map->SearchResultPage
{:items (get-results (.getItems info))
:next-page (j/from-java (.getNextPage info))}))))
|