User:Bluefire2/getHSData.js

/** * Syntax: * getHSData( playerName, callback ) ** playerName **** Type: string **** The name of the player whose stats you want ** callback **** Type: Function(Array stats) **** The callback function to be performed, where *stats* contains the player's stats in the format [ level, XP ]. This function is *void*. * Example: ** getHSData('zezima', function( stats ) { ** 	// logs '2595' ** 	console.log( stats[ "Overall" ][ 0 ] ); ** 	// logs '200000000' ** 	console.log( stats[ "Dungeoneering" ][ 1 ] ); ** }); */ var skills = [ "Overall", "Attack", "Defence", "Strength", "Constitution", "Ranged", "Prayer", "Magic", "Cooking", "Woodcutting", "Fletching", "Fishing", "Firemaking", "Crafting", "Fishing", "Mining", "Herblore", "Agility", "Thieving", "Slayer", "Farming", "Runecrafting", "Hunter", "Construction", "Summoning", "Dungeoneering", "Divination" ]; String.prototype.replaceAll = function(find, replace) { return this.replace(new RegExp(find, 'g'), replace); } // This function was stolen from somewhere on Stackoverflow function CSVToArray( strData, strDelimiter ) { // Check to see if the delimiter is defined. If not, // then default to comma. strDelimiter = (strDelimiter || ",");

// Create a regular expression to parse the CSV values. var objPattern = new RegExp(		( // Delimiters. "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +

// Quoted fields. "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +

// Standard fields. "([^\"\\" + strDelimiter + "\\r\\n]*))"		),		"gi"		);

// Create an array to hold our data. Give the array // a default empty first row. var arrData = ;

// Create an array to hold our individual pattern // matching groups. var arrMatches = null;

// Keep looping over the regular expression matches // until we can no longer find a match. while (arrMatches = objPattern.exec( strData )) {

// Get the delimiter that was found. var strMatchedDelimiter = arrMatches[ 1 ];

// Check to see if the given delimiter has a length // (is not the start of string) and if it matches // field delimiter. If id does not, then we know // that this delimiter is a row delimiter. if ( strMatchedDelimiter.length && strMatchedDelimiter !== strDelimiter ) {

// Since we have reached a new row of data, // add an empty row to our data array. arrData.push( [] );

}

var strMatchedValue;

// Now that we have our delimiter out of the way, // let's check to see which kind of value we // captured (quoted or unquoted). if (arrMatches[ 2 ]){

// We found a quoted value. When we capture // this value, unescape any double quotes. strMatchedValue = arrMatches[ 2 ].replace(				new RegExp( "\"\"", "g" ),				"\""				);

} else {

// We found a non-quoted value. strMatchedValue = arrMatches[ 3 ];

}

// Now that we have our value string, let's add // it to the data array. arrData[ arrData.length - 1 ].push( strMatchedValue ); }

// Return the parsed data. return( arrData ); } function getHSData( playerName, callback ) { $.getJSON('http://anyorigin.com/dev/get?url=http%3A//services.runescape.com/m%3Dhiscore/index_lite.ws%3Fplayer%3D' + playerName + '&callback=?', function( data ) {		// Jagex's CSV is evil, so we need to make it normal:		var csv = data[ 'contents' ].replaceAll(" ", "\n"),			temp = CSVToArray(csv),			stats = {};		// now we just need to parse this		$.each(skills, function( index ) { var skill = skills[ index ], tempData = temp[ index ]; stats[ skill ] = [ tempData[ 1 ], tempData[ 2 ] ]; });		// now we're ready to do the callback		callback(stats);	}); }