overwatch-api-server
Version:
An Unoffical Overwatch HTTP API
1 lines • 9.52 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","permission","endorsementImage","quickplayWonEl","next","html","quickplayPlayedEl","quickplayTimePlayedEl","compWonEl","compPlayedEl","compLostEl","compDrawEl","compTimePlayedEl","transform","won","lost","draw","played","time","quickplay","trim","replace","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 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 }\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 }\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}"]}