packages feed

flickr-0.3.0: examples/ShowTags.hs

{-
  List machine tag info example.
-}
module Main(main) where

import Flickr.API
import Util.Keys ( hsflickrAPIKey )

import Flickr.MachineTags as MT
import System.Environment

getTags :: String -> String -> FM [MachineTag]
getTags ns pre = do
  (_, xs) <- MT.getValues ns pre
  return xs

getPreds :: Maybe String -> FM [MachineTagPred]
getPreds ns = do
  (_, xs) <- MT.getPredicates ns
  return xs

getNSes :: Maybe String -> FM [Namespace]
getNSes mbP = do
  (_, xs) <- MT.getNamespaces mbP
  return xs

main :: IO ()
main = do
  ls <- getArgs
  case ls of
    [] -> do
      prg <- getProgName
      putStrLn ("Usage: " ++ prg ++ " {+[pred],-,namespace} [predicate]")
    [ns] -> do
      (l,ps) <- flickAPI hsflickrAPIKey $ 
             case ns of
	       ('+':pr) -> do
	         rs <- getNSes (if null pr then Nothing else Just pr) >>= return.(map namespaceName)
		 return ("namespaces with predicate: " ++ ns, rs)
	       _   -> do
	         rs <- getPreds (if ns == "-" then Nothing else Just ns) >>= return.(map mtPredName)
		 return ("predicates for NS: " ++ ns, rs)
      putStrLn ("Machine tag " ++ l)
      mapM_ (\ p -> putStrLn (' ':p)) ps
    (ns:pre:_) -> do
      ps <- flickAPI hsflickrAPIKey $ getTags ns pre
      putStrLn ("Machine tags for (NS,pred) pair: " ++ show (ns,pre))
      mapM_ (\ p -> putStrLn (' ':mTagValue p)) ps