fb-0.12.8: src/Facebook/FQL.hs
{-# LANGUAGE FlexibleContexts, OverloadedStrings #-}
module Facebook.FQL
( fqlQuery
, FQLTime(..)
) where
import Control.Monad.Trans.Control (MonadBaseControl)
import Data.Text (Text)
import Data.Time (UTCTime)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
import qualified Data.Aeson as A
import qualified Data.Conduit as C
import Facebook.Types
import Facebook.Monad
import Facebook.Base
import Facebook.Graph
-- | Query the Facebook Graph using FQL.
fqlQuery :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>
Text -- ^ FQL Query
-> Maybe (AccessToken anyKind) -- ^ Optional access token
-> FacebookT anyAuth m (Pager a)
fqlQuery fql mtoken =
runResourceInFb $ do
let query = ["q" #= fql]
asJson =<< fbhttp =<< fbreq "/fql" mtoken query
-- | @newtype@ wrapper around 'UTCTime' that is able to parse
-- FQL's time representation as seconds since the Unix epoch.
newtype FQLTime = FQLTime { unFQLTime :: UTCTime }
deriving (Eq, Ord, Show)
instance A.FromJSON FQLTime where
parseJSON = fmap ( FQLTime
. posixSecondsToUTCTime
. fromInteger)
. A.parseJSON