initial commit
This commit is contained in:
parent
f18939e38d
commit
022999b0e5
4 changed files with 46 additions and 46 deletions
4
.cljfmt.edn
Normal file
4
.cljfmt.edn
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{:parallel? true
|
||||
:sort-ns-references? true
|
||||
:align-form-columns? true
|
||||
:align-map-columns? true}
|
||||
|
|
@ -11,9 +11,7 @@
|
|||
(defrecord Context [client token]
|
||||
TMDB
|
||||
(search [this term]
|
||||
(-> (req/make-request this "https://api.themoviedb.org/3/search/movie")
|
||||
(req/with-query term)
|
||||
(req/with-page 1)
|
||||
(-> (req/search-request this term)
|
||||
(http-get-pages))))
|
||||
|
||||
;; Creates a new client.
|
||||
|
|
@ -25,7 +23,8 @@
|
|||
(defn- http-get
|
||||
"Send a GET request."
|
||||
[request]
|
||||
(hc/get (first request) (second request)))
|
||||
(let [[url opts] (req/to-http-request request)]
|
||||
(hc/get url opts)))
|
||||
|
||||
(defn- http-get-pages
|
||||
"Send a get request, and return pages from the API in a sequence."
|
||||
|
|
|
|||
|
|
@ -1,46 +1,50 @@
|
|||
(ns tmdb.request
|
||||
(:require [tmdb.util :refer [deep-merge]]))
|
||||
|
||||
(def RequestTuple
|
||||
[:tuple
|
||||
[:string {:min 1}]
|
||||
[:map {:closed false}]])
|
||||
(defprotocol Request
|
||||
"Protocol for requests that can be converted to HTTP arguments."
|
||||
(to-http-request [this]
|
||||
"Converts the request object into a [url options] tuple for Hato."))
|
||||
|
||||
(defn make-request
|
||||
"Makes a simple request for a given url."
|
||||
[{:keys [client token]} url]
|
||||
[url {:oauth-token token
|
||||
:http-client client
|
||||
:as :json
|
||||
:query-params {:page 1}}])
|
||||
(defn- base-options [context]
|
||||
{:oauth-token (:token context)
|
||||
:http-client (:client context)
|
||||
:as :json
|
||||
:throw-exceptions false})
|
||||
|
||||
(defn- update-query-params
|
||||
[[url request] query]
|
||||
[url (deep-merge request {:query-params query})])
|
||||
(defrecord SearchRequest [context query page include-adult?]
|
||||
Request
|
||||
(to-http-request [_]
|
||||
["https://api.themoviedb.org/3/search/movie"
|
||||
(deep-merge (base-options context)
|
||||
{:query-params (cond-> {:page (or page 1)}
|
||||
query (assoc :query query)
|
||||
(some? include-adult?) (assoc :include_adult include-adult?))})]))
|
||||
|
||||
(defn get-url
|
||||
"Retrieves the URL from the request."
|
||||
[request]
|
||||
(first request))
|
||||
(defrecord DetailsRequest [context movie-id language]
|
||||
Request
|
||||
(to-http-request [_]
|
||||
[(str "https://api.themoviedb.org/3/movie/" movie-id)
|
||||
(deep-merge (base-options context)
|
||||
{:query-params (cond-> {}
|
||||
language (assoc :language language))})]))
|
||||
|
||||
(defn get-page
|
||||
[request]
|
||||
(get-in request [1 :query-params :page]))
|
||||
(defn search-request
|
||||
"Creates a new search request."
|
||||
([context] (map->SearchRequest {:context context :page 1}))
|
||||
([context query] (map->SearchRequest {:context context :query query :page 1})))
|
||||
|
||||
(defn details-request
|
||||
"Creates a new details request."
|
||||
([context movie-id] (map->DetailsRequest {:context context :movie-id movie-id}))
|
||||
([context movie-id language] (map->DetailsRequest {:context context :movie-id movie-id :language language})))
|
||||
|
||||
(defn with-page
|
||||
"Sets a the page property for a request."
|
||||
[request page_no]
|
||||
(update-query-params request {:page page_no}))
|
||||
|
||||
(defn get-query
|
||||
"Returns the search query from the request tuple."
|
||||
[request]
|
||||
(get-in request [1 :query-params :query]))
|
||||
"Sets the page property for a request."
|
||||
[request page-no]
|
||||
(assoc request :page page-no))
|
||||
|
||||
(defn with-query
|
||||
"Returns a new request with the search query updated."
|
||||
[request search]
|
||||
(update-query-params request {:query search}))
|
||||
|
||||
|
||||
|
||||
"Sets the search query for a request."
|
||||
[request query]
|
||||
(assoc request :query query))
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
(ns tmdb.main-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[tmdb.main :refer :all]))
|
||||
|
||||
(deftest a-test
|
||||
(testing "FIXME, I fail."
|
||||
(is (= 0 1))))
|
||||
Loading…
Reference in a new issue