@vince144/r6-api

2.2.2 • Public • Published

A simple api that fetches Rainbow Six player statistics

https://github.com/vince1444/r6-api/wiki

Important

Ubisoft's website requires you to have an account with them to fetch player statistics. Likewise, this api also requires a valid Ubisoft email/password.

Example Usage

const r6api = require('@vince144/r6-api');

let email = 'aValidEmail';
let password = 'aValidPassword';
let platform = 'uplay';
let username = 'aValidUsernameToLookup';
//Neon Dawn is '1' in Ubi's request structure
let season = '1';

let account = r6api.createAccount(email, password, platform);
async function fetchStats() { 
   let session = await r6api.createSession(account).catch(e => { console.error(e) }); 
   let player = await r6api.createPlayer(username, platform, session).catch(e => { console.error(e) }); 
   let neonDawnStats = await r6api.getStatsBySeason(player, session, season).catch(e => { console.error(e) }); 
   console.log(neonDawnStats); 
}
fetchStats();

/*OUTPUT: 
[
  {
    max_mmr: 2681,
    skill_mean: 26.0734410996,
    deaths: 137,
    profile_id: 'e96ae749-8939-43ed-895f-bf1817e849d9',
    next_rank_mmr: 2800,
    rank: 16,
    max_rank: 16,
    board_id: 'pvp_ranked',
    skill_stdev: 6.1882002469,
    kills: 160,
    last_match_skill_stdev_change: -0.039727164,
    update_time: '2020-12-18T17:19:23.498000+00:00',
    last_match_mmr_change: -74,
    abandons: 0,
    season: 20,
    top_rank_position: 0,
    last_match_skill_mean_change: -0.7341182744,
    mmr: 2607,
    previous_rank_mmr: 2600,
    last_match_result: 2,
    wins: 17,
    region: 'ncsa',
    losses: 16
  }
]
*/

createAccount(email string, password string, platform string)

Creates an account Object. Returns a promise, and if fulfilled, resolves an account Object.

let account = r6api.createAccount('aValidEmail', 'aValidPassword', 'uplay');
console.log(account);

/*OUTPUT:
{
  email: 'adsadas@gmail.com',
  password: 'asdada',
  platform: 'uplay'
}
*/

createSession(account account Object)

Creates an session Object. Returns a promise, and if resolved, returns an session Object.

async function example() {
    let session = r6api.createSession(account).catch(e => { console.error(e) });
    console.log(session);
}
example();

/*OUTPUT:
{
  appId: '3587dcbb-7f81-457c-9781-0e3f29f6f56a',
  spaceId: '5172a557-50b5-4665-b7db-e3f2e8c5041d',
  sessionId: '8c5385a6-b63e-4511-b331-4b32cdd36b49',
  //token will be longer than this
  token: 'skdjkajdaKJDKASJDKAJDK',
  startDate: '20201018',
  endDate: '20201217'
}
*/

getSessionResponse(account account Object)

Fetches the full server response when making the same URL request used in the createSession() function.

let username = 'madeMan43930230';
let platform = 'uplay';
async function example() {
    let sessionResponse = await r6api.getSessionResponse(username, platform, session).catch(e => { console.error(e) });
    console.log(sessionResponse);
}
example();

/*OUTPUT:
{
  platformType: 'uplay',
  //actual ticket is longer
  ticket: 'kasdkajDKSKADJ',
  twoFactorAuthenticationTicket: null,
  profileId: '9990bd9c-603c-4a74-b14f-35eca6b71a5d',
  userId: '9990bd9c-603c-4a74-b14f-35eca6b71a5d',
  nameOnPlatform: 'vince1444',
  environment: 'Prod',
  expiration: '2020-12-18T20:50:24.4971208Z',
  spaceId: '2c017c99-65c2-4b69-950d-f3d9c22ede59',
  clientIp: ':)',
  clientIpCountry: ':)',
  serverTime: '2020-12-18T17:50:24.5010346Z',
  //actual sessionId is longer
  sessionId: 'a-b-c-d',
  //actual session key is longer
  sessionKey: 'asdkjakdjalksjd==',
  rememberMeTicket: null
}
*/

createPlayer(username string, platform string, session session Object)

Creates a player Object. Returns a promise, and if fulfilled, resolves a player Object and pushes to the global players[] array.

let username = 'madeMan43930230';
let platform = 'uplay';
async function example() {
    let player = await r6api.createPlayer(username, platform, session).catch(e => { console.error(e) });
    console.log(player);
}
example();

/*OUTPUT:
{
  username: 'madeMan43930230',
  platform: 'uplay',
  id: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
  rank: null,
  kills: null,
  deaths: null
}
*/

getProfileResponse(player player Object, session session Object)

Fetches the full server response when making the same URL request used in the createPlayer() function.

async function example() {
    let profileResponse = await r6api.getProfileResponse(player, session).catch(e => { console.error(e) });
    console.log(profileResponse);
}
example();

/*OUTPUT:
{
  profiles: [
    {
      profileId: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
      userId: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
      platformType: 'uplay',
      idOnPlatform: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
      nameOnPlatform: 'madeMan43930230'
    }
  ]
}
*/

getStats(player player Object, session session Object)

Fetches the current season's general stats of a player. Returns a promise, and if fulfilled, resolves the stats.

async function example() {
    let stats = await r6api.getStats(player, session).catch(e => { console.error(e) });
    console.log(stats);
}
example();

/*OUTPUT:
{
  players: {
    '80c432fb-6a76-4ca8-a5a2-69c6be177185': {
      max_mmr: 0,
      skill_mean: 26.5744265626,
      deaths: 0,
      profile_id: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
      next_rank_mmr: 0,
      rank: 0,
      max_rank: 0,
      board_id: 'pvp_ranked',
      skill_stdev: 7.9519144961,
      kills: 0,
      last_match_skill_stdev_change: 0,
      update_time: '1970-01-01T00:00:00+00:00',
      last_match_mmr_change: 0,
      abandons: 0,
      season: 20,
      top_rank_position: 0,
      last_match_skill_mean_change: 0,
      mmr: 2657,
      previous_rank_mmr: 0,
      last_match_result: 0,
      wins: 0,
      region: 'ncsa',
      losses: 0
    }
  }
}
*/

getStatsBySeason(player player Object, session session Object, season Integer)

Fetches the current stats by season of a player. There are 20 seasons. Neon Dawn is 1, Shadow Legacy is 2, Steel Wave is 3, and so on until Health at 20. Returns a promise, and if fulfilled, resolves the stats by specified season.

let season = '2';
async function example() {
    let shadowLegacyStats = await r6api.getStatsBySeason(player, session, season).catch(e => { console.error(e) });
    console.log(shadowLegacyStats);
}
example();

/*OUTPUT:
[
  {
    max_mmr: 2807,
    skill_mean: 27.6738928455,
    deaths: 807,
    profile_id: '80c432fb-6a76-4ca8-a5a2-69c6be177185',
    next_rank_mmr: 2800,
    rank: 16,
    max_rank: 17,
    board_id: 'pvp_ranked',
    skill_stdev: 3.7867713646,
    kills: 1098,
    last_match_skill_stdev_change: -0.008890644,
    update_time: '2020-12-18T17:38:38.636000+00:00',
    last_match_mmr_change: -27,
    abandons: 1,
    season: 19,
    top_rank_position: 0,
    last_match_skill_mean_change: -0.2703950966,
    mmr: 2767,
    previous_rank_mmr: 2600,
    last_match_result: 2,
    wins: 100,
    region: 'ncsa',
    losses: 88
  }
]
*/

getStatsByOperator(player player Object, session session Object, team optional String)

Like the other two stat functions, it returns the stats but by each operator. Optional parameter team; default = 'attacker,defender. It returns every operator on specified team, so the request may take a second or two. Returns a promise, and if fulfilled, resolves the stats of each operator.

let team = 'attacker';
async function example() {
    let stats = await r6api.getStatsByOperator(player, session, team).catch(e => { console.error(e) });
    console.log(stats);
}
example();

/*OUTPUT:
{
  attacker: [
    {
      type: 'Generalized',
      statsType: 'operators',
      statsDetail: 'Hibana',
      matchesPlayed: 7,
      roundsPlayed: 13,
      minutesPlayed: 49,
      matchesWon: 4,
      matchesLost: 3,
      roundsWon: 8,
      roundsLost: 5,
      kills: 23,
      assists: 0,
      death: 7,
      headshots: 14,
      meleeKills: 0,
      teamKills: 0,
      openingKills: 2,
      openingDeaths: 0,
      trades: 1,
      openingKillTrades: 1,
      openingDeathTrades: 0,
      revives: 8,
      distanceTravelled: 2401,
      winLossRatio: 1.3333,
      killDeathRatio: [Object],
      headshotAccuracy: [Object],
      killsPerRound: [Object],
      roundsWithAKill: [Object],
      roundsWithMultiKill: [Object],
      roundsWithOpeningKill: [Object],
      roundsWithOpeningDeath: [Object],
      roundsWithKOST: [Object],
      roundsSurvived: [Object],
      roundsWithAnAce: [Object],
      roundsWithClutch: [Object],
      timeAlivePerMatch: 221.1428,
      timeDeadPerMatch: 44.5714,
      distancePerRound: 184.6923
    }
    ...
    ...
    ...
    ...
    
  ]
}
*/

/@vince144/r6-api/

    Package Sidebar

    Install

    npm i @vince144/r6-api

    Weekly Downloads

    2

    Version

    2.2.2

    License

    ISC

    Unpacked Size

    22 kB

    Total Files

    3

    Last publish

    Collaborators

    • vince144