Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Max Datum (Greasemonkey)
- // @namespace http://tampermonkey.net/
- // @version 2.0
- // @description Preuzima API podatke u pozadini i prikazuje konvertirani datum unutar tipke. Tipka se resetira na "Dostupno do:" za svaki novi link, te se sakriva na video stranicama.
- // @match https://play.max.com/*
- // @grant GM.xmlHttpRequest
- // @connect default.any-emea.prd.api.max.com
- // ==/UserScript==
- (function() {
- 'use strict';
- // Ako GM_xmlhttpRequest nije definiran, a postoji GM.xmlHttpRequest, postavimo ga.
- if (typeof GM_xmlhttpRequest === "undefined" && typeof GM !== "undefined" && GM.xmlHttpRequest) {
- window.GM_xmlhttpRequest = GM.xmlHttpRequest;
- }
- function checkForVideoPage() {
- const btnEl = document.getElementById("convertLinkBtn");
- if (window.location.href.includes("/video/watch/")) {
- if (btnEl) btnEl.style.display = "none";
- } else {
- if (btnEl) {
- btnEl.style.display = "block";
- btnEl.innerText = "Dostupno do:";
- }
- }
- }
- // Detekcija promjena URL-a bez intervala
- const wrapHistoryMethod = method => {
- const original = history[method];
- return function() {
- const result = original.apply(this, arguments);
- window.dispatchEvent(new Event("locationchange"));
- return result;
- };
- };
- history.pushState = wrapHistoryMethod("pushState");
- history.replaceState = wrapHistoryMethod("replaceState");
- window.addEventListener("popstate", () => window.dispatchEvent(new Event("locationchange")));
- window.addEventListener("locationchange", checkForVideoPage);
- checkForVideoPage();
- // Kreiramo tipku ako ne postoji
- let btn = document.getElementById("convertLinkBtn");
- if (!btn) {
- btn = document.createElement("button");
- btn.id = "convertLinkBtn";
- btn.innerText = "Dostupno do:";
- btn.style.position = "fixed";
- btn.style.bottom = "20px";
- btn.style.right = "20px";
- btn.style.zIndex = "9999";
- btn.style.padding = "10px";
- btn.style.backgroundColor = "#002BE7";
- btn.style.color = "#fff";
- btn.style.border = "none";
- btn.style.borderRadius = "5px";
- btn.style.cursor = "pointer";
- document.body.appendChild(btn);
- }
- btn.addEventListener("click", () => {
- const currentUrl = window.location.href;
- let token = (currentUrl.match(/{{\s*([^}]+)\s*}}/) || [])[1] || window.location.pathname.substring(1);
- if (token) {
- const apiUrl = `https://default.any-emea.prd.api.max.com/cms/routes/${token}?include=default&decorators=viewingHistory,isFavorite,contentAction,badges&page[items.size]=10`;
- GM_xmlhttpRequest({
- method: "GET",
- url: apiUrl,
- responseType: "json",
- onload: response => {
- if (response.status === 200) {
- const jsonData = response.response;
- function findDownload(obj) {
- if (typeof obj !== "object" || obj === null) return null;
- if (obj.code === "DOWNLOAD" && obj.availability && obj.availability.to) return obj.availability.to;
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- const found = findDownload(obj[key]);
- if (found) return found;
- }
- }
- return null;
- }
- const toDate = findDownload(jsonData);
- if (toDate) {
- const dateObj = new Date(toDate);
- const options = { timeZone: 'Europe/Zagreb', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' };
- const localDate = dateObj.toLocaleString('hr-HR', options);
- btn.innerText = "Dostupno do: " + localDate;
- } else {
- console.error("Nije pronađen objekt s 'code: DOWNLOAD' ili ne postoji availability.to.");
- }
- } else {
- console.error("HTTP greška: " + response.status);
- }
- },
- onerror: err => console.error("Pogreška prilikom zahtjeva:", err)
- });
- } else {
- alert("Nije moguće pronaći token u URL-u.");
- }
- });
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement