Simba Code:
program Highscores;
type
SkillInfo = record
rank,level,exp,name,pagesource : string;
end;
var
shtml : string;
Stats: Array of array of SkillInfo;
function GetSkillNameFromNumber(number : integer) : String;
var
SkillName : Array Of String;
begin
SkillName := ['Overall','Attack', 'Defence', 'Strength', 'Constitution', 'Ranged',
'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching', 'Fishing',
'Firemaking', 'Crafting', 'Smithing', 'Mining', 'Herblore', 'Agility',
'Thieving','Slayer','Farming','Runecrafting','Construction', 'Summoning', 'Dungeoneering'];
Result := SkillName[Number];
end;
var
usernames: array of string; i,j,p,p2,int1,int2,len:integer;name,str,str2:string; maxstats:array of skillinfo;
begin
ClearDebug;
usernames := ['zezima', 'blah'];
len := length(usernames);
setlength(stats, len);
for i := 0 to len-1 do
begin
//Writeln('====' + Usernames[i] + '''s Stats====')
shtml := GetPage('http://services.runescape.com/m=hiscore/hiscorepersonal.ws?user1='+usernames[i]);
setlength(stats[i], 25);
for j := 0 to 24 do
begin
name := GetSkillNameFromNumber(j);
//Writeln('::::::::::::::' + name + ':::::::::::::');
p := Pos(name, shtml);
p := PosEx('">', shtml, p)+2;
p2 := PosEx('<', shtml, p);
stats[i][j].rank := Copy(shtml, p, p2-p);
//Writeln('::Rank: ' + stats[i][j].rank);
p := PosEx('">', shtml, p)+2;
p2 := PosEx('<', shtml, p);
stats[i][j].level := Copy(shtml, p, p2-p);
//Writeln('::Level: ' + stats[i][j].level);
p := PosEx('">', shtml, p)+2;
p2 := PosEx('<', shtml, p);
stats[i][j].exp := Copy(shtml, p, p2-p);
//Writeln('::Exp: ' + stats[i][j].exp);
end;
writeln('done '+inttostr(i+1) +' / '+inttostr(len));
end;
setlength(maxstats, 25);
for i := 0 to high(stats) do
for j := 0 to high(Stats[i]) do
begin
str := stats[i][j].exp;
int1 := StrToIntDef(ReplaceRegExpr(',', str, '', true), -1);
str2 := maxstats[j].exp;
int2 := StrToIntDef(ReplaceRegExpr(',', str2, '', true), -1);
if (int1 > int2) then
begin
maxstats[j].level := stats[i][j].level;
maxstats[j].exp := stats[i][j].exp;
maxstats[j].name := usernames[i];
end;
end;
for i := 0 to high(maxstats) do
begin
writeln('Max '+GetSkillNameFromNumber(i)+': '+maxstats[i].name);
writeln('::Level: '+maxstats[i].level);
writeln('::Exp: '+maxstats[i].exp);
end;
end.
Credits to The_RS_Monkey for some stuff.