|
@@ -0,0 +1,79 @@
|
|
|
+(ns tau.api.services
|
|
|
+ (:require
|
|
|
+ [clojure.java.data :as j]
|
|
|
+ [ring.util.codec :refer [url-encode url-decode]]
|
|
|
+ [tau.api.items :as items])
|
|
|
+ (:import
|
|
|
+ org.schabi.newpipe.extractor.kiosk.KioskInfo
|
|
|
+ org.schabi.newpipe.extractor.kiosk.KioskList
|
|
|
+ org.schabi.newpipe.extractor.InfoItem
|
|
|
+ org.schabi.newpipe.extractor.NewPipe
|
|
|
+ org.schabi.newpipe.extractor.Page
|
|
|
+ org.schabi.newpipe.extractor.StreamingService
|
|
|
+ org.schabi.newpipe.extractor.search.SearchInfo))
|
|
|
+
|
|
|
+(defn search
|
|
|
+ ([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)]
|
|
|
+ {:items (items/get-items (.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))]
|
|
|
+ {:items (items/get-items (.getItems info))
|
|
|
+ :next-page (j/from-java (.getNextPage info))})))
|
|
|
+
|
|
|
+(defn get-kiosk
|
|
|
+ ([service-id]
|
|
|
+ (let [service (NewPipe/getService service-id)
|
|
|
+ extractor (doto (.getDefaultKioskExtractor (.getKioskList service))
|
|
|
+ (.fetchPage))
|
|
|
+ info (KioskInfo/getInfo extractor)]
|
|
|
+ {:id (.getId info)
|
|
|
+ :url (.getUrl info)
|
|
|
+ :next-page (j/from-java (.getNextPage info))
|
|
|
+ :related-streams (items/get-items (.getRelatedItems info))}))
|
|
|
+ ([kiosk-id service-id]
|
|
|
+ (let [service (NewPipe/getService service-id)
|
|
|
+ extractor (doto (.getExtractorById (.getKioskList service) kiosk-id nil)
|
|
|
+ (.fetchPage))
|
|
|
+ info (KioskInfo/getInfo extractor)]
|
|
|
+ {:id (.getId info)
|
|
|
+ :url (.getUrl info)
|
|
|
+ :next-page (j/from-java (.getNextPage info))
|
|
|
+ :related-streams (items/get-items (.getRelatedItems info))}))
|
|
|
+ ([kiosk-id service-id page-url]
|
|
|
+ (let [service (NewPipe/getService service-id)
|
|
|
+ extractor (.getExtractorById (.getKioskList service) kiosk-id nil)
|
|
|
+ url (url-decode page-url)
|
|
|
+ kiosk-info (KioskInfo/getInfo extractor)
|
|
|
+ info (KioskInfo/getMoreItems service (.getUrl kiosk-info) (Page. url))]
|
|
|
+ {:next-page (j/from-java (.getNextPage info))
|
|
|
+ :related-streams (items/get-items (.getItems info))})))
|
|
|
+
|
|
|
+(defn get-kiosks
|
|
|
+ [service-id]
|
|
|
+ (let [service (NewPipe/getService service-id)
|
|
|
+ kiosks (.getKioskList service)]
|
|
|
+ {:default-kiosk (.getDefaultKioskId kiosks)
|
|
|
+ :available-kiosks (.getAvailableKiosks kiosks)}))
|
|
|
+
|
|
|
+(defn get-service
|
|
|
+ [service]
|
|
|
+ {:id (.getServiceId service)
|
|
|
+ :info (j/from-java (.getServiceInfo service))
|
|
|
+ :base-url (.getBaseUrl service)})
|
|
|
+
|
|
|
+(defn get-services
|
|
|
+ []
|
|
|
+ (map get-service (NewPipe/getServices)))
|