Save images from Danbooru to Eagle.
// ==UserScript==// @name Save Danbooru Images to Eagle// @name:zh 导入 Danbooru 图片到 Eagle// @name:zh-CN 导入 Danbooru 图片到 Eagle// @description Save images from Danbooru to Eagle.// @description:zh 在danbooru网页上添加下载按钮直接导入Eagle,默认同时保存所有标签,若属于pool则会以pool名创建文件夹// @description:zh-CN 在danbooru网页上添加下载按钮直接导入Eagle,默认同时保存所有标签,若属于pool则会以pool名创建文件夹// @author miracleXL// @namespace https://github.com/miracleXL// @homepageURL https://github.com/miracleXL/scripts-for-Eagle// @icon https://danbooru.donmai.us/favicon.ico// @match danbooru.donmai.us/posts/*// @match safebooru.donmai.us/posts/*// @match danbooru.donmai.us/pools/*// @match safebooru.domai.us/pools/*// @connect danbooru.donmai.us// @connect safebooru.donmai.us// @connect localhost// @grant GM_xmlhttpRequest// @version 0.1.3// ==/UserScript==(function() {'use strict';// Eagle API 服务器位置const EAGLE_SERVER_URL = "http://localhost:41595";const EAGLE_IMPORT_API_URL = `${EAGLE_SERVER_URL}/api/item/addFromURL`;const EAGLE_IMPORT_API_URLS = `${EAGLE_SERVER_URL}/api/item/addFromURLs`;const EAGLE_CREATE_FOLDER_API_URL = `${EAGLE_SERVER_URL}/api/folder/create`;const EAGLE_GET_FOLDERS_API_URL = `${EAGLE_SERVER_URL}/api/folder/list`;// 是否保存标签(true/false)const saveTags = true;let mode = document.URL.split("/")[3];function addButton(){let button = document.createElement("button");button.className = "ui-button ui-widget ui-corner-all";if(mode === "posts"){button.innerText = "下载";let buttons_div = document.getElementsByClassName("fav-buttons")[0];buttons_div.firstElementChild.style.display = "inline";buttons_div.appendChild(button);//绑定下载事件button.addEventListener("click",async ()=>{let [data,pool] = getImageData();if(pool){let folderId = await getFolderId(pool);if(folderId){data.folderId = folderId;}}// console.log(data);download(data);})}else{button.innerText = "下载当前页全部";let buttonPos = document.getElementById("description");buttonPos.appendChild(button);//绑定下载事件button.addEventListener("click",async ()=>{let [data,pool] = getPoolData();if(pool){let folderId = await getFolderId(pool);if(folderId){data.folderId = folderId;}}// console.log(data);downloadAll(data);})}}addButton();function download(data){GM_xmlhttpRequest({url: EAGLE_IMPORT_API_URL,method: "POST",data: JSON.stringify(data),onload: function(response) {if(response.statusText !== "OK"){console.log(response);alert("下载失败!")}}});}function downloadAll(data){GM_xmlhttpRequest({url: EAGLE_IMPORT_API_URLS,method: "POST",data: JSON.stringify(data),onload: function(response) {if(response.statusText !== "OK"){alert("请检查eagle是否打开!");console.log("下载失败!")}}});}function getImageData(){let name = document.getElementById("original-artist-commentary");if(name){name = name.firstElementChild.textContent;}else{let pool = document.getElementsByClassName("pool-name")[0]if(pool){pool = pool.firstElementChild;var poolname = pool.textContent.replace("Pool: ","");name = pool + " " + pool.title;}else{name = document.title;}}let website = document.getElementById("post-info-source").firstElementChild?.href;let data = {"url": document.getElementById("post-option-view-original").firstElementChild.href,"name": name,"website": website ? website : document.URL,"tags": [],"headers": {"referer" : document.URL}};if(saveTags){for(let tag of document.getElementsByClassName("search-tag")){data.tags.push(tag.textContent);};}return [data,poolname];};function getPoolData(){try{var name = document.getElementsByClassName("pool-category-series")[0].textContent;}catch(e){name = document.title;console.log(e);}let data = {"items":[]};let count = 0;for(let article of document.getElementsByTagName("article")){let item = {"url": article.getAttribute("data-file-url"),"name": name + "_" + count,"website": article.getAttribute("data-normalized-source"),"tags": saveTags ? article.getAttribute("data-tags").split(" ") : [],"headers": {"referer" : document.URL}};data.items.push(item);}return [data,name];}// 获取文件夹idasync function getFolderId(pool){let folders = await getFolders();let dlFolder;if(folders){for(let folder of folders){if(folder.name === pool){dlFolder = folder;}}if(dlFolder === undefined) dlFolder = await creatFolder(pool);}else{console.log("获取文件夹信息失败!");alert("下载失败!");return;}return dlFolder.id;}// 获取文件夹function getFolders(){return new Promise((resolve, reject) => {GM_xmlhttpRequest({url: EAGLE_GET_FOLDERS_API_URL,method: "GET",redirect:'follow',onload: function(response) {if(response.status !== 200){reject();}resolve(JSON.parse(response.response).data);}});})}// 创建文件夹function creatFolder(folderName){return new Promise((resolve, reject) => {GM_xmlhttpRequest({url: EAGLE_CREATE_FOLDER_API_URL,method: "POST",data: JSON.stringify({ folderName: folderName }),onload: function(response) {var r###lt = JSON.parse(response.response);if (r###lt.status === "success" && r###lt.data && r###lt.data.id) {return resolve(r###lt.data);}else{return reject();}}})})}})();