2021-09-05 19:30:29 +02:00
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
|
2021-09-17 17:36:58 +02:00
|
|
|
{-|
|
|
|
|
Module : Request
|
|
|
|
Description : Contains code for issuing http requests
|
|
|
|
-}
|
|
|
|
|
2021-09-05 19:30:29 +02:00
|
|
|
module Request where
|
|
|
|
|
|
|
|
import JSONTypes
|
|
|
|
|
|
|
|
import Network.Wreq
|
2021-09-06 21:02:39 +02:00
|
|
|
import qualified Network.Wreq as WR (Options)
|
2021-09-05 19:30:29 +02:00
|
|
|
import Control.Lens
|
|
|
|
import Data.Aeson
|
2021-09-14 17:06:34 +02:00
|
|
|
import qualified Data.Text as T
|
2021-09-05 19:30:29 +02:00
|
|
|
|
2021-09-17 17:36:58 +02:00
|
|
|
-- | Sends a request and unwraps the top level respone data structure
|
2021-09-06 21:02:39 +02:00
|
|
|
makeRequest :: (FromJSON a) => String -> WR.Options -> IO (Either T.Text a)
|
|
|
|
makeRequest url opts = do
|
|
|
|
r <- asJSON =<< getWith opts url
|
2021-09-05 19:30:29 +02:00
|
|
|
pure $ case (r ^. responseBody) of
|
2021-09-07 18:37:21 +02:00
|
|
|
(JSONResponse "ok" _ (Just d)) -> Right d
|
2021-09-19 19:43:19 +02:00
|
|
|
(JSONResponse _ m _) -> Left m
|
2021-09-06 21:02:39 +02:00
|
|
|
|
2021-09-17 17:36:58 +02:00
|
|
|
-- | Requests a list of all movies
|
2021-09-06 21:02:39 +02:00
|
|
|
getMovies :: IO (Either T.Text JSONListMovies)
|
2021-09-14 17:06:34 +02:00
|
|
|
getMovies = makeRequest "https://yts.mx/api/v2/list_movies.json"
|
|
|
|
(defaults & param "limit" .~ ["50"])
|
2021-09-06 21:02:39 +02:00
|
|
|
|
2021-09-17 17:36:58 +02:00
|
|
|
-- | Requests a list of all movies matching a query term
|
2021-09-06 21:02:39 +02:00
|
|
|
queryMovies :: T.Text -> IO (Either T.Text JSONListMovies)
|
2021-09-14 17:06:34 +02:00
|
|
|
queryMovies q = makeRequest "https://yts.mx/api/v2/list_movies.json"
|
|
|
|
(defaults & param "query_term" .~ [q]
|
|
|
|
& param "limit" .~ ["50"])
|