mirror of
https://github.com/sstent/node.git
synced 2026-01-27 07:33:13 +00:00
101 lines
2.5 KiB
JavaScript
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);
|
|
});
|
|
}
|
|
};
|