Update and Fetch Data Script

Update storage with user input and fetch data from API

Från och med 2025-01-09. Se den senaste versionen.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Update and Fetch Data Script
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Update storage with user input and fetch data from API
// @author       Your Name
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    // Create update data button
    const updateButton = document.createElement('button');
    updateButton.textContent = '更新数据';
    updateButton.style.position = 'fixed';
    updateButton.style.top = '10px';
    updateButton.style.right = '10px';
    updateButton.style.zIndex = 1000;
    updateButton.style.padding = '10px 15px';
    updateButton.style.backgroundColor = '#007BFF';
    updateButton.style.color = '#FFFFFF';
    updateButton.style.border = 'none';
    updateButton.style.borderRadius = '5px';
    updateButton.style.cursor = 'pointer';
    document.body.appendChild(updateButton);

    // Update data button event handler
    updateButton.addEventListener('click', () => {
        const url = window.location.origin + "/api/admin/storage/update";
        const token = window.localStorage['token'];
        const update_data = prompt("请输入更新的数据(JSON 格式):");
        if (update_data) {
            let parsedData;
            try {
                parsedData = JSON.parse(update_data);
            } catch (e) {
                alert("输入的数据不是有效的 JSON 格式。请重新输入。");
                return;
            }
            fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                    "authorization": token
                },
                body: JSON.stringify(parsedData),
            })
            .then(response => response.json())
            .then(data => {
                console.log("更新成功:", data);
                alert("数据更新成功!");
            })
            .catch(error => {
                console.error("更新错误:", error);
                alert("数据更新失败,请查看控制台以获取详情。");
            });
        } else {
            alert("未输入数据,操作被取消。");
        }
    });

    // Create fetch data button
    const fetchButton = document.createElement('button');
    fetchButton.textContent = '获取数据';
    fetchButton.style.position = 'fixed';
    fetchButton.style.top = '50px'; // Adjust position to avoid overlap
    fetchButton.style.right = '10px';
    fetchButton.style.zIndex = 1000;
    fetchButton.style.padding = '10px 15px';
    fetchButton.style.backgroundColor = '#28A745';
    fetchButton.style.color = '#FFFFFF';
    fetchButton.style.border = 'none';
    fetchButton.style.borderRadius = '5px';
    fetchButton.style.cursor = 'pointer';
    document.body.appendChild(fetchButton);

    // Fetch data button event handler
    fetchButton.addEventListener('click', () => {
        const fetchUrl = window.location.origin + "/api/admin/storage/get?id=7";
        const token = window.localStorage['token'];
        fetch(fetchUrl, {
            method: "GET",
            headers: {
                "authorization": token
            }
        })
        .then(response => response.json())
        .then(data => {
            console.log("获取成功:", data);
            const formattedData = JSON.stringify(data, null, 2);
            alert("获取到的数据请从data后面的括号开始复制到记事本进行修改:\n" + formattedData);

            // Prompt for copying data to clipboard
            if (confirm("是否复制获取到的数据到剪贴板?")) {
                navigator.clipboard.writeText(formattedData)
                    .then(() => {
                        // Optionally, create a notification message
                        const messageDiv = document.createElement('div');
                        messageDiv.textContent = "数据已复制到剪贴板!";
                        messageDiv.style.position = 'fixed';
                        messageDiv.style.top = '130px'; // Position the message below the fetch button
                        messageDiv.style.right = '10px';
                        messageDiv.style.zIndex = 1000;
                        messageDiv.style.padding = '10px 15px';
                        messageDiv.style.backgroundColor = '#dc3545'; // Red background
                        messageDiv.style.color = '#FFFFFF'; // White text
                        messageDiv.style.borderRadius = '5px';
                        messageDiv.style.fontSize = '14px';
                        document.body.appendChild(messageDiv);

                        // Remove the message after 3 seconds
                        setTimeout(() => {
                            document.body.removeChild(messageDiv);
                        }, 3000);
                    })
                    .catch(err => {
                        console.error("复制失败:", err);
                        alert("数据复制失败,请查看控制台以获取详情。");
                    });
            }
        })
        .catch(error => {
            console.error("获取错误:", error);
            alert("数据获取失败,请查看控制台以获取详情。");
        });
    });
})();