UNPKG

albion-api

Version:

A basic API implementation for Albion online using the limited gameinfo API.

278 lines (255 loc) 7.37 kB
var debug = require('debug')('AlbionAPI'); var async = require('async'); var request = require('request'); var BASE_URL = process.env.ALBION_API_BASE || 'https://gameinfo.albiononline.com/api/gameinfo'; /** * baseRequest - description * * @param {type} uri description * @param {callback} cb description * @private */ function baseRequest(uri, cb) { var url = `${BASE_URL}${uri}`; request(url, function (error, response, body) { debug(`Url: ${url} statusCode: ${response && response.statusCode}`); if(error || (response && response.statusCode === 404)) { cb(error || response); } cb(null, JSON.parse(body)); }); } /** * getServerStatus - description * * @param {callback} cb description */ function getServerStatus(cb) { async.parallel({ live: (cb) => { request('http://live.albiononline.com/status.txt', (error, response, body) => { if(error) { return cb(error); } cb(null, JSON.parse(body.trim())); }); }, staging: (cb) => { request('http://staging.albiononline.com/status.txt', (error, response, body) => { if(error) { return cb(error); } cb(null, JSON.parse(body.trim())); }); } }, (e, rs) => { if(e) { return cb(e); } cb(null, { live: { status: rs.live.status, message: rs.live.message, }, staging: { status: rs.staging.status, message: rs.staging.message, } }); }); } // -- Searching // /** * search - description * * @param {string} query description * @param {callback} cb description */ function search(query, cb) { debug(`Searching for: ${query}`); baseRequest(`/search?q=${query}`, cb); } // -- Events / Kills // /** * getRecentEvents - description * * @param {object} opts description * @param {callback} cb description */ function getRecentEvents(opts, cb) { opts = opts || {}; query = "?"; if(opts.limit) { query += `limit=${opts.limit}`; } if(opts.offset) { query += `offset=${opts.offset}`; } // https://gameinfo.albiononline.com/api/gameinfo/events?limit=51&offset=0 baseRequest(`/events`, cb); } var getRecentKills = getRecentEvents; /** * getEventDetails - description * * @param {string} eventId description * @param {callback} cb description */ function getEventDetails(eventId, cb) { // https://gameinfo.albiononline.com/api/gameinfo/events/2484174 baseRequest(`/events/${eventId}`, cb); } var getKillDetails = getEventDetails; /** * getEventsBetween - description * * @param {string} eventId1 description * @param {string} eventId2 description * @param {callback} cb description */ function getEventsBetween(eventId1, eventId2, cb) { // https://gameinfo.albiononline.com/api/gameinfo/events/p_BN_ZrdSwSgtOdebp-8mw/history/4RpreMJdRqev6t6dm1zKUg baseRequest(`/events/${eventId1}/history/${eventId2}`, cb); } var getPlayerFued = getEventsBetween; // -- Guild // /** * getGuildInfo - description * * @param {string} guildId description * @param {callback} cb description */ function getGuildInfo(guildId, cb) { // https://gameinfo.albiononline.com/api/gameinfo/guilds/vFUVDtWgQwK-4NNwf0xo_w baseRequest(`/guilds/${guildId}`, cb); } /** * getGuildData - description * * @param {string} guildId description * @param {callback} cb description */ function getGuildData(guildId, cb) { // https://gameinfo.albiononline.com/api/gameinfo/guilds/vFUVDtWgQwK-4NNwf0xo_w/data baseRequest(`/guilds/${guildId}/data`, cb); } /** * getGuildTopKills - description * * @param {string} guildId description * @param {object} opts description * @param {callback} cb description */ function getGuildTopKills(guildId, opts, cb) { opts = opts || {}; query = "?"; if(opts.limit) { query += `limit=${opts.limit}`; } if(opts.offset) { query += `offset=${opts.offset}`; } if(opts.range) { // week, lastWeek, month, lastMonth query += `range=${opts.range}`; } // https://gameinfo.albiononline.com/api/gameinfo/guilds/vFUVDtWgQwK-4NNwf0xo_w/data baseRequest(`/guilds/${guildId}/top${query}`, cb); } /** * getGuildStats - description * * @param {string} guildId description * @param {callback} cb description */ function getGuildStats(guildId, cb) { //https://gameinfo.albiononline.com/api/gameinfo/guilds/3InalPCfQL-GAmGZ-XafhQ/stats baseRequest(`/guilds/${guildId}/stats`, cb); } /** * getGuildMembers - description * * @param {string} guildId description * @param {callback} cb description */ function getGuildMembers(guildId, cb) { // https://gameinfo.albiononline.com/api/gameinfo/guilds/vFUVDtWgQwK-4NNwf0xo_w/members baseRequest(`/guilds/${guildId}/members`, cb); } /** * getGuildFued - description * * @param {string} guildId1 description * @param {string} guildId2 description * @param {callback} cb description */ function getGuildFued(guildId1, guildId2, cb) { // https://gameinfo.albiononline.com/api/gameinfo/guilds/r-pjy3pRSMWx-OKqwT-SBg/feud/55EvzyTZQsG70sOuoGXgog baseRequest(`/guilds/${guildId1}/fued/${guildId2}`, cb); } // -- Player // /** * getPlayerInfo - description * * @param {string} playerId description * @param {callback} cb description */ function getPlayerInfo(playerId, cb) { // https://gameinfo.albiononline.com/api/gameinfo/players/Nubya8P6QWGhI6hDLQHIQQ baseRequest(`/players/${playerId}`, cb); } /** * getPlayerTopKills - description * * @param {string} playerId description * @param {object} opts Options * @param {callback} cb description */ function getPlayerTopKills(playerId, opts, cb) { // https://gameinfo.albiononline.com/api/gameinfo/players/Nubya8P6QWGhI6hDLQHIQQ opts = opts || {}; query = "?"; if(opts.limit) { query += `limit=${opts.limit}`; } if(opts.offset) { query += `offset=${opts.offset}`; } if(opts.range) { // week, lastWeek, month, lastMonth query += `range=${opts.range}`; } baseRequest(`/players/${playerId}/topkills${query}`, cb); } /** * getPlayerSoloKills - description * * @param {string} playerId description * @param {object} opts Options * @param {callback} cb description */ function getPlayerSoloKills(playerId, opts, cb) { // https://gameinfo.albiononline.com/api/gameinfo/players/Nubya8P6QWGhI6hDLQHIQQ opts = opts || {}; query = "?"; if(opts.limit) { query += `limit=${opts.limit}`; } if(opts.offset) { query += `offset=${opts.offset}`; } if(opts.range) { // week, lastWeek, month, lastMonth query += `range=${opts.range}`; } baseRequest(`/players/${playerId}/solokills${query}`, cb); } module.exports = { search, getServerStatus, getRecentKills, getKillDetails, getPlayerFued, getRecentEvents, getEventDetails, getEventsBetween, getGuildInfo, getGuildData, getGuildTopKills, getGuildStats, getGuildMembers, getGuildFued, getPlayerInfo, getPlayerSoloKills, getPlayerTopKills };