在国家中小学智慧教育##网站中添加电子课本下载按钮,免登录下载电子课本
// ==UserScript==// @name 国家中小学智慧教育##电子课本下载// @namespace https://github.com/amakerlife// @version 1.4.1// @description 在国家中小学智慧教育##网站中添加电子课本下载按钮,免登录下载电子课本// @author Makerlife// @match https://*.smartedu.cn/tchMaterial/detail*// @match https://*.smartedu.cn/elecedu/detail*// @match https://www.zxx.edu.cn/tchMaterial/detail*// @icon https://basic.smartedu.cn/favicon.ico// @license MIT// @grant GM_download// @compatible Chrome// @compatible Firefox// @compatible Edge// @compatible Safari// @require https://greasyfork.org/scripts/425166-elegant-alert-%E5%BA%93/code/elegant%20alert()%E5%BA%93.js?version=922763// @require https://lib.baomitu.com/sweetalert2/11.7.22/sweetalert2.all.min.js// ==/UserScript==(function() {'use strict';var checkUrls = async function(urls, id, fileName) {for (let url of urls) {url = url.replace('ndr-private', 'ndr'); // 替换 "ndr-private" 为 "ndr"try {let response = await fetch(url, { method: 'HEAD' });if (response.status === 200) {localStorage.setItem(`validUrl_${id}`, url);Swal.fire({title: '下载选项',text: "请选择下载方式",icon: 'question',showCancelButton: true,confirmButtonText: '直接下载',cancelButtonText: '在新标签页中打开'}).then((r###lt) => {if (r###lt.isConfirmed) {GM_download({url: url,name: `${fileName}.pdf`,});} else if (r###lt.dismiss === Swal.DismissReason.cancel) {window.open(url, '_blank');}});return;}} catch (error) {console.error(`Failed to fetch ${url}:`, error);}}alert('All URLs are invalid!');};var main = async function() {var url = window.location.href;var regex = /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/g;var match = regex.exec(url);if (match) {var id = match[0];console.log(`ContentID: ${id}`);var fileNameElement = document.querySelector("span.fish-breadcrumb-link");var fileName = fileNameElement ? fileNameElement.innerText : "电子课本";var savedUrl = localStorage.getItem(`validUrl_${id}`);if (savedUrl) {console.log(`Using saved URL: ${savedUrl}`);Swal.fire({title: '下载选项',text: "请选择下载方式",icon: 'question',showCancelButton: true,confirmButtonText: '直接下载',cancelButtonText: '在新标签页中打开'}).then((r###lt) => {if (r###lt.isConfirmed) {GM_download({url: savedUrl,name: `${fileName}.pdf`,});} else if (r###lt.dismiss === Swal.DismissReason.cancel) {window.open(savedUrl, '_blank');}});return;}// 遍历 x=1 到 x=3 的三个链接for (let x = 1; x <= 3; x++) {let jsonUrl = `https://s-file-${x}.ykt.cbern.com.cn/zxx/ndrv2/resources/tch_material/details/${id}.json`;try {let response = await fetch(jsonUrl);if (response.ok) {let data = await response.json();let tiItems = data.ti_items || [];for (let item of tiItems) {if (item.ti_file_flag === "source") {let urls = item.ti_storages || [];checkUrls(urls, id, fileName);return;}}}} catch (error) {console.error(`Failed to fetch ${jsonUrl}:`, error);}}} else {console.log("No ContentID Found!");}};let init = setInterval(function() {let fileNameElement = document.querySelector("span.fish-breadcrumb-link");if (fileNameElement) {clearInterval(init);new ElegantAlertBox("正在解析,即将开始下载");main();}}, 1000);})();