Source: Fortnite.js

  1. const cheerio = require('cheerio'),
  2. axios = require('axios'),
  3. errors = require('../scripts/errors.js'),
  4. urls = {
  5. weapons: 'https://fortnitestats.com/weapons',
  6. solo: 'https://db.fortnitetracker.com/weapons/'
  7. },
  8. rarities = ['common', 'uncommon', 'rare', 'epic', 'legandary'];
  9. /** Class representing a Fortnite cog */
  10. class Fortnite {
  11. /**
  12. * Creating the cog
  13. */
  14. constructor(name) {
  15. this.name = name;
  16. };
  17. /**
  18. * A method that displays current weapon names available to seach for
  19. * @example <caption>Example about viewing weapons</caption>
  20. fire_tracker.listOfWeapons().then(r=>{
  21. console.log(r);
  22. }).catch(e=>{
  23. console.log(e);
  24. });
  25. * @returns {Promise} Promise object represents the array of weapons
  26. */
  27. async listOfWeapons() {
  28. return axios.get(urls['weapons']).then(response => {
  29. const $ = cheerio.load(response.data),
  30. cdata = [],
  31. children = $('body > div.container.content > div').children();
  32. children.each((i, div) => {
  33. cdata.push({
  34. 'img': $(div).find('a > img').attr('src'),
  35. 'name': $(div).find('#itemmeta > h4').text(),
  36. 'description': $(div).find('#itemmeta > p').text()
  37. });
  38. });
  39. return cdata;
  40. })
  41. }
  42. /**
  43. * A method that displays a weapon stats with its name given
  44. * @param {string} name The name of the weapon
  45. * @param {string} rarity The rarity of the weapon (Common,Uncommon,Rare,Epic,Legandary) . Default is common
  46. * @example <caption>Example about viewing info about a rare pump shotgun</caption>
  47. fire_tracker.weaponScrap('Pump Shotgun','Rare').then(r=>{ // Not case sensitive
  48. console.log(r);
  49. }).catch(e=>{
  50. console.log(e);
  51. });
  52. * @returns {Promise} Promise object represents the array of weapons
  53. */
  54. async weaponScrap(name, rarity) {
  55. rarity = rarities.includes(rarity.toLowerCase()) ? rarity.toLowerCase() : 'common';
  56. return axios.get(`${urls['solo']}${name.toLowerCase().replace(' ','-')}${name.toLowerCase()=='rocket launcher'?'----':'-'}${rarity}`).then(response => {
  57. const $ = cheerio.load(response.data);
  58. var data = [{
  59. 'img': 'https://db.fortnitetracker.com' + $('#data-nite > div.trn-scont > div > div.trn-card.ftr-locker-item__header > div.ftr-locker-item__image > img').attr('src'),
  60. 'name': $('#data-nite > div.trn-scont > div > div.trn-card.ftr-locker-item__header > div.ftr-locker-item__header-details > div.trn-card__content.trn-card--light.ftr-locker-item__info > div > div > h1').text(),
  61. 'description': $('#data-nite > div.trn-scont > div > div.trn-card.ftr-locker-item__header > div.ftr-locker-item__header-details > div:nth-child(2)').text(),
  62. 'rarity': $('#data-nite > div.trn-scont > div > div.trn-card.ftr-locker-item__header > div.ftr-locker-item__header-details > div.trn-card__content.trn-card--light.ftr-locker-item__info > div > div > span').text(),
  63. 'stats': {
  64. 'damage': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(1) > table > tbody > tr:nth-child(1) > td:nth-child(2)').text(),
  65. 'critical_hit_chance': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(1) > table > tbody > tr:nth-child(2) > td:nth-child(2)').text(),
  66. 'critical_hit_damage': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(1) > table > tbody > tr:nth-child(3) > td:nth-child(2)').text(),
  67. 'fire_rate': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(1) > table > tbody > tr:nth-child(4) > td:nth-child(2)').text(),
  68. 'magazine_size': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(1) > table > tbody > tr:nth-child(5) > td:nth-child(2)').text(),
  69. 'range': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(2)').text(),
  70. 'durability': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2)').text(),
  71. 'reload_time': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2)').text(),
  72. 'ammo_cost': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(2) > table > tbody > tr:nth-child(4) > td:nth-child(2)').text(),
  73. 'impact': $('#data-nite > div.trn-scont > div > div:nth-child(2) > div > div > div.trn-card__content.panel-body.panel-item-info > div > div:nth-child(2) > table > tbody > tr:nth-child(5) > td:nth-child(2)').text()
  74. },
  75. 'timing': {
  76. 'equip_animation': $('#data-nite > div.trn-scont > div > div:nth-child(3) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(1)').text(),
  77. 'switch_cooldown': $('#data-nite > div.trn-scont > div > div:nth-child(3) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(2)').text()
  78. },
  79. 'spread': {
  80. 'base': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(1)').text(),
  81. 'sprinting': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(2)').text(),
  82. 'jump/fall': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(3)').text(),
  83. 'down_sights': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(4)').text(),
  84. 'standing_still': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(5)').text(),
  85. 'crounching': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-9 > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(6)').text()
  86. },
  87. 'firing_rate': {
  88. 'normal': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-3 > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(1)').text(),
  89. 'burst': $('#data-nite > div.trn-scont > div > div:nth-child(4) > div.col-md-3 > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(2)')
  90. },
  91. 'range': {
  92. 'pb': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(1) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(1)').text(),
  93. 'mid': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(1) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(2)').text(),
  94. 'long': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(1) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(3)').text(),
  95. 'max': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(1) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(4)').text()
  96. },
  97. 'damage_per_range': {
  98. 'pb': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(2) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(1)').text(),
  99. 'mid': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(2) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(2)').text(),
  100. 'long': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(2) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(3)').text(),
  101. 'max': $('#data-nite > div.trn-scont > div > div:nth-child(5) > div:nth-child(2) > div > div.trn-card__content.panel-body > table > tbody > tr > td:nth-child(4)').text()
  102. },
  103. 'recoil': {
  104. 'horizontal': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(1)').text(),
  105. 'horizontal_gamepad': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(2)').text(),
  106. 'vertical': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(3)').text(),
  107. 'vertical_gamepad': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(4)').text(),
  108. 'angle_max': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(5)').text(),
  109. 'angle_min': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(6)').text(),
  110. 'down_sights': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(7)').text(),
  111. 'interp_speed': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(8)').text(),
  112. 'interp_speed_recovery': $('#data-nite > div.trn-scont > div > div:nth-child(7) > div > div > div.trn-card__content.panel-body > div.hidden-xs.hidden-sm > table > tbody > tr > td:nth-child(9)').text()
  113. }
  114. }];
  115. $('#data-nite > div.trn-scont > div > div:nth-child(8) > div.trn-table__container > table > tbody').children().each((i, tr) => {
  116. data.push([
  117. $('#data-nite > div.trn-scont > div > div:nth-child(8) > div.trn-table__container > table > tbody > tr:nth-child(1) > td:nth-child(1) > a').text(), $('#data-nite > div.trn-scont > div > div:nth-child(8) > div.trn-table__container > table > tbody > tr:nth-child(1) > td:nth-child(2)').text(), $('#data-nite > div.trn-scont > div > div:nth-child(8) > div.trn-table__container > table > tbody > tr:nth-child(1) > td:nth-child(3)').text(), $('#data-nite > div.trn-scont > div > div:nth-child(8) > div.trn-table__container > table > tbody > tr:nth-child(1) > td:nth-child(4)').text()
  118. ]);
  119. });
  120. return data;
  121. }).catch(e => {
  122. return alert('M');
  123. });
  124. }
  125. }
  126. module.exports = Fortnite;