module Facebook.Object.Page
( Page(..)
, getPage
, searchPages
) where
import Control.Applicative
import Control.Monad (mzero)
import Control.Monad.Trans.Control (MonadBaseControl)
import Data.Aeson ((.:), (.:?))
import qualified Data.Aeson as A
import qualified Data.Conduit as C
import Data.Text (Text)
import Data.Typeable (Typeable)
import Facebook.Graph
import Facebook.Monad
import Facebook.Types
data Page = Page { pageId :: Id
, pageName :: Maybe Text
, pageLink :: Maybe Text
, pageCategory :: Maybe Text
, pageIsPublished :: Maybe Bool
, pageCanPost :: Maybe Bool
, pageLikes :: Maybe Integer
, pageLocation :: Maybe Location
, pagePhone :: Maybe Text
, pageCheckins :: Maybe Integer
, pagePicture :: Maybe Text
, pageWebsite :: Maybe Text
, pageTalkingAboutCount :: Maybe Integer
} deriving (Eq, Ord, Show, Read, Typeable)
instance A.FromJSON Page where
parseJSON (A.Object v) =
Page <$> v .: "id"
<*> v .:? "name"
<*> v .:? "link"
<*> v .:? "category"
<*> v .:? "is_published"
<*> v .:? "can_post"
<*> v .:? "likes"
<*> v .:? "location"
<*> v .:? "phone"
<*> v .:? "checkin"
<*> v .:? "picture"
<*> v .:? "website"
<*> v .:? "talking_about_count"
parseJSON _ = mzero
getPage :: (C.MonadResource m, MonadBaseControl IO m)
=> Id
-> [Argument]
-> Maybe UserAccessToken
-> FacebookT anyAuth m Page
getPage id_ = getObject $ "/" <> idCode id_
searchPages :: (C.MonadResource m, MonadBaseControl IO m)
=> Text
-> [Argument]
-> Maybe UserAccessToken
-> FacebookT anyAuth m (Pager Page)
searchPages = searchObjects "page"