overwatch-api-server
Version:
An Unoffical Overwatch HTTP API
1 lines • 11.6 kB
Source Map (JSON)
{"version":3,"sources":["profile.js"],"names":["MAX_RETRIES","getHTML","platform","region","tag","callback","url","options","uri","encodeURI","encoding","parseHTML","results","$","cheerio","load","isFound","text","Error","parsed","user","portrait","attr","title","permission","endorsementImage","quickplayWonEl","next","html","quickplayPlayedEl","quickplayTimePlayedEl","compWonEl","compPlayedEl","compLostEl","compDrawEl","compTimePlayedEl","compRankEls","find","r","each","i","elem","rankImgSrc","roleImgSrc","rankParsed","split","pop","role","rank","replace","obj","icon","ranks","transform","won","lost","draw","played","time","quickplay","trim","competitive","json","username","endorsement","games","parseInt","undefined","win_rate","parseFloat","toFixed","playtime","async","auto","apply","err"],"mappings":"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","sourceRoot":"C:\\Users\\Alf\\Source\\overwatch-api\\api\\src\\parser\\","sourcesContent":["import async from 'async';\nimport cheerio from 'cheerio';\nimport { retryRequest } from './utils';\n\nconst MAX_RETRIES = 3;\n\n// Get HTML from playoverwatch career page.\nfunction getHTML(platform, region, tag, callback) {\n const url = `https://overwatch.blizzard.com/en-us/career/${tag}/`\n\n const options = {\n uri: encodeURI(url),\n encoding: 'utf8'\n }\n return retryRequest(options, MAX_RETRIES, callback);\n}\n\n// Begin html parsing.\nfunction parseHTML(results, callback) {\n const $ = cheerio.load(results.getHTML);\n\n // Check if profile exists.\n const isFound = $('.heading').text() !== 'Page Not Found';\n if (!isFound) {\n return callback(new Error('Profile not found'));\n }\n\n const parsed = {\n user: $('.Profile-player--name').text(),\n portrait: $('.Profile-player--portrait').attr('src'),\n title: $('.Profile-player---title').text(),\n permission: $('.Profile-private---msg').text(),\n endorsementImage: $('.Profile-playerSummary--endorsement').attr('src'),\n quickplayWonEl: $('.stats.quickPlay-view p:contains(\"Games Won\")').next().html(),\n quickplayPlayedEl: $('.stats.quickPlay-view p:contains(\"Games Played\")').next().html(),\n quickplayTimePlayedEl: $('.stats.quickPlay-view p:contains(\"Time Played\")').next().html(),\n compWonEl: $('.stats.competitive-view p:contains(\"Games Won\")').next().html(),\n compPlayedEl: $('.stats.competitive-view p:contains(\"Games Played\")').next().html(),\n compLostEl: $('.stats.competitive-view p:contains(\"Games Lost\")').next().html(),\n compDrawEl: $('.stats.competitive-view p:contains(\"Games Tied\")').next().html(),\n compTimePlayedEl: $('.stats.competitive-view p:contains(\"Time Played\")').next().html(),\n compRankEls: $('.Profile-playerSummary--rankWrapper').find('.Profile-playerSummary--roleWrapper'),\n }\n\n if (parsed.compRankEls) {\n const r = {};\n parsed.compRankEls.each((i, elem) => {\n const rankImgSrc = $(elem).find('img.Profile-playerSummary--rank').attr('src');\n const roleImgSrc = $(elem).find('.Profile-playerSummary--role img').attr('src');\n const rankParsed = rankImgSrc.split('/').pop().split('#')[0].split('-');\n const role = roleImgSrc.split('/').pop().split('#')[0].split('-')[0];\n\n const rank = `${rankParsed[0].replace('Tier', '')} ${rankParsed[1]}`; \n const obj = { rank, icon: rankImgSrc };\n r[role] = obj;\n });\n\n parsed.ranks = r;\n }\n\n return callback(null, parsed);\n}\n\n// Transform the data into a json object we can serve.\nfunction transform(results, callback) {\n const { parseHTML: parsed } = results;\n\n const won = {};\n const lost = {};\n const draw = {};\n const played = {};\n const time = {};\n\n if (parsed.quickplayWonEl !== null) {\n won.quickplay = parsed.quickplayWonEl.trim().replace(/,/g, '');\n }\n\n if (parsed.quickplayPlayedEl !== null) {\n played.quickplay = parsed.quickplayPlayedEl.trim().replace(/,/g, '');\n }\n\n if (parsed.quickplayTimePlayedEl !== null) {\n time.quickplay = parsed.quickplayTimePlayedEl.trim().replace(/,/g, '');\n }\n\n if (parsed.compWonEl !== null) {\n won.competitive = parsed.compWonEl.trim().replace(/,/g, '');\n }\n\n if (parsed.compLostEl !== null) {\n lost.competitive = parsed.compLostEl.trim().replace(/,/g, '');\n }\n\n if (parsed.compDrawEl !== null) {\n draw.competitive = parsed.compDrawEl.trim().replace(/,/g, '');\n }\n\n if (parsed.compPlayedEl !== null) {\n played.competitive = parsed.compPlayedEl.trim().replace(/,/g, '');\n }\n\n if (parsed.compTimePlayedEl !== null) {\n time.competitive = parsed.compTimePlayedEl.trim().replace(/,/g, '');\n }\n\n const json = {\n username: parsed.user,\n portrait: parsed.portrait,\n endorsement: parsed.endorsementImage,\n private: parsed.permission === 'THIS PROFILE IS CURRENTLY PRIVATE',\n games: {\n quickplay: {\n won: parseInt(won.quickplay),\n played: parseInt(played.quickplay) || undefined \n },\n competitive: {\n won: parseInt(won.competitive),\n lost: parseInt(lost.competitive),\n draw: parseInt(draw.competitive) || 0,\n played: parseInt(played.competitive),\n win_rate: parseFloat((parseInt(won.competitive) / (parseInt(played.competitive - parseInt(draw.competitive))) * 100).toFixed(2)),\n },\n },\n playtime: { quickplay: time.quickplay, competitive: time.competitive },\n competitive: parsed.ranks,\n }\n\n return callback(null, json);\n}\n\nexport default function(platform, region, tag, callback) {\n async.auto({\n getHTML: async.apply(getHTML, platform, region, tag),\n parseHTML: ['getHTML', async.apply(parseHTML)],\n transform: ['getHTML', 'parseHTML', async.apply(transform)],\n }, function(err, results) {\n if (err) {\n return callback(err);\n }\n return callback(null, results.transform);\n });\n}"]}