Skip to content

Instantly share code, notes, and snippets.

@duplaja
Created September 25, 2021 00:39
Show Gist options
  • Save duplaja/dc0615f5e864faffc9979b4a08af3661 to your computer and use it in GitHub Desktop.
Save duplaja/dc0615f5e864faffc9979b4a08af3661 to your computer and use it in GitHub Desktop.
JS Scraper for RYM Charts page
getRYMChart();
function getRYMChart() {
const rows = [["Artist-Album","Release","Genres","Link"]]
var tables = document.querySelectorAll("div.chart_results_frame");
var recTable = tables[0];
var tableRows = recTable.querySelectorAll("div.topcharts_itembox");
for (i = 0; i < tableRows.length; i++) {
title = tableRows[i].querySelectorAll("a.release")[0].innerText.trim();
artist = tableRows[i].querySelectorAll("a.artist")[0].innerText.trim();
link = tableRows[i].querySelectorAll("a.release")[0].href;
year = tableRows[i].querySelectorAll("div.topcharts_item_releasedate")[0].innerText.trim();
genres = tableRows[i].querySelectorAll("div.topcharts_item_genres_container")[0].innerText.trim();
combined = artist+' - '+title;
rows[rows.length] = [combined,year,genres,link];
}
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();
today = mm + '-' + dd + '-' + yyyy;
filename = "rym-chart-"+today+".csv"
exportToCsv(filename,customShuffle(rows))
}
function exportToCsv(filename, rows) {
var processRow = function (row) {
var finalVal = '';
for (var j = 0; j < row.length; j++) {
var innerValue = row[j] === null ? '' : row[j].toString();
if (row[j] instanceof Date) {
innerValue = row[j].toLocaleString();
};
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0)
result = '"' + result + '"';
if (j > 0)
finalVal += ',';
finalVal += result;
}
return finalVal + '\n';
};
var csvFile = '';
for (var i = 0; i < rows.length; i++) {
csvFile += processRow(rows[i]);
}
var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
function customShuffle(x) {
var y = x.slice(1, x.length);
var j, t, i;
for (i = y.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
t = y[i];
y[i] = y[j];
y[j] = t;
}
return [x[0]].concat(y);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment