module Instagram.Media (
getMedia
,getPopularMedia
,MediaSearchParams(..)
,searchMedia
)where
import Instagram.Monad
import Instagram.Types
import Data.Conduit
import qualified Network.HTTP.Types as HT
import Data.Default (Default(..))
import Data.Time.Clock.POSIX (POSIXTime)
import Data.Typeable (Typeable)
import Data.Maybe (isJust)
getMedia :: (MonadBaseControl IO m, MonadResource m) => MediaID
-> Maybe OAuthToken
-> InstagramT m (Envelope (Maybe Media))
getMedia mid token =getGetEnvelopeM ["/v1/media/",mid] token ([]::HT.Query)
getPopularMedia :: (MonadBaseControl IO m, MonadResource m) =>
Maybe OAuthToken
-> InstagramT m (Envelope [Media])
getPopularMedia token =getGetEnvelopeM ["/v1/media/popular"] token ([]::HT.Query)
data MediaSearchParams = MediaSearchParams {
mspLatitude :: Maybe Double
,mspLongitude :: Maybe Double
,mspDistance :: Maybe Integer
,mspMaxTimestamp :: Maybe POSIXTime
,mspMinTimestamp :: Maybe POSIXTime
}
deriving (Show,Typeable)
instance Default MediaSearchParams where
def=MediaSearchParams Nothing Nothing Nothing Nothing Nothing
instance HT.QueryLike MediaSearchParams where
toQuery (MediaSearchParams lat long dis maxT minT )=filter (isJust .snd)
["lat" ?+ lat
,"lng" ?+ long
,"distance" ?+ dis
,"max_timestamp" ?+ maxT
,"min_timestamp" ?+ minT
]
searchMedia :: (MonadBaseControl IO m, MonadResource m) =>
Maybe OAuthToken
-> MediaSearchParams
-> InstagramT m (Envelope [Media])
searchMedia =getGetEnvelopeM ["/v1/media/search"]