#lang scheme
(require (planet dvanhorn/flickr))
(current-api-key "9cf50ab165c6da4189e8b55f519ad18b")
(current-sec-key "41b0847d415c8359")
(require (lib "external.ss" "browser")
(lib "url.ss" "net")
(lib "file.ss"))
(define (exn:flickr:invalid-auth-token? exn)
(and (exn:flickr? exn)
(= 98 (exn:flickr-code exn))))
(define (authenticate!)
(parameterize ((signed? #t))
(match (flickr.auth.getFrob)
[(list (list 'frob '() frob))
(begin
(send-url (url->string (authorize-url (current-sec-key)
(cons 'api_key (current-api-key))
(cons 'frob frob)
(cons 'perms "read"))))
(read) (parameterize ((non-text-tags (list* 'auth (non-text-tags))))
(match (flickr.auth.getToken #:frob frob)
[(list (list 'auth '()
(list 'token '() token)
(list 'perms '() perms)
(list 'user (list (list 'fullname fn)
(list 'nsid nsid)
(list 'username user)))))
(put-preferences (list 'flickr:token) (list token))])))])))
(define (maybe-authenticate!)
(let ((auth-token (get-preference 'flickr:token)))
(if auth-token
(with-handlers ((exn:flickr:invalid-auth-token?
(lambda (exn) (authenticate!))))
(parameterize ((signed? #t))
(flickr.auth.checkToken #:auth_token auth-token)
(values)))
(authenticate!))))
(define (run-example!)
(maybe-authenticate!)
(parameterize ((non-text-tags (list* 'photos (non-text-tags)))
(signed? #t))
(match (flickr.photos.search #:user_id "me"
#:auth_token (get-preference 'flickr:token))
[(list (list-rest 'photos
(list-no-order (list 'page page)
(list 'pages pages)
(list 'perpage perpage)
(list 'total total))
(list 'photo
(list-no-order (list 'farm farm)
(list 'id id)
(list 'isfamily _)
(list 'isfriend _)
(list 'ispublic _)
(list 'owner owner)
(list 'secret secret)
(list 'server server)
(list 'title _)))
rest))
(send-url
(format "http://farm~a.static.flickr.com/~a/~a_~a_t.jpg"
farm server id secret))])))