module Instagram.Users (
getUser
, SelfFeedParams(..)
, getSelfFeed
, RecentParams(..)
, getRecent
, SelfLikedParams(..)
, getSelfLiked
, UserSearchParams(..)
, searchUsers
) where
import Instagram.Monad
import Instagram.Types
import Data.Time.Clock.POSIX (POSIXTime)
import Data.Typeable (Typeable)
import qualified Network.HTTP.Types as HT
import Data.Maybe (isJust)
import qualified Data.Text as T (Text)
import Data.Default
getUser :: (MonadBaseControl IO m, MonadResource m)
=> UserID
-> Maybe OAuthToken
-> InstagramT m (Envelope (Maybe User))
getUser uid token = getGetEnvelopeM ["/v1/users/",uid] token ([]::HT.Query)
data SelfFeedParams = SelfFeedParams {
sfpCount :: Maybe Integer,
sfpMaxID :: Maybe T.Text,
sfpMinId :: Maybe T.Text
}
deriving (Show,Typeable)
instance Default SelfFeedParams where
def = SelfFeedParams Nothing Nothing Nothing
instance HT.QueryLike SelfFeedParams where
toQuery (SelfFeedParams c maxI minI) = filter (isJust .snd)
[ "count" ?+ c
, "max_id" ?+ maxI
, "min_id" ?+ minI
]
getSelfFeed :: (MonadBaseControl IO m, MonadResource m)
=> OAuthToken
-> SelfFeedParams
-> InstagramT m (Envelope [Media])
getSelfFeed = getGetEnvelope ["/v1/users/self/feed/"]
data RecentParams = RecentParams {
rpCount :: Maybe Integer,
rpMaxTimestamp :: Maybe POSIXTime,
rpMinTimestamp :: Maybe POSIXTime,
rpMaxID :: Maybe T.Text,
rpMinId :: Maybe T.Text
}
deriving (Show,Typeable)
instance Default RecentParams where
def = RecentParams Nothing Nothing Nothing Nothing Nothing
instance HT.QueryLike RecentParams where
toQuery (RecentParams c maxT minT maxI minI) = filter (isJust .snd)
[ "count" ?+ c
, "max_timestamp" ?+ maxT
, "min_timestamp" ?+ minT
, "max_id" ?+ maxI
, "min_id" ?+ minI
]
getRecent :: (MonadBaseControl IO m, MonadResource m)
=> UserID
-> Maybe OAuthToken
-> RecentParams
-> InstagramT m (Envelope [Media])
getRecent uid = getGetEnvelopeM ["/v1/users/",uid,"/media/recent/"]
data SelfLikedParams = SelfLikedParams {
slpCount :: Maybe Integer,
slpMaxLikeID :: Maybe T.Text
}
deriving (Show,Typeable)
instance Default SelfLikedParams where
def = SelfLikedParams Nothing Nothing
instance HT.QueryLike SelfLikedParams where
toQuery (SelfLikedParams c maxI) = filter (isJust .snd)
[ "count" ?+ c
, "max_like_id" ?+ maxI
]
getSelfLiked :: (MonadBaseControl IO m, MonadResource m)
=> OAuthToken
-> SelfLikedParams
-> InstagramT m (Envelope [Media])
getSelfLiked = getGetEnvelope ["/v1/users/self/media/liked"]
data UserSearchParams = UserSearchParams {
uspQuery :: T.Text,
uspCount :: Maybe Integer
}
deriving (Show,Typeable)
instance HT.QueryLike UserSearchParams where
toQuery (UserSearchParams q c ) = filter (isJust .snd)
[ "count" ?+ c
, "q" ?+ q
]
searchUsers :: (MonadBaseControl IO m, MonadResource m)
=> Maybe OAuthToken
-> UserSearchParams
-> InstagramT m (Envelope [User])
searchUsers = getGetEnvelopeM ["/v1/users/search"]