Greasy Fork is available in English.
Exports the entries of a Criticker watchlist as a CSV file.
当前为
// ==UserScript==
// @name Criticker Watchlist Exporter
// @namespace http://tampermonkey.net/
// @version 0.0.2
// @description Exports the entries of a Criticker watchlist as a CSV file.
// @author Alsweider
// @match https://www.criticker.com/films/?collection=*
// @icon https://www.google.com/s2/favicons?sz=64&domain=criticker.com
// @grant GM_download
// @license MIT
// ==/UserScript==
(function () {
'use strict';
// Variablen
let collectionId = new URLSearchParams(window.location.search).get("collection");
let allEntries = [];
let totalPages = 1; // Wird später dynamisch gesetzt
// Funktion zum Extrahieren der Einträge aus der HTML-Seite
function extractEntriesFromDocument(doc) {
let entries = [];
doc.querySelectorAll(".fl_name").forEach(div => {
let titleElement = div.querySelector(".fl_titlelist_link");
let scoreElement = div.parentElement.querySelector(".pti");
if (titleElement) {
let fullText = titleElement.innerText.trim();
let match = fullText.match(/^(.*) \((\d{4})\)$/); // Extrahiert Titel und Jahr
if (match) {
let title = match[1];
let year = match[2];
let score = scoreElement ? scoreElement.innerText.trim() : ""; // Probable Score extrahieren
entries.push({ title, year, score });
}
}
});
return entries;
}
// Funktion zum Abrufen der Inhalte einer Seite
function fetchPage(pageNumber) {
return new Promise((resolve, reject) => {
let pageUrl = `https://www.criticker.com/films/?collection=${collectionId}&p=${pageNumber}`;
console.log(`Lade Seite ${pageNumber}: ${pageUrl}`);
fetch(pageUrl)
.then(response => response.text())
.then(html => {
let parser = new DOMParser();
let doc = parser.parseFromString(html, "text/html");
// Einträge extrahieren
let entries = extractEntriesFromDocument(doc);
resolve(entries);
// Gesamtseitenzahl prüfen (falls noch nicht gesetzt)
if (pageNumber === 1) {
let paginationLinks = doc.querySelectorAll(".pagination a");
if (paginationLinks.length > 0) {
totalPages = Math.max(...Array.from(paginationLinks).map(link => {
let match = link.href.match(/&p=(\d+)/);
return match ? parseInt(match[1]) : 1;
}));
console.log(`Gesamtseiten: ${totalPages}`);
}
}
})
.catch(error => {
console.error(`Fehler beim Abrufen von Seite ${pageNumber}:`, error);
reject(error);
});
});
}
// Funktion zum Verarbeiten aller Seiten
async function fetchAllPages() {
for (let i = 1; i <= totalPages; i++) {
let entries = await fetchPage(i);
allEntries = allEntries.concat(entries);
}
createCSV(allEntries);
}
// Funktion zum Erstellen der CSV-Datei
function createCSV(entries) {
let csvContent = "Title,Year,Probable Score\n";
entries.forEach(entry => {
csvContent += `"${entry.title}","${entry.year}","${entry.score}"\n`;
});
// CSV-Datei zum Download bereitstellen
let blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" });
let url = URL.createObjectURL(blob);
let a = document.createElement("a");
a.href = url;
a.download = "criticker_watchlist.csv";
a.click();
URL.revokeObjectURL(url);
console.log("CSV erfolgreich erstellt!");
}
// Starten der Extraktion
window.addEventListener("load", () => {
console.log("Starte die Extraktion aller Seiten...");
fetchAllPages().then(() => {
console.log("Extraktion abgeschlossen!");
});
});
})();