Files
node/node_modules/derby-examples/gallery/lib/server/flickr.js
2012-05-30 23:00:06 -04:00

101 lines
2.5 KiB
JavaScript

// Generated by CoffeeScript 1.3.1
var FLICKR_API, Flickr, request;
request = require('request');
FLICKR_API = 'http://api.flickr.com/services/rest/';
exports.setup = function(store, options) {
var flickr;
flickr = new Flickr(options);
store.route('get', 'flickr.user.id_*.photos.pages.*', function(username, page, done) {
return flickr.userPublicPhotos(username, page, done);
});
return store.route('get', 'flickr.photoset.id_*.photos.pages.*', function(id, page, done) {
return flickr.setPhotos(id, page, done);
});
};
Flickr = function(options) {
this.key = options.key;
this.userIds = {};
};
Flickr.prototype = {
get: function(qs, callback) {
qs.format = 'json';
qs.api_key = this.key;
qs.per_page = 20;
qs.extras = 'o_dims';
return request({
url: FLICKR_API,
qs: qs
}, function(err, res, body) {
var data, match;
if (err) {
return callback(err);
}
if (!((match = /jsonFlickrApi\((.*)\)/.exec(body)) && (body = match[1]))) {
return callback(new Erorr('Unknown Flickr response'));
}
data = JSON.parse(body);
if (data.stat !== 'ok') {
return callback(new Error(data.message));
}
return callback(null, data);
});
},
userId: function(username, callback) {
var id, qs,
_this = this;
if (id = this.userIds[username]) {
return callback(null, id);
}
qs = {
method: 'flickr.people.findByUsername',
username: username
};
return this.get(qs, function(err, body) {
if (err) {
return callback(err);
}
id = _this.userIds[username] = body.user.id;
return callback(null, id);
});
},
userPublicPhotos: function(username, page, callback) {
var _this = this;
return this.userId(username, function(err, user_id) {
var qs;
if (err) {
return callback(err);
}
qs = {
method: 'flickr.people.getPublicPhotos',
user_id: user_id,
page: +page + 1
};
return _this.get(qs, function(err, body) {
if (err) {
return callback(err);
}
return callback(null, body.photos.photo, -1);
});
});
},
setPhotos: function(photoset_id, page, callback) {
var qs;
qs = {
method: 'flickr.photosets.getPhotos',
photoset_id: photoset_id,
page: +page + 1
};
return this.get(qs, function(err, body) {
if (err) {
return callback(err);
}
return callback(null, body.photoset.photo, -1);
});
}
};