// 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); }); } };