Steam 指南图片ID和标题导出器

导出Steam指南图片的img id和对应的title为CSV文件

// ==UserScript==
// @name         Steam 指南图片ID和标题导出器
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  导出Steam指南图片的img id和对应的title为CSV文件
// @match        https://steamcommunity.com/sharedfiles/editguidesubsection/*
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    function waitForPreviewImages(callback) {
        const interval = setInterval(() => {
            const container = document.querySelector("#PreviewImages");
            const titleEl = document.querySelector("#BG_bottom > div.editGuidePageTitle");

            if (container && container.querySelector("img") && titleEl) {
                clearInterval(interval);
                const guideTitle = sanitizeFilename(titleEl.innerText.trim());
                callback(container,guideTitle);
            }
        }, 500);
    }
        function sanitizeFilename(name) {
        return name.replace(/[\\/:*?"<>|]/g, "_");
    }

    function extractImageData(container) {
        const images = container.querySelectorAll("img");
        const data = [["id", "title"]];

        images.forEach(img => {
            const id = img.id || "";
            const title = img.title || "";
            data.push([id, title]);
        });

        return data;
    }


    function exportToCSV(data, filename) {
        const csvContent = data.map(row =>
            row.map(v => `"${v.replace(/"/g, '""')}"`).join(",")
        ).join("\n");

        const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" });
        const url = URL.createObjectURL(blob);
        const link = document.createElement("a");

        link.setAttribute("href", url);
        link.setAttribute("download", filename);
        link.style.display = "none";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }

    function addExportButton(container,guideTitle) {
        const btn = document.createElement("button");
        btn.innerText = "导出图片CSV";
        btn.style.margin = "10px";
        btn.style.padding = "5px 10px";
        btn.style.backgroundColor = "#5c7e10";
        btn.style.color = "#fff";
        btn.style.border = "none";
        btn.style.cursor = "pointer";
        btn.style.fontSize = "14px";

        btn.onclick = () => {
            const data = extractImageData(container);
            const filename = `${guideTitle}_steam_guide_images.csv`;
            exportToCSV(data, filename);
        };

        container.parentElement.insertBefore(btn, container);
    }

    waitForPreviewImages((container, guideTitle) => {
        addExportButton(container, guideTitle);
    });
})();