Skip to content

Commit

Permalink
A first stab at reworking the flickr api so that passing the API key …
Browse files Browse the repository at this point in the history
…is redundant

Request for comments ;)
  • Loading branch information
ciaranj committed Jan 5, 2010
1 parent ad8d7cf commit 6a37971
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 45 deletions.
12 changes: 7 additions & 5 deletions examples/most_recent_photoset.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
var sys= require('sys');

require.paths.unshift('lib')
var flickr= require('flickr');
var FlickrAPI= require('flickr').FlickrAPI;

var API_KEY="";
var USER_NAME= ""
var USER_NAME= "";

flickr.people.findByUsername(USER_NAME,API_KEY).addErrback(fail).addCallback(function(user){
flickr.photosets.getList(user.id, API_KEY).addErrback(fail).addCallback(function(photosets){
flickr.photosets.getPhotos(photosets.photoset[0].id, API_KEY, ["url_sq", "url_m"]).addErrback(fail).addCallback(function(photoset){
var flickr= new FlickrAPI(API_KEY);

flickr.people.findByUsername(USER_NAME).addErrback(fail).addCallback(function(user){
flickr.photosets.getList(user.id).addErrback(fail).addCallback(function(photosets){
flickr.photosets.getPhotos(photosets.photoset[0].id, ["url_sq", "url_m"]).addErrback(fail).addCallback(function(photoset){
sys.puts("FOO: " + sys.inspect(photoset));
});
});
Expand Down
98 changes: 58 additions & 40 deletions lib/flickr.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ var sys = require("sys"),
http = require("http");
var flickr = http.createClient(80, "api.flickr.com");

function create_flickr_request(method, arguments) {
function create_flickr_request(method, arguments, api_key) {
var promise= new process.Promise()
var argumentString = "";

arguments.api_key= api_key;

for(var key in arguments) {
argumentString+= ("&" + key + "=" + arguments[key]);
}
Expand Down Expand Up @@ -37,48 +40,63 @@ function create_flickr_request(method, arguments) {
return promise;
}

exports.photos= {
getInfo: function(photo_id, api_key, secret) {
var arguments= {"api_key": api_key,
"photo_id": photo_id};
if( secret !== undefined ) arguments.secret= secret;

return create_flickr_request("flickr.photos.getInfo",
arguments);
}

flickr.People= function People(api_key) {
this.api_key= api_key;
};

exports.photosets= {
getList: function(user_id, api_key) {
return create_flickr_request("flickr.photosets.getList",
{"api_key": api_key,
"user_id": user_id});
},
getInfo: function(photoset_id, api_key) {
return create_flickr_request("flickr.photosets.getInfo",
{"api_key": api_key,
"photoset_id": photoset_id});
},
flickr.People.prototype.findByUsername= function(username){
return create_flickr_request("flickr.people.findByUsername",
{"username": username}, this.api_key);
};

getPhotos: function(photoset_id, api_key, extras, privacy_filter, per_page, page, media) {

var arguments= {"api_key": api_key,
"photoset_id": photoset_id};

if( extras !== undefined && extras.join !== undefined ) arguments.extras= extras.join(",");
if( privacy_filter !== undefined ) arguments.privacy_filter= privacy_filter;
if( per_page !== undefined ) arguments.per_page= per_page;
if( page !== undefined ) arguments.page= page;
if( media !== undefined ) arguments.media= media;
return create_flickr_request("flickr.photosets.getPhotos",
arguments);
}
flickr.Photos= function Photos(api_key) {
this.api_key= api_key;
};

exports.people= {
findByUsername: function(username, api_key) {
return create_flickr_request("flickr.people.findByUsername",
{"api_key": api_key,
"username": username});
}
flickr.Photos.prototype.getInfo= function(photo_id, secret) {
var arguments= {"photo_id": photo_id};
if( secret !== undefined ) arguments.secret= secret;

return create_flickr_request("flickr.photos.getInfo",
arguments,
this.api_key);
};

flickr.Photosets= function Photosets(api_key) {
this.api_key= api_key;
};

flickr.Photosets.prototype.getInfo= function(photoset_id) {
return create_flickr_request("flickr.photosets.getInfo",
{"photoset_id": photoset_id},
this.api_key);
};

flickr.Photosets.prototype.getList= function(user_id) {
return create_flickr_request("flickr.photosets.getList",
{"user_id": user_id},
this.api_key);
};

flickr.Photosets.prototype.getPhotos= function(photoset_id, api_key, extras, privacy_filter, per_page, page, media) {
var arguments= {"photoset_id": photoset_id};

if( extras !== undefined && extras.join !== undefined ) arguments.extras= extras.join(",");
if( privacy_filter !== undefined ) arguments.privacy_filter= privacy_filter;
if( per_page !== undefined ) arguments.per_page= per_page;
if( page !== undefined ) arguments.page= page;
if( media !== undefined ) arguments.media= media;
return create_flickr_request("flickr.photosets.getPhotos",
arguments, this.api_key);

};

flickr.FlickrAPI= function FlickrAPI(api_key) {
this.api_key= api_key;
this.people= new flickr.People(api_key);
this.photos= new flickr.Photos(api_key);
this.photosets= new flickr.Photosets(api_key);
};

exports.FlickrAPI = flickr.FlickrAPI;

0 comments on commit 6a37971

Please sign in to comment.