follow-0.1.0.0: src/Follow/Digesters/Pocket.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Description: Send entries in the directory to Pocket.
This module contains the definition of a digester which sends all the
entries within the directory to Pocket (https://getpocket.com)
application.
In order to be able to send the information to Pocket, first the user
needs to authorize Follow application. For this reason, this module
also exports functions which deal with the authentication
process. However, as a user, the most straighforward way to
authenticate is to execute:
@
stack exec follow_pocket_auth
@
After the process is finished, the previous command will print an
access token which needs to be provided to the `digest` method.
-}
module Follow.Digesters.Pocket
( requestTokenStep
, accessTokenStep
, digest
) where
import Control.Monad.Catch (MonadThrow)
import Data.Aeson (Value, object, (.=))
import qualified Data.HashMap.Strict as HS
import Data.Maybe (fromJust, isJust)
import Data.Text (Text)
import Follow.Digesters.Pocket.Auth
import Follow.Types (Digester, Directory (..),
Entry (..))
import Network.HTTP.Req (MonadHttp, https, (/:))
digest ::
(MonadHttp m, MonadThrow m) => Text -> Digester (m (HS.HashMap Text Value))
digest token directory = jsonPostResponseBody url body jsonHeaders
where
url = https "getpocket.com" /: "v3" /: "send"
body =
object
[ "consumer_key" .= consumerKey
, "access_token" .= token
, "actions" .=
(entryToAction <$> filter (isJust . eURI) (dEntries directory))
]
entryToAction entry =
object
[ "action" .= ("add" :: Text)
, "url" .= ((fromJust $ eURI entry) :: Text)
]