// ==UserScript==
// @name PSA.pm TVmaze API
// @namespace tuktuk3103@gmail.com
// @description TVmaze API (https://www.tvmaze.com/api), Icons created by Flat Icons - Flaticon (https://www.flaticon.com/)
// @license CC BY-SA 4.0
// @include *://psa.pm/tv-show/*
// @include *://psarips.com/tv-show/*
// @version 1.01
// @grant GM.openInTab
// @grant GM.xmlHttpRequest
// @icon https://psa.pm/wp-content/uploads/2021/10/cropped-PS-ICO-192x192.png
// @downloadURL none
// ==/UserScript==
//Removing duplicate episodes since it breaks script, sorry if you wanted other variants.
window.addEventListener("DOMContentLoaded", function() {
var var0 = document.querySelectorAll('.sp-head');
var regex = /(S\d{2}E\d{2}).*\.720p/;
for(var x = var0.length; x--; x>-1) {
var check1 = regex.exec(var0[x].textContent);
var check2 = regex.exec(var0[x-1].textContent);
if (check1[1] === check2[1]) var0[x].remove();
}
});
//Adding style
let head = document.getElementsByTagName('head')[0];
if (head) {
let style = document.createElement('style');
style.setAttribute('type', 'text/css');
style.textContent = "#FemaleCast {font-family: Verdana, sans-serif; font-size: 1.6em; font-variant: small-caps;} #MaleCast {font-family: Verdana, sans-serif; font-size: 1.6em; font-variant: small-caps;}";
head.appendChild(style);
}
//XHR
var id = document.querySelector("h1.entry-title").textContent;
var tvmazeAPI = "https://api.tvmaze.com/singlesearch/shows?q=" + encodeURIComponent(id) + "&embed[]=cast&embed[]=episodes";
GM.xmlHttpRequest ({
method: 'GET',
url: tvmazeAPI,
responseType: "json",
onload: function (response) {
document.querySelector("h1.entry-title").textContent += " (" + response.response.premiered.slice(0, 4) + ")"; //Adding year
//Adding containers for the response data
document.querySelector("h1.entry-title").insertAdjacentHTML('afterbegin', '
');
document.querySelector("h1.entry-title").insertAdjacentHTML('afterend', '
');
switch (response.response.schedule.days[0]) { //Get the day and set the icon
case "Sunday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/sunday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776782.png");
break;
case "Monday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/monday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776609.png");
break;
case "Tuesday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/tuesday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776837.png");
break;
case "Wednesday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/wednesday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776852.png");
break;
case "Thursday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/thursday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776798.png");
break;
case "Friday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/friday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776451.png");
break;
case "Saturday":
document.getElementById("dayLink").setAttribute("href", "https://www.flaticon.com/free-icons/saturday");
document.getElementById("dayImg").setAttribute("src", "https://cdn-icons-png.flaticon.com/512/5776/5776750.png");
break;
default:
document.getElementById("dayLink").setAttribute("href", "");
document.getElementById("dayImg").setAttribute("src", "");
}
//Segregate by gender
const Female = response.response._embedded.cast.filter(actress => actress.person.gender === "Female"); //Ladies first! (*^_^*)
document.getElementById("FemaleCast").innerHTML += "Female Cast: " + "" + Female[0].person.name + "" + ", " + "" + Female[1].person.name + "" + ", " + "" + Female[2].person.name + "" + ".";
const Male = response.response._embedded.cast.filter(actor => actor.person.gender === "Male");
document.getElementById("MaleCast").innerHTML += "Male Cast: " + "" + Male[0].person.name + "" + ", " + "" + Male[1].person.name + "" + ", " + "" + Male[2].person.name + "" + ".";
document.getElementById("wpd-post-rating").insertAdjacentHTML('afterend', response.response.summary); //Adding show summary
var var1 = document.querySelectorAll('.sp-head');
var j = 0;
for(var i = var1.length; i--; i>-1) { //Adding episode names and summaries
if (/E\d{2}.*\.720p/.test(var1[i].textContent)) { //Ignores TV-PACKS
var s = /S(\d{2})/.exec(var1[i].textContent); //Gets the season number
if (parseInt(s[1], 10) === response.response._embedded.episodes[j].season) { //Checks if the season number matches
if (/E\d{2}E\d{2}/.test(var1[i].textContent)) { //Double episodes
var1[i].insertAdjacentHTML('beforeend', '
' + response.response._embedded.episodes[j].name + ': ' + response.response._embedded.episodes[j].summary + '
' + response.response._embedded.episodes[j+1].name + ': ' + response.response._embedded.episodes[j+1].summary);
j = j+2;
} else {
var1[i].insertAdjacentHTML('beforeend', '
' + response.response._embedded.episodes[j].name + ': ' + response.response._embedded.episodes[j].summary);
j++;
}
} else { j++; i++; }
}
}
console.log (
"GM.xmlHttpRequest() response is:\n",
response.response
);
}
});
// TVmaze API Button
var node1 = document.createElement("div");
node1.setAttribute("style","position: fixed;" +
"bottom: 0;" +
"left: 28px;" +
"cursor: pointer;" +
"border: 1px solid #313131;" +
"border-top-left-radius: 5px;" +
"background: #101000;" +
"padding: 7px 15px;" +
"z-index: 999999;");
node1.setAttribute("title", "Click here to open API");
node1.innerHTML = "
";
node1.id = "api";
document.body.appendChild(node1);
document.getElementById("api").addEventListener('click', function() { GM.openInTab("https://www.tvmaze.com/api#licensing", false); }, false);