flickr-0.2: Flickr/URLs.hs
--------------------------------------------------------------------
-- |
-- Module : Flickr.URLs
-- Description : flickr.urls - locate user photos and groups.
-- Copyright : (c) Sigbjorn Finne, 2008
-- License : BSD3
--
-- Maintainer : Sigbjorn Finne <sof@forkIO.com>
-- Stability : provisional
-- Portability : portable
--
-- The 'flickr.urls' API + convenience functions for creating
-- URL strings to various Flickr std-format URLs.
--------------------------------------------------------------------
module Flickr.URLs
( getGroup -- :: GroupID -> FM URLString
, getUserPhotos -- :: Maybe UserID -> FM URLString
, getUserProfile -- :: Maybe UserID -> FM URLString
, lookupGroup -- :: URLString -> FM Group
, lookupUser -- :: URLString -> FM User
, photoSourceURL -- :: PhotoDetails -> PhotoSize -> URLString
, userProfilePageURL -- :: User -> URLString
, userPhotoStreamURL -- :: User -> URLString
, userPhotoURL -- :: User -> PhotoID -> URLString
, userPhotosetsURL -- :: User -> URLString
, userPhotosetURL -- :: User -> PhotosetID -> URLString
) where
import Flickr.Monad
import Flickr.Types
import Flickr.Types.Import
import Data.Maybe
-- | Returns the url to a group's page.
getGroup :: GroupID -> FM URLString
getGroup gid = do
flickTranslate (toString "url") $
flickCall "flickr.urls.getGroup" [("group_id", gid)]
-- | Returns the url to a user's photos.
getUserPhotos :: Maybe UserID -> FM URLString
getUserPhotos mb = do
flickTranslate (toString "url") $
flickCall "flickr.urls.getUserPhotos"
(maybeToList (fmap (\ x -> ("user_id", x)) mb))
-- | Returns the url to a user's profile.
getUserProfile :: Maybe UserID -> FM URLString
getUserProfile mb = do
flickTranslate (toString "url") $
flickCall "flickr.urls.getUserProfile"
(maybeToList (fmap (\ x -> ("user_id", x)) mb))
-- | Returns a group NSID, given the url to a group's page or photo pool.
lookupGroup :: URLString -> FM Group
lookupGroup u = do
flickTranslate toGroup $
flickCall "flickr.urls.lookupGroup" [("url", u)]
-- | Returns a user NSID, given the url to a user's photos or profile.
lookupUser :: URLString -> FM User
lookupUser u = do
flickTranslate toUser $
flickCall "flickr.urls.lookupUser" [("url", u)]
photoSourceURL :: PhotoDetails -> PhotoSize -> URLString
photoSourceURL p sz =
case photoURL ph of
Just u -> u
_ ->
-- resisting the temptation to pull in the uri-template
-- package here...
"http://farm" ++ fid ++ ".static.flickr.com/" ++ sid ++
'/':pid ++ '_':sec ++ suff
where
ph = photoDetailsPhoto p
fid = fromMaybe "1" (photoFarm ph)
sid = fromMaybe "1" (fmap show $ photoServer ph)
pid = photoId ph
sec =
case sz of
PhotoSizeOriginal -> fromMaybe "1" (photoDetailsOrigSecret p)
_ -> photoSecret ph
suff =
case sz of
PhotoSizeMedium -> ".jpg"
PhotoSizeOriginal -> "_o." ++ fromMaybe "jpg" (photoDetailsOrigFormat p)
PhotoSizeSmallSquare -> "_s.jpg"
PhotoSizeThumb -> "_t.jpg"
PhotoSizeSmall -> "_m.jpg"
PhotoSizeLarge -> "_b.jpg"
userProfilePageURL :: User -> URLString
userProfilePageURL u =
"http://www.flickr.com/people/" ++ userId u ++ "/"
userPhotoStreamURL :: User -> URLString
userPhotoStreamURL u =
"http://www.flickr.com/photos/" ++ userId u ++ "/"
userPhotoURL :: User -> PhotoID -> URLString
userPhotoURL u pid =
"http://www.flickr.com/photos/" ++ userId u ++ '/':pid
userPhotosetsURL :: User -> URLString
userPhotosetsURL u =
"http://www.flickr.com/photos/" ++ userId u ++ "/sets/"
userPhotosetURL :: User -> PhotosetID -> URLString
userPhotosetURL u p =
"http://www.flickr.com/photos/" ++ userId u ++ "/sets/" ++ p