Rotten Tomatoes export CSV button with Reviews- update -2020

Adds a 'Download CSV' button to the personal ratings page in Rotten Tomatoes which downloads a Letterboxd compatible CSV file.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Rotten Tomatoes export CSV button with Reviews- update -2020
// @namespace
// @version      0.5
// @description  Adds a 'Download CSV' button to the personal ratings page in Rotten Tomatoes which downloads a Letterboxd compatible CSV file.
// @author       Guy Hizkiau
// @Guy who added reviews as an exported field   Lagomorph
// @match        https://www.rottentomatoes.com/user/id/*/ratings
// @grant        none
// @namespace https://greasyfork.org/users/72895
// ==/UserScript==
debugger;
String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

var ratingBoxes = document.getElementsByClassName("ratings__user-rating-review");
var ratingsArray = [];

for (var i = ratingBoxes.length - 1; i >= 0; i--) {
	var boxBody = ratingBoxes[i].getElementsByClassName("bottom_divider ratings__user-rating")[0];

	var boxHeading = boxBody.getElementsByClassName("ratings__review-top")[0];
	var titleA = boxHeading.getElementsByTagName("a")[0];
	var title = titleA.textContent.replaceAll(",", "");

	var yearSpan = boxHeading.getElementsByTagName("span")[0];
	var year = yearSpan.textContent.substring(1,5);

	var ratingDiv = boxBody.getElementsByTagName("div")[1];
    var ratinghalf = 0;
    var ratingfull = ratingBoxes[i].getElementsByClassName("star-display__filled ").length;
    ratinghalf = ratingBoxes[i].getElementsByClassName("star-display__half ").length;
	if (ratinghalf == 1) {
		ratingValue = ratingfull + 0.5;
	}
	else {
		ratingValue = ratingfull;
	}

    var ratingLog = boxBody.getElementsByClassName("ratings__age")[0].textContent;
    var ratingDateVerbal = ratingLog.substring(0,ratingLog.indexOf("ago")-1).split(" ");

    var ratingDate = new Date();
    var ratingDateFormated;
    var ratingValue
    //var reviewRaw = boxBody.children[3].innerText; //grab raw review text
    var reviewRaw_full = boxBody.getElementsByClassName("ratings__comment")[0].textContent;
    var reviewRaw = reviewRaw_full.replaceAll("\"", "\"\""); //replace double quotes with double double quotes to prepare for comma sanitziation for CSV format
    reviewRaw = reviewRaw.replace(/\n/g, " ");
    reviewRaw = reviewRaw.replace(/[`~!@#$%^&*()]/gi, '');
    var review = '"' + reviewRaw + '"' //append quotes at beginning and end of string to escape all commas for CSV format

    if (ratingDateVerbal[1] == "days") {
        ratingDate.setDate(ratingDate.getDate()-ratingDateVerbal[0]);
        ratingDateFormated = ratingDate.getFullYear() + '-' + (ratingDate.getMonth()+1) + '-' + ratingDate.getDate();
    } else if (ratingDateVerbal[1] == "months") {
        ratingDate.setMonth(ratingDate.getMonth()-ratingDateVerbal[0]);
        ratingDateFormated = ratingDate.getFullYear() + '-' + (ratingDate.getMonth()+1) + '-' + 1;
    } else if (ratingDateVerbal[1] == "years") {
        ratingDate.setFullYear(ratingDate.getFullYear()-ratingDateVerbal[0]);
        ratingDateFormated = ratingDate.getFullYear() + '-' + 1 + '-' + 1;
    }

	ratingsArray.push([title, year, ratingDateFormated, ratingValue, review]);
}

//debugger;
var csvContent = "data:text/csv;charset=utf-8,";

csvContent += "Title,Year,WatchedDate,Rating,Review\n"

ratingsArray.forEach(function(infoArray, index){
   var dataString = infoArray.join(",");
   csvContent += index < ratingsArray.length ? dataString + "\n" : dataString;

});

var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "rotten_tomatoes_ratings.csv");
document.body.appendChild(link); // Required for FF

var pageBody = document.getElementsByClassName("panel-heading")[0]
//debugger;
function download() {
	link.click();
	return;
}

var downloadButton = document.createElement("button");
var buttonText = document.createTextNode("Download CSV");
downloadButton.appendChild(buttonText);
downloadButton.classList.add("panel-heading");
downloadButton.onclick = download;

pageBody.insertBefore(downloadButton, pageBody.children[0]);