mirror of
https://github.com/maxswa/osrs-json-hiscores.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7de2d9a95a | ||
![]() |
a143306519 | ||
![]() |
86b81abfd8 | ||
![]() |
8d065742d0 | ||
![]() |
eaa3d4a299 | ||
![]() |
a92fa7fffe | ||
![]() |
90f2939761 | ||
![]() |
12046246ef | ||
![]() |
adf73e59c4 | ||
![]() |
f2fcbad1c4 | ||
![]() |
0f47310814 | ||
![]() |
30530fde01 | ||
![]() |
2c0268939d | ||
![]() |
0142783d43 |
@@ -146,6 +146,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
||||
| Kreearra | `kreeArra` |
|
||||
| K'ril Tsutsaroth | `krilTsutsaroth` |
|
||||
| Mimic | `mimic` |
|
||||
| The Nightmare of Ashihama | `nightmare` |
|
||||
| Obor | `obor` |
|
||||
| Sarachnis | `sarachnis` |
|
||||
| Scorpia | `scorpia` |
|
||||
|
@@ -8,169 +8,173 @@ import {
|
||||
} from '../src/index';
|
||||
|
||||
test('Parse CSV to json', () => {
|
||||
const csv = `40258,2063,218035714
|
||||
20554, 99, 21102621
|
||||
39059, 99, 15364425
|
||||
14245, 99, 26556827
|
||||
19819, 99, 33511407
|
||||
27857, 99, 25774115
|
||||
44278, 91, 6081159
|
||||
40110, 99, 15128024
|
||||
178948, 90, 5347474
|
||||
175463, 81, 2355494
|
||||
138677, 90, 5356303
|
||||
77587, 91, 5904710
|
||||
158478, 85, 3570485
|
||||
93958, 83, 2684426
|
||||
39179, 88, 4425107
|
||||
138406, 77, 1591377
|
||||
33399, 90, 5866307
|
||||
1794, 99, 15057674
|
||||
45551, 91, 6363261
|
||||
121165, 90, 5748493
|
||||
89460, 88, 4624078
|
||||
53099, 80, 2008229
|
||||
169127, 73, 1067670
|
||||
115543, 82, 2546048
|
||||
-1, -1
|
||||
-1, -1
|
||||
-1, -1
|
||||
24817, 476
|
||||
212728, 1
|
||||
94827, 20
|
||||
59099, 74
|
||||
24642, 231
|
||||
5206, 99
|
||||
6293, 51
|
||||
32875, 500
|
||||
374,2780
|
||||
934,3000
|
||||
1936,1452
|
||||
4919,23
|
||||
101,4038
|
||||
152,334
|
||||
6153,133
|
||||
4501,250
|
||||
6806,603
|
||||
const csv = `246,2277,1338203419
|
||||
615,99,77438259
|
||||
428,99,69176307
|
||||
425,99,115218641
|
||||
138,99,181425111
|
||||
160,99,169725807
|
||||
97,99,50666171
|
||||
144,99,93155913
|
||||
2108,99,53198880
|
||||
5750,99,19589494
|
||||
295,99,76386488
|
||||
1304,99,32252994
|
||||
847,99,54325931
|
||||
534,99,26379932
|
||||
7213,99,13246799
|
||||
2475,99,18161285
|
||||
1837,99,14746134
|
||||
668,99,23961670
|
||||
3841,99,17970837
|
||||
265,99,56230978
|
||||
821,99,62123353
|
||||
169,99,43127930
|
||||
810,99,37688883
|
||||
92,99,32005622
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
32,12148
|
||||
3105,76
|
||||
1997,505
|
||||
127,4259
|
||||
361,915
|
||||
392,250
|
||||
1,6143
|
||||
4814,898
|
||||
382,2780
|
||||
944,3000
|
||||
1981,1452
|
||||
4981,23
|
||||
888,1046
|
||||
613,4856
|
||||
102,4038
|
||||
156,334
|
||||
6240,133
|
||||
4569,250
|
||||
6893,603
|
||||
1,17798
|
||||
9160,125
|
||||
1021,2802
|
||||
4295,1655
|
||||
959,2951
|
||||
10009,1
|
||||
1271,2407
|
||||
378,4669
|
||||
543,1567
|
||||
6003,94
|
||||
263,2897
|
||||
4000,1277
|
||||
41016,1477
|
||||
617,2391
|
||||
9320,125
|
||||
1030,2802
|
||||
4342,1655
|
||||
966,2951
|
||||
10151,1
|
||||
1288,2407
|
||||
377,4669
|
||||
545,1567
|
||||
6083,94
|
||||
264,2897
|
||||
4052,1277
|
||||
41643,1477
|
||||
625,2391
|
||||
120,2981
|
||||
1,109
|
||||
3,22666
|
||||
26,323
|
||||
198,1101
|
||||
81,3404
|
||||
5027,61
|
||||
201,1101
|
||||
82,3404
|
||||
5085,61
|
||||
63,375
|
||||
2845,6
|
||||
6913,138
|
||||
3999,2000
|
||||
484,8
|
||||
957,47
|
||||
10987,223
|
||||
1923,272
|
||||
8484,1340
|
||||
599,1694
|
||||
12489,435
|
||||
3810,4583`;
|
||||
2870,6
|
||||
6984,138
|
||||
4043,2000
|
||||
489,8
|
||||
967,47
|
||||
11155,223
|
||||
1940,272
|
||||
8623,1340
|
||||
605,1694
|
||||
-1,-1
|
||||
3867,4583`;
|
||||
|
||||
const expectedOutput: Stats = {
|
||||
skills: {
|
||||
overall: { rank: 40258, level: 2063, xp: 218035714 },
|
||||
attack: { rank: 20554, level: 99, xp: 21102621 },
|
||||
defence: { rank: 39059, level: 99, xp: 15364425 },
|
||||
strength: { rank: 14245, level: 99, xp: 26556827 },
|
||||
hitpoints: { rank: 19819, level: 99, xp: 33511407 },
|
||||
ranged: { rank: 27857, level: 99, xp: 25774115 },
|
||||
prayer: { rank: 44278, level: 91, xp: 6081159 },
|
||||
magic: { rank: 40110, level: 99, xp: 15128024 },
|
||||
cooking: { rank: 178948, level: 90, xp: 5347474 },
|
||||
woodcutting: { rank: 175463, level: 81, xp: 2355494 },
|
||||
fletching: { rank: 138677, level: 90, xp: 5356303 },
|
||||
fishing: { rank: 77587, level: 91, xp: 5904710 },
|
||||
firemaking: { rank: 158478, level: 85, xp: 3570485 },
|
||||
crafting: { rank: 93958, level: 83, xp: 2684426 },
|
||||
smithing: { rank: 39179, level: 88, xp: 4425107 },
|
||||
mining: { rank: 138406, level: 77, xp: 1591377 },
|
||||
herblore: { rank: 33399, level: 90, xp: 5866307 },
|
||||
agility: { rank: 1794, level: 99, xp: 15057674 },
|
||||
thieving: { rank: 45551, level: 91, xp: 6363261 },
|
||||
slayer: { rank: 121165, level: 90, xp: 5748493 },
|
||||
farming: { rank: 89460, level: 88, xp: 4624078 },
|
||||
runecraft: { rank: 53099, level: 80, xp: 2008229 },
|
||||
hunter: { rank: 169127, level: 73, xp: 1067670 },
|
||||
construction: { rank: 115543, level: 82, xp: 2546048 },
|
||||
overall: { rank: 246, level: 2277, xp: 1338203419 },
|
||||
attack: { rank: 615, level: 99, xp: 77438259 },
|
||||
defence: { rank: 428, level: 99, xp: 69176307 },
|
||||
strength: { rank: 425, level: 99, xp: 115218641 },
|
||||
hitpoints: { rank: 138, level: 99, xp: 181425111 },
|
||||
ranged: { rank: 160, level: 99, xp: 169725807 },
|
||||
prayer: { rank: 97, level: 99, xp: 50666171 },
|
||||
magic: { rank: 144, level: 99, xp: 93155913 },
|
||||
cooking: { rank: 2108, level: 99, xp: 53198880 },
|
||||
woodcutting: { rank: 5750, level: 99, xp: 19589494 },
|
||||
fletching: { rank: 295, level: 99, xp: 76386488 },
|
||||
fishing: { rank: 1304, level: 99, xp: 32252994 },
|
||||
firemaking: { rank: 847, level: 99, xp: 54325931 },
|
||||
crafting: { rank: 534, level: 99, xp: 26379932 },
|
||||
smithing: { rank: 7213, level: 99, xp: 13246799 },
|
||||
mining: { rank: 2475, level: 99, xp: 18161285 },
|
||||
herblore: { rank: 1837, level: 99, xp: 14746134 },
|
||||
agility: { rank: 668, level: 99, xp: 23961670 },
|
||||
thieving: { rank: 3841, level: 99, xp: 17970837 },
|
||||
slayer: { rank: 265, level: 99, xp: 56230978 },
|
||||
farming: { rank: 821, level: 99, xp: 62123353 },
|
||||
runecraft: { rank: 169, level: 99, xp: 43127930 },
|
||||
hunter: { rank: 810, level: 99, xp: 37688883 },
|
||||
construction: { rank: 92, level: 99, xp: 32005622 },
|
||||
},
|
||||
leaguePoints: { rank: -1, score: -1 },
|
||||
bountyHunter: {
|
||||
rogue: { rank: -1, score: -1 },
|
||||
hunter: { rank: -1, score: -1 },
|
||||
},
|
||||
lastManStanding: { rank: 32875, score: 500 },
|
||||
lastManStanding: { rank: 4814, score: 898 },
|
||||
clues: {
|
||||
all: { rank: 24817, score: 476 },
|
||||
beginner: { rank: 212728, score: 1 },
|
||||
easy: { rank: 94827, score: 20 },
|
||||
medium: { rank: 59099, score: 74 },
|
||||
hard: { rank: 24642, score: 231 },
|
||||
elite: { rank: 5206, score: 99 },
|
||||
master: { rank: 6293, score: 51 },
|
||||
all: { rank: 32, score: 12148 },
|
||||
beginner: { rank: 3105, score: 76 },
|
||||
easy: { rank: 1997, score: 505 },
|
||||
medium: { rank: 127, score: 4259 },
|
||||
hard: { rank: 361, score: 915 },
|
||||
elite: { rank: 392, score: 250 },
|
||||
master: { rank: 1, score: 6143 },
|
||||
},
|
||||
bosses: {
|
||||
abyssalSire: { rank: 374, score: 2780 },
|
||||
alchemicalHydra: { rank: 934, score: 3000 },
|
||||
barrows: { rank: 1936, score: 1452 },
|
||||
bryophyta: { rank: 4919, score: 23 },
|
||||
callisto: { rank: -1, score: -1 },
|
||||
cerberus: { rank: -1, score: -1 },
|
||||
chambersOfXeric: { rank: 101, score: 4038 },
|
||||
chambersOfXericChallengeMode: { rank: 152, score: 334 },
|
||||
chaosElemental: { rank: 6153, score: 133 },
|
||||
chaosFanatic: { rank: 4501, score: 250 },
|
||||
commanderZilyana: { rank: 6806, score: 603 },
|
||||
abyssalSire: { rank: 382, score: 2780 },
|
||||
alchemicalHydra: { rank: 944, score: 3000 },
|
||||
barrows: { rank: 1981, score: 1452 },
|
||||
bryophyta: { rank: 4981, score: 23 },
|
||||
callisto: { rank: 888, score: 1046 },
|
||||
cerberus: { rank: 613, score: 4856 },
|
||||
chambersOfXeric: { rank: 102, score: 4038 },
|
||||
chambersOfXericChallengeMode: { rank: 156, score: 334 },
|
||||
chaosElemental: { rank: 6240, score: 133 },
|
||||
chaosFanatic: { rank: 4569, score: 250 },
|
||||
commanderZilyana: { rank: 6893, score: 603 },
|
||||
corporealBeast: { rank: 1, score: 17798 },
|
||||
crazyArchaeologist: { rank: 9160, score: 125 },
|
||||
dagannothPrime: { rank: 1021, score: 2802 },
|
||||
dagannothRex: { rank: 4295, score: 1655 },
|
||||
dagannothSupreme: { rank: 959, score: 2951 },
|
||||
derangedArchaeologist: { rank: 10009, score: 1 },
|
||||
generalGraardor: { rank: 1271, score: 2407 },
|
||||
giantMole: { rank: 378, score: 4669 },
|
||||
grotesqueGuardians: { rank: 543, score: 1567 },
|
||||
hespori: { rank: 6003, score: 94 },
|
||||
kalphiteQueen: { rank: 263, score: 2897 },
|
||||
kingBlackDragon: { rank: 4000, score: 1277 },
|
||||
kraken: { rank: 41016, score: 1477 },
|
||||
kreeArra: { rank: 617, score: 2391 },
|
||||
crazyArchaeologist: { rank: 9320, score: 125 },
|
||||
dagannothPrime: { rank: 1030, score: 2802 },
|
||||
dagannothRex: { rank: 4342, score: 1655 },
|
||||
dagannothSupreme: { rank: 966, score: 2951 },
|
||||
derangedArchaeologist: { rank: 10151, score: 1 },
|
||||
generalGraardor: { rank: 1288, score: 2407 },
|
||||
giantMole: { rank: 377, score: 4669 },
|
||||
grotesqueGuardians: { rank: 545, score: 1567 },
|
||||
hespori: { rank: 6083, score: 94 },
|
||||
kalphiteQueen: { rank: 264, score: 2897 },
|
||||
kingBlackDragon: { rank: 4052, score: 1277 },
|
||||
kraken: { rank: 41643, score: 1477 },
|
||||
kreeArra: { rank: 625, score: 2391 },
|
||||
krilTsutsaroth: { rank: 120, score: 2981 },
|
||||
mimic: { rank: 1, score: 109 },
|
||||
nightmare: { rank: 3, score: 22666 },
|
||||
obor: { rank: 26, score: 323 },
|
||||
sarachnis: { rank: 198, score: 1101 },
|
||||
scorpia: { rank: 81, score: 3404 },
|
||||
skotizo: { rank: 5027, score: 61 },
|
||||
sarachnis: { rank: 201, score: 1101 },
|
||||
scorpia: { rank: 82, score: 3404 },
|
||||
skotizo: { rank: 5085, score: 61 },
|
||||
gauntlet: { rank: 63, score: 375 },
|
||||
corruptedGauntlet: { rank: 2845, score: 6 },
|
||||
theatreOfBlood: { rank: 6913, score: 138 },
|
||||
thermonuclearSmokeDevil: { rank: 3999, score: 2000 },
|
||||
tzKalZuk: { rank: 484, score: 8 },
|
||||
tzTokJad: { rank: 957, score: 47 },
|
||||
venenatis: { rank: 10987, score: 223 },
|
||||
vetion: { rank: 1923, score: 272 },
|
||||
vorkath: { rank: 8484, score: 1340 },
|
||||
wintertodt: { rank: 599, score: 1694 },
|
||||
zalcano: { rank: 12489, score: 435 },
|
||||
zulrah: { rank: 3810, score: 4583 },
|
||||
corruptedGauntlet: { rank: 2870, score: 6 },
|
||||
theatreOfBlood: { rank: 6984, score: 138 },
|
||||
thermonuclearSmokeDevil: { rank: 4043, score: 2000 },
|
||||
tzKalZuk: { rank: 489, score: 8 },
|
||||
tzTokJad: { rank: 967, score: 47 },
|
||||
venenatis: { rank: 11155, score: 223 },
|
||||
vetion: { rank: 1940, score: 272 },
|
||||
vorkath: { rank: 8623, score: 1340 },
|
||||
wintertodt: { rank: 605, score: 1694 },
|
||||
zalcano: { rank: -1, score: -1 },
|
||||
zulrah: { rank: 3867, score: 4583 },
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -3,5 +3,6 @@
|
||||
"^.+\\.(t|j)sx?$": "ts-jest"
|
||||
},
|
||||
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
|
||||
"moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"]
|
||||
"moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"],
|
||||
"testEnvironment": "node"
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "osrs-json-hiscores",
|
||||
"version": "2.0.1",
|
||||
"version": "2.2.0",
|
||||
"description": "The Oldschool Runescape API wrapper that does more!",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
@@ -37,11 +37,11 @@
|
||||
"homepage": "https://github.com/maxswa/osrs-json-hiscores#readme",
|
||||
"dependencies": {
|
||||
"axios": "^0.19.0",
|
||||
"cheerio": "^1.0.0-rc.3"
|
||||
"jsdom": "^16.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cheerio": "^0.22.11",
|
||||
"@types/jest": "^24.0.14",
|
||||
"@types/jsdom": "^16.2.3",
|
||||
"jest": "^24.8.0",
|
||||
"np": "^5.0.3",
|
||||
"prettier": "^1.19.1",
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import axios from 'axios';
|
||||
import * as cheerio from 'cheerio';
|
||||
import {
|
||||
Player,
|
||||
Activity,
|
||||
@@ -14,7 +13,6 @@ import {
|
||||
ActivityName,
|
||||
PlayerActivityRow,
|
||||
Bosses,
|
||||
Boss,
|
||||
} from './types';
|
||||
import {
|
||||
getStatsURL,
|
||||
@@ -30,6 +28,7 @@ import {
|
||||
getActivityPageURL,
|
||||
BOSSES,
|
||||
} from './utils';
|
||||
import { JSDOM } from 'jsdom';
|
||||
|
||||
export async function getStats(rsn: string): Promise<Player> {
|
||||
if (typeof rsn !== 'string') {
|
||||
@@ -46,13 +45,13 @@ export async function getStats(rsn: string): Promise<Player> {
|
||||
axios(getStatsURL('ironman', rsn)).catch(err => err),
|
||||
axios(getStatsURL('hardcore', rsn)).catch(err => err),
|
||||
axios(getStatsURL('ultimate', rsn)).catch(err => err),
|
||||
getRSNFormat(rsn),
|
||||
getRSNFormat(rsn).catch(() => undefined),
|
||||
]);
|
||||
|
||||
const [ironRes, hcRes, ultRes, formattedName] = otherResponses;
|
||||
|
||||
const player: Player = {
|
||||
name: formattedName,
|
||||
name: formattedName || rsn,
|
||||
mode: 'main',
|
||||
dead: false,
|
||||
deulted: false,
|
||||
@@ -145,22 +144,26 @@ export async function getSkillPage(
|
||||
const url = getSkillPageURL(mode, skill, page);
|
||||
|
||||
const response = await axios(url);
|
||||
const $ = cheerio.load(response.data);
|
||||
const playersHTML = $('.personal-hiscores__row').toArray();
|
||||
const dom = new JSDOM(response.data);
|
||||
const playersHTML = dom.window.document.querySelectorAll(
|
||||
'.personal-hiscores__row'
|
||||
);
|
||||
|
||||
const players: PlayerSkillRow[] = playersHTML.map(row => {
|
||||
const cells = row.children.filter(el => el.name === 'td');
|
||||
const [rankEl, nameCell, levelEl, xpEl] = cells;
|
||||
const nameEl = nameCell.children.find(el => el.name === 'a');
|
||||
const isDead = !!nameCell.children.find(el => el.name === 'img');
|
||||
const players: PlayerSkillRow[] = [];
|
||||
playersHTML.forEach(row => {
|
||||
const rankEl = row.querySelector('td');
|
||||
const nameEl = row.querySelector('td a');
|
||||
const levelEl = row.querySelector('td.left + td');
|
||||
const xpEl = row.querySelector('td.left + td + td');
|
||||
const isDead = !!row.querySelector('td img');
|
||||
|
||||
return {
|
||||
players.push({
|
||||
name: rsnFromElement(nameEl),
|
||||
rank: numberFromElement(rankEl),
|
||||
level: numberFromElement(levelEl),
|
||||
xp: numberFromElement(xpEl),
|
||||
dead: isDead,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
return players;
|
||||
@@ -181,21 +184,24 @@ export async function getActivityPage(
|
||||
const url = getActivityPageURL(mode, activity, page);
|
||||
|
||||
const response = await axios(url);
|
||||
const $ = cheerio.load(response.data);
|
||||
const playersHTML = $('.personal-hiscores__row').toArray();
|
||||
const dom = new JSDOM(response.data);
|
||||
const playersHTML = dom.window.document.querySelectorAll(
|
||||
'.personal-hiscores__row'
|
||||
);
|
||||
|
||||
const players: PlayerActivityRow[] = playersHTML.map(row => {
|
||||
const cells = row.children.filter(el => el.name === 'td');
|
||||
const [rankEl, nameCell, scoreEl] = cells;
|
||||
const nameEl = nameCell.children.find(el => el.name === 'a');
|
||||
const isDead = !!nameCell.children.find(el => el.name === 'img');
|
||||
const players: PlayerActivityRow[] = [];
|
||||
playersHTML.forEach(row => {
|
||||
const rankEl = row.querySelector('td');
|
||||
const nameEl = row.querySelector('td a');
|
||||
const scoreEl = row.querySelector('td.left + td');
|
||||
const isDead = !!row.querySelector('td img');
|
||||
|
||||
return {
|
||||
players.push({
|
||||
name: rsnFromElement(nameEl),
|
||||
rank: numberFromElement(rankEl),
|
||||
score: numberFromElement(scoreEl),
|
||||
dead: isDead,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
return players;
|
||||
@@ -213,10 +219,13 @@ export async function getRSNFormat(rsn: string): Promise<string> {
|
||||
const url = getPlayerTableURL('main', rsn);
|
||||
try {
|
||||
const response = await axios(url);
|
||||
const $ = cheerio.load(response.data);
|
||||
const rawName = $('[style="color:#AA0022;"]')[1].children[0].data;
|
||||
if (rawName) {
|
||||
return rawName.replace(/\uFFFD/g, ' ');
|
||||
const dom = new JSDOM(response.data);
|
||||
const spans = dom.window.document.querySelectorAll(
|
||||
'span[style="color:#AA0022;"]'
|
||||
);
|
||||
if (spans.length >= 2) {
|
||||
const nameSpan = spans[1];
|
||||
return rsnFromElement(nameSpan);
|
||||
}
|
||||
throw Error('Player not found');
|
||||
} catch {
|
||||
@@ -277,27 +286,9 @@ export function parseStats(csv: string): Stats {
|
||||
return newClues;
|
||||
}, {} as Clues);
|
||||
|
||||
// TODO Remove as soon as Jagex's API is fixed
|
||||
const brokenBosses: Boss[] = ['callisto', 'cerberus'];
|
||||
const TEMPBOSSES: Boss[] = BOSSES.reduce<Boss[]>(
|
||||
(prev, curr) => (brokenBosses.includes(curr) ? prev : [...prev, curr]),
|
||||
[]
|
||||
);
|
||||
|
||||
const bosses: Bosses = bossObjects.reduce<Bosses>((prev, curr, index) => {
|
||||
const newBosses = { ...prev };
|
||||
|
||||
// TODO Remove as soon as Jagex's API is fixed
|
||||
if (BOSSES[index] === brokenBosses[0]) {
|
||||
brokenBosses.forEach(broken => {
|
||||
newBosses[broken] = {
|
||||
rank: -1,
|
||||
score: -1,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
newBosses[TEMPBOSSES[index]] = curr;
|
||||
newBosses[BOSSES[index]] = curr;
|
||||
return newBosses;
|
||||
}, {} as Bosses);
|
||||
|
||||
|
@@ -89,6 +89,7 @@ export type Boss =
|
||||
| 'kreeArra'
|
||||
| 'krilTsutsaroth'
|
||||
| 'mimic'
|
||||
| 'nightmare'
|
||||
| 'obor'
|
||||
| 'sarachnis'
|
||||
| 'scorpia'
|
||||
|
@@ -7,7 +7,7 @@ import {
|
||||
ActivityName,
|
||||
} from '../types';
|
||||
|
||||
export const BASE_URL = 'http://services.runescape.com/m=hiscore_oldschool';
|
||||
export const BASE_URL = 'https://secure.runescape.com/m=hiscore_oldschool';
|
||||
export const STATS_URL = 'index_lite.ws?player=';
|
||||
export const SCORES_URL = 'overall.ws?';
|
||||
|
||||
@@ -97,6 +97,7 @@ export const BOSSES: Boss[] = [
|
||||
'kreeArra',
|
||||
'krilTsutsaroth',
|
||||
'mimic',
|
||||
'nightmare',
|
||||
'obor',
|
||||
'sarachnis',
|
||||
'scorpia',
|
||||
@@ -161,6 +162,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
|
||||
kreeArra: "Kree'Arra",
|
||||
krilTsutsaroth: "K'ril Tsutsaroth",
|
||||
mimic: 'Mimic',
|
||||
nightmare: 'The Nightmare of Ashihama',
|
||||
obor: 'Obor',
|
||||
sarachnis: 'Sarachnis',
|
||||
scorpia: 'Scorpia',
|
||||
|
@@ -35,13 +35,13 @@ export const getActivityPageURL = (
|
||||
activity
|
||||
)}&page=${page}`;
|
||||
|
||||
export const numberFromElement = (el: CheerioElement) => {
|
||||
const innerText = el.firstChild.data;
|
||||
const number = innerText ? innerText.replace(/[\n|,]/g, '') : '-1';
|
||||
export const numberFromElement = (el: Element | null) => {
|
||||
const { innerHTML } = el || {};
|
||||
const number = innerHTML?.replace(/[\n|,]/g, '') ?? '-1';
|
||||
return parseInt(number, 10);
|
||||
};
|
||||
|
||||
export const rsnFromElement = (el: CheerioElement | undefined) => {
|
||||
const innerText = el?.firstChild.data;
|
||||
return innerText ? innerText.replace(/\uFFFD/g, ' ') : '';
|
||||
export const rsnFromElement = (el: Element | null) => {
|
||||
const { innerHTML } = el || {};
|
||||
return innerHTML?.replace(/\uFFFD/g, ' ') || '';
|
||||
};
|
||||
|
Reference in New Issue
Block a user