Greasy Fork

Greasy Fork is available in English.

火烧云快捷查看

在网页右上角添加云图标,单击时显示弹出窗口,火烧云快捷查看

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         火烧云快捷查看
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  在网页右上角添加云图标,单击时显示弹出窗口,火烧云快捷查看
// @author       Finder
// @match        *://*/*
// @grant        none
// @run-at       document-end
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

// 创建圆形图标
const cornerDiv = document.createElement('div');
cornerDiv.style.position = 'fixed';
cornerDiv.style.top = '60px'; // 向下移动50px
cornerDiv.style.right = '10px';
cornerDiv.style.width = '50px';
cornerDiv.style.height = '50px';
cornerDiv.style.backgroundColor = 'rgba(182,201,184,0.8)';
cornerDiv.style.cursor = 'pointer';
cornerDiv.style.zIndex = '9999';
cornerDiv.style.display = 'flex';
cornerDiv.style.alignItems = 'center';
cornerDiv.style.justifyContent = 'center';
cornerDiv.style.borderRadius = '50%'; // 设置为圆形

// 添加云图标
const cloudIcon = document.createElement('img');
cloudIcon.src = 'https://dss2.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/weather/icons/a2.png'; // 使用提供的云图标链接
cloudIcon.style.width = '30px'; // 调整图标大小
cloudIcon.style.height = '30px'; // 调整图标大小
cornerDiv.appendChild(cloudIcon);

document.body.appendChild(cornerDiv);

    // 创建模态框
    const modal = document.createElement('div');
    modal.style.position = 'fixed';
    modal.style.top = '0';
    modal.style.left = '0';
    modal.style.width = '100%';
    modal.style.height = '100%';
    modal.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
    modal.style.display = 'none'; // 初始隐藏
    modal.style.zIndex = '10000';
    modal.style.justifyContent = 'center';
    modal.style.alignItems = 'center';

    // 模态框内容
    const modalContent = document.createElement('div');
    modalContent.style.backgroundColor = 'white';
    modalContent.style.padding = '20px';
    modalContent.style.borderRadius = '8px';
    modalContent.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.1)';
    modalContent.innerHTML = '<h2>天气信息</h2><div id="weatherData" style="text-align: left;">加载中...</div><button id="closeModal">关闭</button>';
    modal.appendChild(modalContent);
    document.body.appendChild(modal);

    // 单击事件
    cornerDiv.addEventListener('click', async () => {
        const results = await fetchWeatherData();
        document.getElementById('weatherData').innerHTML = results.join('<br/>'); // 显示结果
        modal.style.display = 'flex'; // 显示模态框
    });

    // 关闭模态框
    document.getElementById('closeModal')?.addEventListener('click', () => {
        modal.style.display = 'none'; // 隐藏模态框
    });

    // 点击模态框外部关闭模态框
    modal.addEventListener('click', (event) => {
        if (event.target === modal) {
            modal.style.display = 'none'; // 隐藏模态框
        }
    });

    // 请求天气数据的函数
    async function fetchWeatherData() {
        const cityName = "苏州"; // 城市名称
        const encodedCityName = encodeURIComponent(cityName); // 编码城市名称
        const events = ['rise_1', 'set_1', 'rise_2', 'set_2'];
        const results = [];

        for (const event of events) {
            // 构建请求 URL
            const url = `https://hosunapi.finderskys.online/api/?query_id=7871925&intend=select_city&query_city=${encodedCityName}&event_date=None&event=${event}&times=None`;

            try {
                // 发送请求到代理服务器
                const response = await fetch(url, {
                    method: 'GET',
                    headers: {
                        'X-Requested-With': 'XMLHttpRequest',
                    }
                });

                // 检查响应是否成功
                if (response.ok) {
                    const data = await response.json(); // 假设返回的是 JSON 格式

                    // 格式化数据
                    const date = data.img_summary; // 假设日期,实际应从数据中获取
                    const aerosol = data.tb_aod; // 假设数据中有气溶胶信息
                    const fireCloud = data.tb_quality; // 假设数据中有火烧云信息

                    results.push(`${date} <br> 气溶胶(AOD): ${aerosol.replace("<br>","")} <br> 火烧云: ${fireCloud.replace("<br>","")}`);
                } else {
                    results.push(`事件: ${event}, 错误: ${response.status}`);
                }
            } catch (error) {
                results.push(`事件: ${event}, 请求失败: ${error.message}`);
            }
        }

        return results;
    }
})();