head	1.2;
access;
symbols
	tcllib-1-13:1.2
	tcllib-1-12:1.2;
locks; strict;
comment	@# @;


1.2
date	2009.02.06.17.11.55;	author afaupell;	state Exp;
branches;
next	1.1;

1.1
date	2009.02.05.03.27.53;	author afaupell;	state Exp;
branches;
next	;


desc
@@


1.2
log
@2009-02-06  Aaron Faupell  <afaupell@@users.sourceforge.net>

        twitter: forgot to check this one in
        flickr: fixed some broken or incomplete calls
@
text
@# documentation: http://www.flickr.com/services/api/

package require rest
package require md5

set flickr(_proto) {
   url http://api.flickr.com/services/rest/
   req_args { auth_token: api_key: secret: }
   auth { sign sign }
}

set flickr(activity.userComments) {
   copy _proto
   opt_args { per_page: page: }
   static_args { -method flickr.activity.userComments }
}

set flickr(activity.userPhotos) {
   copy _proto
   opt_args { per_page: page: timeframe: }
   static_args { -method flickr.activity.userPhotos }
}

set flickr(auth.getFrob) {
   url http://api.flickr.com/services/rest/
   req_args { api_key: secret: }
   static_args { -method flickr.auth.getFrob }
   auth { sign sign }
   check_result { {} {[regexp {stat fail} $result]} }
   post_transform { return [lindex $result 2 0 2 0 1] }
}

set flickr(auth.getToken) {
   url http://api.flickr.com/services/rest/
   req_args { api_key: frob: secret: }
   static_args { -method flickr.auth.getToken }
   check_result { {} {[regexp {stat fail} $result]} }
   auth { sign sign }
}

set flickr(blogs.getList) {
   copy _proto
   static_args { -method flickr.blogs.getList }
}

set flickr(contacts.getList) {
   copy _proto
   opt_args { per_page: page: filter: }
   static_args { -method flickr.contats.getList }
}

set flickr(contacts.getListRecentlyUploaded) {
   copy _proto
   opt_args { date_lastupload: filter: }
   static_args { -method flickr.contacts.getListRecentlyUploaded }
}

set flickr(contacts.getPublicList) {
   copy _proto
   req_args { api_key: user_id: }
   opt_args { per_page: page: }
   static_args { -method flickr.contacts.getPublicList }
}

set flickr(favorites.add) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: }
   static_args { -method flickr.favorites.add }
}

set flickr(favorites.getList) {
   copy _proto
   opt_args { user_id: min_fav_date: max_fav_date: extras: per_page: page: }
   static_args { -method flickr.favorites.getList }
}

set flickr(favorites.getPublicList) {
   copy _proto
   req_args { api_key: user_id: }
   opt_args { min_fav_date: max_fav_date: extras: per_page: page: }
   static_args { -method flickr.favorites.getPublicList }
}

set flickr(favorites.remove) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: }
   static_args { -method flickr.favorites.remove }
}

set flickr(groups.browse) {
   copy _proto
   opts_args { cat_id: }
   static_args { -method flickr.groups.browse }
}

set flickr(groups.getInfo) {
   copy _proto
   req_args { api_key: group_id: }
   opt_args { lang: }
   static_args { -method flickr.groups.getInfo }
}

set flickr(groups.search) {
   copy _proto
   req_args { api_key: text: }
   opt_args { per_page: page: }
   static_args { -method flickr.groups.search }
}

set flickr(interestingness.getList) {
   copy _proto
   req_args { api_key: }
   opt_args { date: extras: per_page: page: }
   static_args { -method flickr.interestingness.getList }
}

set flickr(people.findByEmail) {
   copy _proto
   req_args { api_key: find_email: }
   static_args { -method flickr.people.findByEmail }
}

set flickr(people.findByUsername) {
   copy _proto
   req_args { api_key: username: }
   static_args { -method flickr.people.findByUsername }
}

set flickr(people.getInfo) {
   copy _proto
   req_args { api_key: user_id: }
   static_args { -method flickr.people.getInfo }
}

set flickr(people.getPublicGroups) {
   copy _proto
   req_args { api_key: user_id: }
   static_args { -method flickr.people.getPublicGroups }
}

set flickr(people.getPublicPhotos) {
   copy _proto
   req_args { api_key: user_id: }
   opt_args { safe_search: extras: per_page: page: }
   static_args { -method flickr.people.getPublicPhotos }
}

set flickr(photos.addTags) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: tags: }
   static_args { -method flickr.photos.addTags }
}

set flickr(photos.delete) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: }
   static_args { -method flickr.photos.delete }
}

set flickr(photos.getContactsPhotos) {
   copy _proto
   opt_args { count: just_friends: single_photo: include_self: extras: }
   static_args { -method flickr.photos.getContactsPhotos }
}

set flickr(photos.getCounts) {
   copy _proto
   opt_args { dates: taken_dates: }
   static_args { -method flickr.photos.getCounts }
}

set flickr(photos.getExif) {
   copy _proto
   req_args { api_key: photo_id: }
   opt_args { secret: }
   static_args { -method flickr.photos.getExif }
}

set flickr(photos.getInfo) {
   copy _proto
   req_args { api_key: photo_id: }
   opt_args { secret: }
   static_args { -method flickr.photos.getInfo }
}

set flickr(photos.getRecent) {
   copy _proto
   req_args { api_key: }
   opt_args { per_page: page: extras: }
   static_args { -method flickr.photos.getRecent }
}

set flickr(photos.getSizes) {
   copy _proto
   req_args { api_key: photo_id: }
   static_args { -method flickr.photos.getSizes }
}

set flickr(photos.search) {
   copy _proto
   req_args { api_key: }
   opt_args { user_id: tags: tag_mode: text: min_upload_date: max_upload_date:
              min_taken_date: max_taken_date: license: sort: privacy_filter:
              extras: page: per_page: group_id: safe_search: }
   static_args { -method flickr.photos.search }
}

set flickr(photos.setTags) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: tags: }
   static_args { -method flickr.photos.setTags }
}

set flickr(photos.comments.addComment) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: comment_text: }
   static_args { -method flickr.photos.comments.addComment }
}

set flickr(photos.comments.getList) {
   copy _proto
   req_args { api_key: photo_id: }
   opt_args { min_comment_date: max_comment_date: }
   static_args { -method flickr.photos.comments.getList }
}

set flickr(photosets.addPhoto) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: photo_id: photoset_id: }
   static_args { -method flickr.photosets.addPhoto }
}

set flickr(photosets.create) {
   copy _proto
   body none
   method post
   req_args { auth_token: api_key: secret: title: primary_photo_id: }
   opt_args { description: }
   static_args { -method flickr.photosets.create }
}

set flickr(photosets.getInfo) {
   copy _proto
   req_args { api_key: photoset_id: }
   static_args { -method flickr.photosets.getInfo }
}

set flickr(photosets.getPhotos) {
   copy _proto
   req_args { api_key: photoset_id: }
   opt_args { per_page: page: media: extras: privacy_filter: }
   static_args { -method flickr.photosets.getPhotos }
}

set flickr(photosets.getList) {
   copy _proto
   req_args { api_key: user_id: }
   static_args { -method flickr.photosets.getList }
}


rest::create_interface flickr

proc ::flickr::sign {query} {
    set str [dict get $query secret]
    set query [dict remove $query secret]
    foreach x [lsort [dict keys $query]] {
        append str $x[dict get $query $x]
    }
    dict append query api_sig [md5::md5 -hex $str]
    return $query
}

proc ::flickr::loginLink {args} {
   set query [lindex [::rest::parse_opts {} {api_key: secret: perms: frob:} {} $args] 0]
   set query [::flickr::sign $query]
   return http://flickr.com/services/auth/?[eval ::http::formatQuery $query]
}
@


1.1
log
@initial commit
@
text
@d60 1
d67 2
d88 2
a113 31
set flickr() {
   copy _proto
   opt_args { per_page: page: }
   static_args { -method }
}



set flickr(reflection.getMethods) {
   url http://api.flickr.com/services/rest/
   req_args { api_key: }
   static_args { -method flickr.reflection.getMethods }
   check_result { {} {[regexp {stat fail} $result]} }
   post_transform {
      foreach {a b c} [lindex $result 2 0 2] {
         if {[lindex $c 0] == "method"} { lappend out [lindex $c 2 0 1] }
      }
      return $out
   }
}

set flickr(reflection.getMethodInfo) {
   url http://api.flickr.com/services/rest/
   req_args { api_key: method_name: }
   static_args { -method flickr.reflection.getMethodInfo }
   check_result { {} {[regexp {stat fail} $result]} }
   post_transform {
      return [lindex $result 2]
   }
}

d154 2
d162 2
d174 28
a201 1
set flickr(photos.) {
d203 11
a213 2
   opt_args { per_page: page: }
   static_args { -method flickr.photos. }
d216 1
a216 1
set flickr(photos.) {
d218 4
a221 2
   opt_args { per_page: page: }
   static_args { -method flickr.photos. }
d224 1
a224 1
set flickr(photos.) {
d226 4
a229 2
   opt_args { per_page: page: }
   static_args { -method flickr.photos. }
d232 1
a232 1
set flickr() {
d234 3
a236 2
   opt_args { per_page: page: }
   static_args { -method }
d239 7
d247 8
d256 5
a260 1
rest::create_interface flickr
d262 5
a266 13
proc ::flickr::build {key} {
   set methods [::flickr::reflection.getMethods -api_key $key]
   set call {url http://api.flickr.com/services/rest/ opt_args {} static_args {} req_args {}}
   foreach m flickr.photos.removeTag {
      set info [::flickr::reflection.getMethodInfo -api_key $key -method_name $m]
      puts $info
      set tmp [lindex $info 1]
      set name [dict get $tmp name]
      if {[dict get $tmp needslogin] == 1} { dict lappend $call req_args api_key: }
      if {[dict get $tmp needssigning] == 1} { dict lappend $call req_args secret:; dict set $call auth [list sign sign] }
      puts $call
   }
   #::rest::create_interface
d269 9
@

