Last active
July 26, 2023 05:33
-
-
Save dotcomboom/9d8e33304ff1e8ce3250bc5a1a8c956b to your computer and use it in GitHub Desktop.
Neopets: Shop Stock Pricer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Neopets: Shop Stock Pricer | |
// @namespace http://lince.somnolescent.net | |
// @version 0.2 | |
// @description This script lets you scrape JellyNeo for prices on the shop stock page. Does not auto-submit or otherwise automate activities, though it does send a bunch of search requests to JN when run. Use at your own risk. | |
// @author metalynx | |
// @match http://www.neopets.com/market.phtml?order_by=id* | |
// @match http://www.neopets.com/market.phtml?type=your* | |
// @icon https://www.google.com/s2/favicons?domain=neopets.com | |
// @require https://cdn.jsdelivr.net/npm/axios@~0.21.1/dist/axios.min.js | |
// @require https://cdn.jsdelivr.net/npm/axios-userscript-adapter@~0.1.2/dist/axiosGmxhrAdapter.min.js | |
// @grant GM.xmlHttpRequest | |
// @grant GM_setValue | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
let offset = -5 // increase/decrease prices a fixed amount | |
let minprice = 1 | |
console.log(axios.defaults.adapter); | |
axios.defaults.adapter = axiosGmxhrAdapter; | |
let forms = document.getElementsByTagName('form') | |
for (let i = 0; i < forms.length; i++) { | |
if ((forms[i].action) == 'http://www.neopets.com/process_market.phtml') { | |
var form = forms[i]; | |
break | |
} | |
} | |
var node = document.createElement('a') | |
node.href = '#autoprice' | |
node.setAttribute('id', 'autoprice') | |
var textnode = document.createTextNode(" >>") | |
node.appendChild(textnode); | |
form.getElementsByTagName('td')[4].appendChild(node); | |
node.onclick = function(){ | |
document.getElementById("autoprice").remove() | |
let rows = form.getElementsByTagName('tr') | |
for (let i = 1; rows.length - 1; i++) { // index is set to 1 to skip the header row "Name", goes to the index just before the bottom Update/Remove All row | |
let item = rows[i].getElementsByTagName('b')[0].innerHTML | |
let pricebox = rows[i].getElementsByTagName('input')[2] | |
//console.log(item + ' is currently set to ' + pricebox.value + ' NP') | |
axios.get('https://items.jellyneo.net/search/?name=' + item.replace(' ', '+') + '&name_type=3').then(res => { | |
let parser = new DOMParser() | |
let doc = parser.parseFromString(res.data, 'text/html') | |
let links = doc.getElementsByTagName('a') | |
let price = 0 | |
for (let i = 1; i < links.length - 1; i++) { | |
if (links[i].className == 'price-history-link') { | |
price = parseInt(links[i].innerHTML.replace(',', '').replace(' NP', '')) | |
break | |
} | |
} | |
console.log('JN PRICE: ' + price + ' NP (' + item + ')') | |
pricebox.setAttribute('value', Math.max(minprice, price += offset)) | |
}); | |
} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Figured it out. I'm dumb.
Not only do you have to change http to https in lines 7 and 8, you also have to do it in line 27.