bird-api
Version:
日本の野鳥 Web API
151 lines (132 loc) • 11.8 kB
JavaScript
(function() {
var Name, STAGE, _, atLeastContains, attachUpperTaxonomies, buildBinomen, getAPIbase, getAPIurl, host, meta, parseQuery, port, singular_for, upper_for, version;
Name = require('./models').Name;
_ = require('underscore');
STAGE = 'development';
meta = require('../package.json');
host = meta.settings[STAGE].host;
port = meta.settings[STAGE].port;
version = meta.version.split('.')[0];
upper_for = {
family: 'order',
genus: 'family',
species: 'genus',
subspecies: 'species'
};
singular_for = {
orders: 'order',
families: 'family',
genuses: 'genus',
species: 'species',
birds: 'species',
subspecies: 'subspecies'
};
getAPIbase = function() {
return "/v" + version;
};
getAPIurl = function(dir) {
return "http://" + host + (port ? ':' + port : void 0) + (getAPIbase()) + "/" + (encodeURI(dir));
};
buildBinomen = function(species_sc, genus_sc) {
var n;
n = genus_sc.length;
return genus_sc[0].toUpperCase() + genus_sc.slice(1, n).toLowerCase() + ' ' + species_sc.toLowerCase();
};
attachUpperTaxonomies = function(arg) {
var binomen, callback, fields, name, promise1, promise2, reference, taxonomies;
name = arg.name, binomen = arg.binomen, taxonomies = arg.taxonomies, reference = arg.reference, fields = arg.fields, callback = arg.callback;
if (taxonomies == null) {
taxonomies = [];
}
promise1 = Name.findById(reference.upper_id).select(fields).exec();
promise2 = Name.findById(reference.upper_id).exec();
return Promise.all([promise1, promise2]).then(function(arg1) {
var ref2Upper, upper, upper_id;
upper = arg1[0], ref2Upper = arg1[1];
if (reference.rank === 'species') {
binomen = buildBinomen(reference.sc, ref2Upper.sc);
}
upper_id = reference.upper_id;
if (upper_id != null) {
taxonomies.push(upper);
return attachUpperTaxonomies({
name: name,
binomen: binomen,
taxonomies: taxonomies,
reference: ref2Upper,
fields: fields,
callback: callback
});
} else {
return callback({
name: name,
binomen: binomen,
taxonomies: taxonomies
});
}
});
};
atLeastContains = function(A, B) {
var a, b, i, j, len, len1;
for (i = 0, len = A.length; i < len; i++) {
a = A[i];
for (j = 0, len1 = B.length; j < len1; j++) {
b = B[j];
if (a === b) {
return true;
}
}
}
return false;
};
parseQuery = function(req) {
var content, fields, limit, offset;
if (req.query.fields != null) {
fields = req.query.fields.split(',').join(' ');
} else {
fields = '';
}
if (req.query.offset != null) {
offset = parseInt(req.query.offset);
if (offset !== offset) {
offset = 0;
} else {
if (offset < 0) {
offset = 0;
}
}
} else {
offset = 0;
}
if (req.query.limit != null) {
limit = parseInt(req.query.limit);
if (limit !== limit) {
limit = false;
}
} else {
limit = false;
}
content = req.query.content;
if (content == null) {
content = '';
}
return {
fields: fields,
offset: offset,
limit: limit,
content: content
};
};
module.exports = {
host: host,
port: port,
version: version,
getAPIbase: getAPIbase,
getAPIurl: getAPIurl,
attachUpperTaxonomies: attachUpperTaxonomies,
atLeastContains: atLeastContains,
singular_for: singular_for,
parseQuery: parseQuery
};
}).call(this);
//# sourceMappingURL=data:application/json;base64,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TUFBTSxDQUFDLE9BQVAsR0FBaUI7SUFDYixNQUFBLElBRGE7SUFFYixNQUFBLElBRmE7SUFHYixTQUFBLE9BSGE7SUFJYixZQUFBLFVBSmE7SUFLYixXQUFBLFNBTGE7SUFNYix1QkFBQSxxQkFOYTtJQU9iLGlCQUFBLGVBUGE7SUFRYixjQUFBLFlBUmE7SUFTYixZQUFBLFVBVGE7O0FBbkhqQiIsImZpbGUiOiJ1dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIjIGFwcC9saWJcblxuTmFtZSAgICA9IHJlcXVpcmUoJy4vbW9kZWxzJykuTmFtZVxuXyAgICAgICA9IHJlcXVpcmUgJ3VuZGVyc2NvcmUnXG5cbiMgbWV0YSBpbmZvcm1hdGlvbiBzZXR0aW5nc1xuU1RBR0UgPSAnZGV2ZWxvcG1lbnQnXG5tZXRhICAgID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJylcbmhvc3QgICAgPSBtZXRhLnNldHRpbmdzW1NUQUdFXS5ob3N0XG5wb3J0ICAgID0gbWV0YS5zZXR0aW5nc1tTVEFHRV0ucG9ydFxudmVyc2lvbiA9IG1ldGEudmVyc2lvbi5zcGxpdCgnLicpWzBdXG5cbiMjIHRheG9ub21pZXMgcmVsYXRpb25zaGlwc1xudXBwZXJfZm9yID1cbiAgICBmYW1pbHk6ICAgICAnb3JkZXInXG4gICAgZ2VudXM6ICAgICAgJ2ZhbWlseSdcbiAgICBzcGVjaWVzOiAgICAnZ2VudXMnXG4gICAgc3Vic3BlY2llczogJ3NwZWNpZXMnXG4jIyB0YW9ub215IGlkaW9tc1xuc2luZ3VsYXJfZm9yID1cbiAgICBvcmRlcnM6ICAgICAnb3JkZXInXG4gICAgZmFtaWxpZXM6ICAgJ2ZhbWlseSdcbiAgICBnZW51c2VzOiAgICAnZ2VudXMnXG4gICAgc3BlY2llczogICAgJ3NwZWNpZXMnXG4gICAgYmlyZHM6ICAgICAgJ3NwZWNpZXMnICAjIGFsaWFzXG4gICAgc3Vic3BlY2llczogJ3N1YnNwZWNpZXMnXG5cblxuZ2V0QVBJYmFzZSA9IC0+XG4gICAgXCIvdiN7dmVyc2lvbn1cIlxuXG5nZXRBUEl1cmwgPSAoZGlyKSAtPlxuICAgIFwiaHR0cDovLyN7aG9zdH0je2lmIHBvcnQgdGhlbiAnOicgKyBwb3J0fSN7Z2V0QVBJYmFzZSgpfS8je2VuY29kZVVSSSBkaXJ9XCJcblxuYnVpbGRCaW5vbWVuID0gKHNwZWNpZXNfc2MsIGdlbnVzX3NjKSAtPlxuICAgIG4gPSBnZW51c19zYy5sZW5ndGhcbiAgICByZXR1cm4gZ2VudXNfc2NbMF0udG9VcHBlckNhc2UoKSArIGdlbnVzX3NjWzEuLi5uXS50b0xvd2VyQ2FzZSgpICsgJyAnICsgc3BlY2llc19zYy50b0xvd2VyQ2FzZSgpXG5cbiMgZmluZCB1cHBlciB0YXhvbm9taWVzIGZyb20gZGJcbmF0dGFjaFVwcGVyVGF4b25vbWllcyA9ICh7bmFtZSwgYmlub21lbiwgdGF4b25vbWllcywgcmVmZXJlbmNlLCBmaWVsZHMsIGNhbGxiYWNrfSkgLT5cbiAgICB1bmxlc3MgdGF4b25vbWllcz8gdGhlbiB0YXhvbm9taWVzID0gW11cblxuICAgIHByb21pc2UxID0gTmFtZVxuICAgICAgICAuZmluZEJ5SWQgcmVmZXJlbmNlLnVwcGVyX2lkXG4gICAgICAgIC5zZWxlY3QgZmllbGRzXG4gICAgICAgIC5leGVjKClcblxuICAgIHByb21pc2UyID0gTmFtZVxuICAgICAgICAuZmluZEJ5SWQgcmVmZXJlbmNlLnVwcGVyX2lkXG4gICAgICAgIC5leGVjKClcblxuICAgIFByb21pc2UuYWxsIFtwcm9taXNlMSwgcHJvbWlzZTJdXG4gICAgICAgIC50aGVuIChbdXBwZXIsIHJlZjJVcHBlcl0pIC0+XG5cbiAgICAgICAgICAgIGlmIHJlZmVyZW5jZS5yYW5rIGlzICdzcGVjaWVzJ1xuICAgICAgICAgICAgICAgIGJpbm9tZW4gPSBidWlsZEJpbm9tZW4gcmVmZXJlbmNlLnNjLCByZWYyVXBwZXIuc2NcblxuICAgICAgICAgICAgdXBwZXJfaWQgPSByZWZlcmVuY2UudXBwZXJfaWRcbiAgICAgICAgICAgIGlmIHVwcGVyX2lkP1xuICAgICAgICAgICAgICAgIHRheG9ub21pZXMucHVzaCB1cHBlclxuICAgICAgICAgICAgICAgIGF0dGFjaFVwcGVyVGF4b25vbWllcyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgYmlub21lblxuICAgICAgICAgICAgICAgICAgICB0YXhvbm9taWVzXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTpyZWYyVXBwZXJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrIHtuYW1lLGJpbm9tZW4sIHRheG9ub21pZXN9XG5cblxuXG5cbiMgY2hlY2sgaWYgZWxlbWVudHMgaW4gYXJyYXkgYEFgIGVxdWFsIHRoYXQgb2YgYEJgXG5hdExlYXN0Q29udGFpbnMgPSAoQSwgQikgLT5cbiAgICBmb3IgYSBpbiBBXG4gICAgICAgIGZvciBiIGluIEJcbiAgICAgICAgICAgIGlmIGEgaXMgYiB0aGVuIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG5cblxucGFyc2VRdWVyeSA9IChyZXEpIC0+XG4gICAgI3BhcnNlIGBmaWVsZHNgIHF1ZXJ5XG4gICAgaWYgcmVxLnF1ZXJ5LmZpZWxkcz9cbiAgICAgICAgZmllbGRzID0gcmVxLnF1ZXJ5LmZpZWxkc1xuICAgICAgICAgICAgLnNwbGl0ICcsJ1xuICAgICAgICAgICAgLmpvaW4gJyAnXG4gICAgZWxzZVxuICAgICAgICBmaWVsZHMgPSAnJ1xuXG4gICAgIyBwYXJzZSBgb2Zmc2V0YCBxdWVyeVxuICAgIGlmIHJlcS5xdWVyeS5vZmZzZXQ/XG4gICAgICAgIG9mZnNldCA9IHBhcnNlSW50IHJlcS5xdWVyeS5vZmZzZXRcbiAgICAgICAgaWYgb2Zmc2V0IGlzbnQgb2Zmc2V0XG4gICAgICAgICAgICBvZmZzZXQgPSAwXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIG9mZnNldCA8IDAgdGhlbiBvZmZzZXQgPSAwXG4gICAgZWxzZVxuICAgICAgICBvZmZzZXQgPSAwXG5cbiAgICAjIHBhcnNlIGBsaW1pdGAgcXVlcnlcbiAgICBpZiByZXEucXVlcnkubGltaXQ/XG4gICAgICAgIGxpbWl0ID0gcGFyc2VJbnQgcmVxLnF1ZXJ5LmxpbWl0XG4gICAgICAgIGlmIGxpbWl0IGlzbnQgbGltaXRcbiAgICAgICAgICAgIGxpbWl0ID0gZmFsc2VcbiAgICBlbHNlXG4gICAgICAgIGxpbWl0ID0gZmFsc2VcblxuICAgICMgcGFyc2UgYGNvbnRlbnRgIHF1ZXJ5XG4gICAgY29udGVudCA9IHJlcS5xdWVyeS5jb250ZW50XG4gICAgdW5sZXNzIGNvbnRlbnQ/IHRoZW4gY29udGVudCA9ICcnXG5cblxuICAgIHJldHVybiB7IGZpZWxkcywgb2Zmc2V0LCBsaW1pdCwgY29udGVudCB9XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgaG9zdFxuICAgIHBvcnRcbiAgICB2ZXJzaW9uXG4gICAgZ2V0QVBJYmFzZVxuICAgIGdldEFQSXVybFxuICAgIGF0dGFjaFVwcGVyVGF4b25vbWllc1xuICAgIGF0TGVhc3RDb250YWluc1xuICAgIHNpbmd1bGFyX2ZvclxuICAgIHBhcnNlUXVlcnlcbn1cbiJdfQ==