UNPKG

overwatch-api-server

Version:
1 lines 11.6 kB
{"version":3,"sources":["stats.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","stats","topHeroCategories","quickplay","competitive","Object","keys","forEach","k","topHeroesEls","find","topHeroes","each","i","el","stat","hero","img","push","statCategories","item","els","closest","statsArr","title","value","replace","toLowerCase","transform","json","username","endorsement","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 }\n\n const stats = {};\n\n // Top Heroes.\n const topHeroCategories = {\n quickplay: {\n 'played': '0x0860000000000021',\n 'games_won': '0x0860000000000039',\n 'weapon_accuracy': '0x086000000000002F',\n 'eliminations_per_life': '0x08600000000003D2',\n 'multikill_best': '0x0860000000000346',\n 'objective_kills_average': '0x086000000000039C',\n },\n competitive: {\n 'played': '0x0860000000000021',\n 'games_won': '0x0860000000000039',\n 'win_rate': '0x08600000000003D1',\n 'weapon_accuracy': '0x086000000000002F',\n 'eliminations_per_life': '0x08600000000003D2',\n 'multikill_best': '0x0860000000000346',\n 'objective_kills_average': '0x086000000000039C',\n }\n };\n\n // Quickplay.\n stats['top_heroes'] = { quickplay: {} };\n Object.keys(topHeroCategories.quickplay).forEach((k) => {\n const topHeroesEls = $(`.Profile-heroSummary--view.quickPlay-view [data-category-id=\"${topHeroCategories.quickplay[k]}\"]`)\n .find('.Profile-progressBar');\n let topHeroes = [];\n topHeroesEls.each(function(i, el) {\n const stat = {};\n stat.hero = $(this).find('.Profile-progressBar-title').text();\n stat.img = $(this).find('.Profile-progressBar--icon').attr('src');\n stat[k] = $(this).find('.Profile-progressBar-description').text();\n topHeroes.push(stat);\n });\n stats['top_heroes']['quickplay'][k] = topHeroes;\n });\n\n // Competitive.\n stats['top_heroes']['competitive'] = {};\n Object.keys(topHeroCategories.competitive).forEach((k) => {\n const topHeroesEls = $(`.Profile-heroSummary--view.competitive-view [data-category-id=\"${topHeroCategories.competitive[k]}\"]`)\n .find('.Profile-progressBar');\n let topHeroes = [];\n topHeroesEls.each(function(i, el) {\n const stat = {};\n stat.hero = $(this).find('.Profile-progressBar-title').text();\n stat.img = $(this).find('.Profile-progressBar--icon').attr('src');\n stat[k] = $(this).find('.Profile-progressBar-description').text();\n topHeroes.push(stat);\n });\n stats['top_heroes']['competitive'][k] = topHeroes;\n });\n\n //\n // Career Stats\n //\n const statCategories = [\n 'Combat',\n 'Match Awards',\n 'Assists',\n 'Average',\n 'Miscellaneous',\n 'Best',\n 'Game'\n ];\n\n // Quickplay Stats.\n statCategories.forEach(function(item) {\n const els = $(`.stats.quickPlay-view .option-0 .category .content .header p:contains(\"${item}\")`).closest('.content').find('.stat-item');\n let statsArr = [];\n els.each(function(i, el) {\n let stat = {};\n stat.title = $(this).find('.name').text();\n stat.value = $(this).find('.value').text();\n statsArr.push(stat);\n });\n item = item.replace(' ', '_').toLowerCase();\n stats[item] = { quickplay: [] };\n stats[item]['quickplay'] = statsArr;\n });\n\n // Competitive Stats.\n statCategories.forEach(function(item) {\n const els = $(`.stats.competitive-view .option-0 .category .content .header p:contains(\"${item}\")`).closest('.content').find('.stat-item');\n let statsArr = [];\n els.each(function(i, el) {\n let stat = {};\n stat.title = $(this).find('.name').text();\n stat.value = $(this).find('.value').text();\n statsArr.push(stat);\n });\n item = item.replace(' ', '_').toLowerCase();\n stats[item]['competitive'] = [];\n stats[item]['competitive'] = statsArr;\n });\n\n return callback(null, { stats, parsed });\n}\n\n// Transform the data into a json object we can serve.\nfunction transform(results, callback) {\n const { parseHTML } = results;\n const { stats, parsed } = parseHTML;\n\n const json = {\n username: parsed.user,\n portrait: parsed.portrait,\n endorsement: parsed.endorsementImage,\n private: parsed.permission === 'Private Profile',\n stats: stats\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}"]}