Skip to content

Instantly share code, notes, and snippets.

@deltabravozulu
Forked from danomoseley/eBay average price
Created February 18, 2022 06:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deltabravozulu/680452c7d6bb96de0ae0872279d10fd7 to your computer and use it in GitHub Desktop.
Save deltabravozulu/680452c7d6bb96de0ae0872279d10fd7 to your computer and use it in GitHub Desktop.
Find an average sold price of an eBay search.Do a search for a product, check the "Sold listings" option under "Show only" in the left navigation.Run this script by pasting it into the console tab of the chrome developer tools.
// var priceCells = document.querySelectorAll('.s-item__price'); //returns a list with all the elements that have class 'priceCell'
let priceCells = document.querySelectorAll('#srp-river-results > ul > li > div > div.s-item__info.clearfix > div.s-item__details.clearfix > div:nth-child(1) > span > span')
sp = []
const length = priceCells.length
function soldPriceArray() {
for (let i = 0; i < length; i++) {
let soldPrice = parseFloat(priceCells[i].innerText.trim().replace('$', '').replace(',', ''))
sp.push(soldPrice)
}
}
function salesMean(numbersArray) {
let total = 0
let i
for (i = 0; i < numbersArray.length; i += 1) {
total += numbersArray[i]
}
return total / numbersArray.length
}
function salesDev(numbersArray) {
// Creating the mean with Array.reduce
let mean = numbersArray.reduce((acc, curr) => {
return acc + curr
}, 0) / numbersArray.length
// Assigning (value - mean) ^ 2 to every numbersArrayay item
numbersArray = numbersArray.map((k) => {
return (k - mean) ** 2
})
// Calculating the sum of updated numbersArrayay
let sum = numbersArray.reduce((acc, curr) => acc + curr, 0)
// Calculating the variance
let variance = sum / numbersArray.length
// Returning the Standard deviation
// return Math.sqrt(sum / numbersArray.length)
return Math.sqrt(variance)
}
function salesMode(numbersArray) {
let uniques = Array.from(new Set(numbersArray)).map(r => [r, 0])
if (uniques.length === numbersArray.length) { return Math.min(...numbersArray) }
for (q in numbersArray) {
for (j in uniques) {
if (numbersArray[q] === uniques[j][0]) {
uniques[j][1] += 1
}
}
}
uniques.sort((a, b) => b[1] - a[1])
return uniques[0][0]
}
function salesMedian(numbersArray) {
// median of [3, 5, 4, 4, 1, 1, 2, 3] = 3
let median = 0
let numsLen = numbersArray.length
numbersArray.sort()
if (
numsLen % 2 === 0 // is even
) {
// average of two middle numbersArray
median = (numbersArray[numsLen / 2 - 1] + numbersArray[numsLen / 2]) / 2
} else { // is odd
// middle number only
median = numbersArray[(numsLen - 1) / 2]
}
return median
}
function salesRange() {
let rangeMaximum = Math.max.apply(Math, sp)
let rangeMinimum = Math.min.apply(Math, sp)
return [rangeMaximum, rangeMinimum]
}
soldPriceArray()
let rangeMaximum = salesRange()[0].toFixed(2)
let rangeMinimum = salesRange()[1].toFixed(2)
let mean = salesMean(sp).toFixed(2)
let standardDeviation = salesDev(sp).toFixed(2)
let median = salesMedian(sp).toFixed(2)
let mode = salesMode(sp).toFixed(2)
console.log('Maximum Value: ' + rangeMaximum, 'Minimum Value: ' + rangeMinimum, 'Average Value: ' + mean, 'Standard Deviation: ' + standardDeviation, 'Median Value: ' + median, 'Most Common Value: ' + mode)
let message = 'Range: $' + rangeMinimum + '-$' + rangeMaximum + '\n'
message += 'Median: $' + median + '\n'
message += 'Mode: $' + mode + '\n'
message += 'Mean: $' + mean + '\n'
message += 'Standard Deviation: $' + standardDeviation + '\n'
let goodDeal = 0.5
message += 'Mean minus ' + goodDeal * 100 + '% standard deviation (good deal): $' + (mean - (standardDeviation * goodDeal)).toFixed(2) + '\n'
message += 'Mean minus one standard deviation (great deal): $' + (mean - standardDeviation).toFixed(2)
alert(message)
//bookmarklet:
//javascript:(function()%7B%2F%2F%20var%20priceCells%20%3D%20document.querySelectorAll('.s-item__price')%3B%20%2F%2Freturns%20a%20list%20with%20all%20the%20elements%20that%20have%20class%20'priceCell'%0Alet%20priceCells%20%3D%20document.querySelectorAll('%23srp-river-results%20%3E%20ul%20%3E%20li%20%3E%20div%20%3E%20div.s-item__info.clearfix%20%3E%20div.s-item__details.clearfix%20%3E%20div%3Anth-child(1)%20%3E%20span%20%3E%20span')%0Asp%20%3D%20%5B%5D%0Aconst%20length%20%3D%20priceCells.length%0A%0Afunction%20soldPriceArray()%20%7B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20let%20soldPrice%20%3D%20parseFloat(priceCells%5Bi%5D.innerText.trim().replace('%24'%2C%20'').replace('%2C'%2C%20''))%0A%20%20%20%20%20%20%20%20sp.push(soldPrice)%0A%20%20%20%20%7D%0A%7D%0A%0Afunction%20salesMean(numbersArray)%20%7B%0A%20%20%20%20let%20total%20%3D%200%0A%20%20%20%20let%20i%0A%20%20%20%20for%20(i%20%3D%200%3B%20i%20%3C%20numbersArray.length%3B%20i%20%2B%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20total%20%2B%3D%20numbersArray%5Bi%5D%0A%20%20%20%20%7D%0A%20%20%20%20return%20total%20%2F%20numbersArray.length%0A%7D%0A%0Afunction%20salesDev(numbersArray)%20%7B%0A%20%20%20%20%2F%2F%20Creating%20the%20mean%20with%20Array.reduce%0A%20%20%20%20let%20mean%20%3D%20numbersArray.reduce((acc%2C%20curr)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20acc%20%2B%20curr%0A%20%20%20%20%7D%2C%200)%20%2F%20numbersArray.length%0A%0A%20%20%20%20%2F%2F%20Assigning%20(value%20-%20mean)%20%5E%202%20to%20every%20numbersArrayay%20item%0A%20%20%20%20numbersArray%20%3D%20numbersArray.map((k)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20(k%20-%20mean)%20**%202%0A%20%20%20%20%7D)%0A%0A%20%20%20%20%2F%2F%20Calculating%20the%20sum%20of%20updated%20numbersArrayay%0A%20%20%20%20let%20sum%20%3D%20numbersArray.reduce((acc%2C%20curr)%20%3D%3E%20acc%20%2B%20curr%2C%200)%0A%0A%20%20%20%20%2F%2F%20Calculating%20the%20variance%0A%20%20%20%20let%20variance%20%3D%20sum%20%2F%20numbersArray.length%0A%0A%20%20%20%20%2F%2F%20Returning%20the%20Standard%20deviation%0A%20%20%20%20%2F%2F%20return%20Math.sqrt(sum%20%2F%20numbersArray.length)%0A%20%20%20%20return%20Math.sqrt(variance)%0A%7D%0A%0Afunction%20salesMode(numbersArray)%20%7B%0A%20%20%20%20let%20uniques%20%3D%20Array.from(new%20Set(numbersArray)).map(r%20%3D%3E%20%5Br%2C%200%5D)%0A%20%20%20%20if%20(uniques.length%20%3D%3D%3D%20numbersArray.length)%20%7B%20return%20Math.min(...numbersArray)%20%7D%0A%20%20%20%20for%20(q%20in%20numbersArray)%20%7B%0A%20%20%20%20%20%20%20%20for%20(j%20in%20uniques)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(numbersArray%5Bq%5D%20%3D%3D%3D%20uniques%5Bj%5D%5B0%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uniques%5Bj%5D%5B1%5D%20%2B%3D%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20uniques.sort((a%2C%20b)%20%3D%3E%20b%5B1%5D%20-%20a%5B1%5D)%0A%20%20%20%20return%20uniques%5B0%5D%5B0%5D%0A%7D%0A%0Afunction%20salesMedian(numbersArray)%20%7B%0A%20%20%20%20%2F%2F%20median%20of%20%5B3%2C%205%2C%204%2C%204%2C%201%2C%201%2C%202%2C%203%5D%20%3D%203%0A%20%20%20%20let%20median%20%3D%200%0A%20%20%20%20let%20numsLen%20%3D%20numbersArray.length%0A%20%20%20%20numbersArray.sort()%0A%0A%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20numsLen%20%25%202%20%3D%3D%3D%200%20%2F%2F%20is%20even%0A%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20average%20of%20two%20middle%20numbersArray%0A%20%20%20%20%20%20%20%20median%20%3D%20(numbersArray%5BnumsLen%20%2F%202%20-%201%5D%20%2B%20numbersArray%5BnumsLen%20%2F%202%5D)%20%2F%202%0A%20%20%20%20%7D%20else%20%7B%20%2F%2F%20is%20odd%0A%20%20%20%20%20%20%20%20%2F%2F%20middle%20number%20only%0A%20%20%20%20%20%20%20%20median%20%3D%20numbersArray%5B(numsLen%20-%201)%20%2F%202%5D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20median%0A%7D%0A%0Afunction%20salesRange()%20%7B%0A%20%20%20%20let%20rangeMaximum%20%3D%20Math.max.apply(Math%2C%20sp)%0A%20%20%20%20let%20rangeMinimum%20%3D%20Math.min.apply(Math%2C%20sp)%0A%20%20%20%20return%20%5BrangeMaximum%2C%20rangeMinimum%5D%0A%7D%0A%0AsoldPriceArray()%0Alet%20rangeMaximum%20%3D%20salesRange()%5B0%5D.toFixed(2)%0Alet%20rangeMinimum%20%3D%20salesRange()%5B1%5D.toFixed(2)%0Alet%20mean%20%3D%20salesMean(sp).toFixed(2)%0Alet%20standardDeviation%20%3D%20salesDev(sp).toFixed(2)%0Alet%20median%20%3D%20salesMedian(sp).toFixed(2)%0Alet%20mode%20%3D%20salesMode(sp).toFixed(2)%0A%0Aconsole.log('Maximum%20Value%3A%20'%20%2B%20rangeMaximum%2C%20'Minimum%20Value%3A%20'%20%2B%20rangeMinimum%2C%20'Average%20Value%3A%20'%20%2B%20mean%2C%20'Standard%20Deviation%3A%20'%20%2B%20standardDeviation%2C%20'Median%20Value%3A%20'%20%2B%20median%2C%20'Most%20Common%20Value%3A%20'%20%2B%20mode)%0A%0Alet%20message%20%3D%20'Range%3A%20%24'%20%2B%20rangeMinimum%20%2B%20'-%24'%20%2B%20rangeMaximum%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Median%3A%20%24'%20%2B%20median%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mode%3A%20%24'%20%2B%20mode%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mean%3A%20%24'%20%2B%20mean%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Standard%20Deviation%3A%20%24'%20%2B%20standardDeviation%20%2B%20'%5Cn'%0Alet%20goodDeal%20%3D%200.5%0Amessage%20%2B%3D%20'Mean%20minus%20'%20%2B%20goodDeal%20*%20100%20%2B%20'%25%20standard%20deviation%20(good%20deal)%3A%20%24'%20%2B%20(mean%20-%20(standardDeviation%20*%20goodDeal)).toFixed(2)%20%2B%20'%5Cn'%0Amessage%20%2B%3D%20'Mean%20minus%20one%20standard%20deviation%20(great%20deal)%3A%20%24'%20%2B%20(mean%20-%20standardDeviation).toFixed(2)%0A%0Aalert(message)%7D)()%3B
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment