A much faster script than my previous version. Instead of querying each item individually, it loops through the items in the list and uses the queryNeopetItem to send the data to another php page, which pareses the items and returns the prices of each of them. When the data is returned, it is then split and the table is formatted depending on what action should be taken (light green=no data, medium green=more expensive than data, grey = neofriend only, blue = make profit)
And below is the source for the greasemonkey script:
// ==UserScript== // @name AuctionBot test v2 // @namespace Sim0n NeoPets // @include http://www.neopets.com/auctions.phtml // ==/UserScript== function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null; var oCurrent; var oAttribute; for(var i=0; i<arrElements.length; i++){ oCurrent = arrElements[i]; oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName); if(typeof oAttribute == "string" && oAttribute.length > 0){ if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){ arrReturnElements.push(oCurrent); } } } return arrReturnElements; } function queryNeopetItem(item, complete) { url = "myphpquery.php?items=" + item; GM_xmlhttpRequest({ method: "POST", url: url, headers:{'Content-type':'application/x-www-form-urlencoded'}, data:encodeURI(""), onload: function(xhr) { complete(xhr.responseText); } }); } function comp(text) { var items = text.split("\n"); for(var i = 0;i<20;i++) { if(items[i] == "") { table[0].rows[i+1].setAttribute("bgcolor","#ccffd0"); } else { var item = items[i].split("\t"); var cur_price = table[0].rows[i+1].cells[6].innerHTML.replace(/<b>(\d*)<\/b> NP/, "$1"); if(Number(cur_price)<=Number(item[0])) { if(table[0].rows[i+1].cells[3].innerHTML.toLowerCase().indexOf("<b>[nf]</b>") != -1) { table[0].rows[i+1].setAttribute("bgcolor","#aaafa0"); } else { alert(table[0].rows[i+1].cells[3].innerHTML) table[0].rows[i+1].setAttribute("bgcolor","#00ffff"); } } else { table[0].rows[i+1].setAttribute("bgcolor","#aaffd0"); } } } } var table = getElementsByAttribute(document.body, "table", "align", "center"); var queryString = ""; for(var i=1;i<table[0].rows.length - 1;i++) { queryString = queryString + table[0].rows[i].cells[2].innerHTML.replace(/<a href=\".*\">(.*)<\/a>/, "$1") + "|"; } queryString = queryString + table[0].rows[table[0].rows.length-1].cells[2].innerHTML.replace(/<a href=\".*\">(.*)<\/a>/, "$1") queryNeopetItem(queryString, comp);
And for the php query:
<?php
$dbhost = 'a';
$dbuser = 'b';
$dbpass = 'd';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('0');
$dbname = 'e';
mysql_select_db($dbname);
$items = explode("|", $_GET['items']);
for($i=0;$i<count($items);$i++) {
$sqlQuery = "ITEM_NAME = '$items[$i]'";
$result = mysql_query("SELECT * FROM Neopets_Items WHERE $sqlQuery");
$any = false;
while($row = mysql_fetch_array($result))
{
$any = true;
echo $row['MAX_PRICE'] . "\t" . $row['SELL_PRICE'] . "\n";
}
if($any==false) {
echo "\n";
}
}
mysql_close($conn);
?>