flickr-0.2: examples/Uploader.hs
module Main(main) where
import Flickr.API
import Flickr.Photos.Upload as Photos
import System.IO
import System.Environment
import Util.Authenticate
import Util.Keys
-- assume you have set the api_key and secret..but no token.
loginUser :: String -> FM (URLString, AuthToken)
loginUser p = do
(Just (u, mkT)) <- authenticateForWeb p
liftIO (putStrLn ("Authorization URL: " ++ u))
liftIO (putStrLn ("Hit return after user has authorized call"))
liftIO (hFlush stdout)
liftIO getLine
tok <- mkT
return (u, tok)
getAToken :: [String] -> FM (AuthToken, [String], APIKey)
getAToken ls = do
case ls of
("-t":x:ls1) -> do
liftIO $ putStrLn ("Using mini-token: " ++ x)
(Just (_, mkT)) <- authenticateForMobile "write"
tok <- mkT x
liftIO $ putStrLn ("Token: " ++ authToken tok)
return (tok, ls1, hsflickr_mobile_key)
_ -> do
(_,tok) <- withAPIKey hsflickr_web_key $ loginUser "write"
liftIO $ putStrLn ("Token: " ++ authToken tok)
return (tok, ls, hsflickr_web_key)
main :: IO ()
main = flick $ do
ls0 <- liftIO $ getArgs
(tok, ls,ak) <- getAToken ls0
case ls of
(photo_file:title:desc:tags) -> withAPIKey ak $ withAuthToken (authToken tok) $ do
pid <- Photos.uploadPhoto photo_file (Just title) (Just desc) tags nullUploadAttr
liftIO $ putStrLn ("Photo ID of uploaded photo: " ++ pid)
_ -> liftIO $ do
p <- getProgName
putStrLn ("Usage: " ++ p ++ " [-t mini-token] upload_file title description [tag]*")