ig-0.6: src/Instagram/Relationships.hs
{-# LANGUAGE FlexibleContexts, OverloadedStrings #-}
-- | relationship handling
-- <http://instagram.com/developer/endpoints/relationships/#>
module Instagram.Relationships (
getFollows
,getFollowedBy
,getFollowsParams
,getFollowedByParams
,getRequestedBy
,getRelationship
,setRelationShip
,RelationShipAction(..)
,FollowParams(..)
)where
import Instagram.Monad
import Instagram.Types
import Data.Typeable (Typeable)
import Data.String
import qualified Network.HTTP.Types as HT
import Data.Char (toLower)
-- | Get the list of users this user follows.
getFollows :: (MonadBaseControl IO m, MonadResource m) => UserID
-> Maybe OAuthToken
-> InstagramT m (Envelope [User])
getFollows uid token =getGetEnvelopeM ["/v1/users/",uid,"/follows"] token ([]::HT.Query)
-- | Get the list of users this user is followed by.
getFollowedBy :: (MonadBaseControl IO m, MonadResource m) => UserID
-> Maybe Int
-> Maybe OAuthToken
-> InstagramT m (Envelope [User])
getFollowedBy uid Nothing token =getGetEnvelopeM ["/v1/users/",uid,"/followed-by"] token ([]::HT.Query)
getFollowedBy uid (Just count) token =getGetEnvelopeM ["/v1/users/",uid,"/followed-by"]
token
([("count", Just $ fromString $ show count)]::HT.Query)
data FollowParams = FollowParams {
fpCount :: Int
} deriving (Show, Read, Eq, Ord)
instance HT.QueryLike FollowParams where
toQuery FollowParams{fpCount=count} =
["count" ?+ show count]
-- | Get the list of users this user follows.
getFollowsParams :: (MonadBaseControl IO m, MonadResource m) => UserID
-> Maybe OAuthToken
-> FollowParams
-> InstagramT m (Envelope [User])
getFollowsParams uid token fp =
getGetEnvelopeM ["/v1/users/",uid,"/follows"] token fp
-- | Get the list of users this user is followed by.
getFollowedByParams :: (MonadBaseControl IO m, MonadResource m) => UserID
-> Maybe OAuthToken
-> FollowParams
-> InstagramT m (Envelope [User])
getFollowedByParams uid token fp =
getGetEnvelopeM ["/v1/users/",uid,"/followed-by"] token fp
-- | List the users who have requested this user's permission to follow.
getRequestedBy :: (MonadBaseControl IO m, MonadResource m) =>
OAuthToken
-> InstagramT m (Envelope [User])
getRequestedBy token =getGetEnvelope ["/v1/users/self/requested-by"] token ([]::HT.Query)
-- | Get information about a relationship to another user.
getRelationship :: (MonadBaseControl IO m, MonadResource m) => UserID
-> OAuthToken
-> InstagramT m (Envelope Relationship)
getRelationship uid token =getGetEnvelope ["/v1/users/",uid,"/relationship"] token ([]::HT.Query)
-- | relationship action
data RelationShipAction = Follow
| Unfollow
| Block
| Unblock
| Approve
| Deny
deriving (Show,Read,Eq,Ord,Bounded,Enum,Typeable)
instance HT.QueryLike RelationShipAction where
toQuery a=
["action" ?+ map toLower (show a)]
-- | Modify the relationship between the current user and the target user.
setRelationShip :: (MonadBaseControl IO m, MonadResource m) => UserID
-> OAuthToken
-> RelationShipAction
-> InstagramT m (Envelope (Maybe Relationship))
setRelationShip uid=getPostEnvelope ["/v1/users/",uid,"/relationship"]