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.Conduit
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
-> OAuthToken
-> RecentParams
-> InstagramT m (Envelope [Media])
getRecent uid=getGetEnvelope ["/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"]