您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
请确保你的网路环境可以正常访问 Pixiv,如果设备网路无法访问,此脚本将无法正常运作。在 Pixiv 页面启动脚本,此脚本会自动将页面中所有图片转换成大图(包含链接、名称),添加至 Eagle App。
- // ==UserScript==
- // @name Save Pixiv images to Eagle (modified by GreasyWeebs)
- // @name:zh 批量导入 Pixiv 图片到 Eagle
- // @name:zh-CN 批量导入 Pixiv 图片到 Eagle
- // @name:zh-TW 批次導入 Pixiv 圖片到 Eagle
- // @description Launch a script on Pixiv that automatically converts all images on the page into large images (with links, names) to be added to the Eagle App. manual: go to the artist page and then press alt+L
- // @description:zh 请确保你的网路环境可以正常访问 Pixiv,如果设备网路无法访问,此脚本将无法正常运作。在 Pixiv 页面启动脚本,此脚本会自动将页面中所有图片转换成大图(包含链接、名称),添加至 Eagle App。
- // @description:zh-CN 请确保你的网路环境可以正常访问 Pixiv,如果设备网路无法访问,此脚本将无法正常运作。在 Pixiv 页面启动脚本,此脚本会自动将页面中所有图片转换成大图(包含链接、名称),添加至 Eagle App。
- // @description:zh-TW 在 Pixiv 畫版頁面啓動腳本,此腳本會自動將頁面中所有圖片轉換成大圖(包含鏈接、名稱),添加至 Eagle App。
- // @author base code by pickuse2013 & modified by GreasyWeebs
- // @namespace https://pickuse2013.github.io/
- // @homepageURL https://github.com/pickuse2013/pixiv-to-eagle
- // @supportURL https://github.com/pickuse2013/pixiv-to-eagle
- // @icon https://www.pixiv.net/favicon.ico
- // @license MIT License
- // @match https://www.pixiv.net/*
- // @grant GM_xmlhttpRequest
- // @grant GM_addStyle
- // @run-at document-start
- // @require https://code.jquery.com/jquery-3.5.1.min.js
- // @require https://greasyfork.org/scripts/2199-waitforkeyelements/code/waitForKeyElements.js?version=6349
- // @date 08/28/2020
- // @modified 09/12/2021
- // @version 1.2.4
- // ==/UserScript==
- 'use strict';
- (function () {
- console.log("plugin loaded..");
- // Eagle API 服务器位置
- var image = [];
- var requestsPending = 0;
- const EAGLE_SERVER_URL = "http://localhost:41595";
- const EAGLE_IMPORT_API_URL = `${EAGLE_SERVER_URL}/api/item/addFromURL`;
- const EAGLE_CREATE_FOLDER_API_URL = `${EAGLE_SERVER_URL}/api/folder/create`;
- // Pixiv 当前图片、链接命名规则
- const SELECTOR_IMAGE = "section ul li a img[class]";
- const SELECTOR_DIALOG = "div#save-to-eagle-dialog div#queue";
- const PENDING_DIALOG = "div#save-to-eagle-dialog div#download";
- // 是否要使用Pixiv的tags
- const SUPPORT_TAGS = false;
- let DOWNLOAD_COUNTER = 0;
- let TOTAL_COUNTER = 0;
- let FINISH = false;
- // 创建文件夹
- var createFolder = function (folderName, callback) {
- GM_xmlhttpRequest({
- url: EAGLE_CREATE_FOLDER_API_URL,
- method: "POST",
- data: JSON.stringify({
- folderName: folderName
- }),
- onload: function (response) {
- try {
- var result = JSON.parse(response.response);
- if (result.status === "success" && result.data && result.data.id) {
- callback(undefined, result.data);
- } else {
- callback(true);
- }
- } catch (err) {
- callback(true);
- }
- }
- });
- };
- function addImageToEagle(data) {
- GM_xmlhttpRequest({
- url: EAGLE_IMPORT_API_URL,
- method: "POST",
- data: JSON.stringify(data),
- onload: function (response) {
- ajaxFinished();
- }
- });
- }
- function updateDialog()
- {
- $(SELECTOR_DIALOG).html(`Total File: ${DOWNLOAD_COUNTER} files.`);
- if(FINISH == true)
- {
- $(SELECTOR_DIALOG).html(`${DOWNLOAD_COUNTER} Files Queued!`);
- }
- }
- function ajaxStarted() {
- requestsPending++;
- $(PENDING_DIALOG).html(`Download Progress: ${requestsPending}`);
- }
- function ajaxFinished() {
- requestsPending--;
- $(PENDING_DIALOG).html(`Download Progress: ${requestsPending}`);
- if(requestsPending == 0 && FINISH == true){
- $(PENDING_DIALOG).html(`Download Completed!`);
- setTimeout(function(){
- $(SELECTOR_DIALOG).remove();
- $(PENDING_DIALOG).remove();
- }, 1000);
- }
- }
- function getImages(folder) {
- DOWNLOAD_COUNTER = 0;
- TOTAL_COUNTER = 0;
- $(SELECTOR_IMAGE).each(function (i, e) {
- let index = i;
- let IMAGE_LINK_URL = $(e).closest('a')[0].href;
- let IMAGE_AMOUNT = 1;
- let IMAGE_AMOUNT_P = $(e).closest("a").find("div:first span")['prevObject'][0].innerText.split('R-18\n');
- if(IMAGE_AMOUNT_P.length == 2){
- IMAGE_AMOUNT = IMAGE_AMOUNT_P[1] * 1;
- }else if(IMAGE_AMOUNT_P.length == 1){
- if(IMAGE_AMOUNT_P[0] == "R-18"){
- IMAGE_AMOUNT = 1;
- }else if(IMAGE_AMOUNT_P[0] == ""){
- IMAGE_AMOUNT = 1;
- }else{
- var r18g_filter = IMAGE_AMOUNT_P[0].split('R-18G\n');
- if(r18g_filter.length == 2){
- IMAGE_AMOUNT = r18g_filter[1] * 1;
- }else if(r18g_filter.length == 1){
- if(r18g_filter[0] == "R-18G"){
- IMAGE_AMOUNT = 1;
- }else if(r18g_filter[0] == ""){
- IMAGE_AMOUNT = 1;
- }else{
- IMAGE_AMOUNT = IMAGE_AMOUNT_P[0] * 1;
- }
- }
- }
- }
- TOTAL_COUNTER += IMAGE_AMOUNT;
- updateDialog();
- $.get(IMAGE_LINK_URL, function (html) {
- var parser = new DOMParser();
- var doc = parser.parseFromString(html, "text/html");
- var preloadData = doc.querySelectorAll('meta#meta-preload-data')[0];
- let content = JSON.parse(preloadData.content);
- let IMAGE_ID = Object.keys(content.illust)[0];
- let IMAGE_URL = content.illust[IMAGE_ID].urls.original;
- let IMAGE_TYPE = content.illust[IMAGE_ID].urls.original.split(".").pop();
- let IMAGE_TITLE = content.illust[IMAGE_ID].title
- let IMAGE_DESCRIPTION = content.illust[IMAGE_ID].alt;
- let IMAGE_WEBSITE = content.illust[IMAGE_ID].extraData.meta.canonical;
- let IMAGE_TAGS = Object.values(content.illust[IMAGE_ID].tags.tags).map(item => item.tag);
- for (let i = 0; i <= (IMAGE_AMOUNT - 1); i++) {
- ajaxStarted();
- let DOWNLOAD_IMAGE_URL = IMAGE_URL.replace("p0", "p" + i);
- console.log("prepare download: ", DOWNLOAD_IMAGE_URL)
- let image = {
- "url": DOWNLOAD_IMAGE_URL,
- "name": IMAGE_TITLE,
- "website": IMAGE_WEBSITE,
- "annotation": IMAGE_DESCRIPTION,
- "folderId": folder.id,
- "headers": {
- "referer": IMAGE_WEBSITE
- }
- };
- if(SUPPORT_TAGS)
- {
- image.tags = IMAGE_TAGS;
- }
- DOWNLOAD_COUNTER++;
- addImageToEagle(image);
- console.log(index, $(SELECTOR_IMAGE).length - 1);
- updateDialog();
- }
- if(index == $(SELECTOR_IMAGE).length - 1){
- FINISH = true;
- }
- updateDialog();
- });
- });
- }
- var loaderTimerCounter = 0;
- var folderName;
- var folderData, folderLoader;
- console.log("Pixiv to Eagle")
- document.addEventListener('keydown', keydown);
- function keydown(e) {
- if (e.altKey && e.key === 'l') { // ALT+L
- e.preventDefault(); // prevent default action of key
- console.log("download initiated.");
- $("body").append(`<div id="save-to-eagle-dialog" style=" display: block; position: fixed; width: 400px; height: 100px;margin-top:25px;margin-left:25px; text-align: left;font-size:1.5em;"><div id="queue">prepare to start ...</div></br><div id="download">Download Progress: `+requestsPending+`</div></div>`);
- if (location.href.indexOf("pixiv.") === -1) {
- alert("This script only works on pixiv.net.");
- return;
- }
- DOWNLOAD_COUNTER = 0;
- TOTAL_COUNTER = 0;
- FINISH = false;
- if(folderData==null){
- initFolder();
- }else{
- getImages(folderData);
- }
- }
- }
- function initFolder(){
- folderName = document.querySelector("h1") && document.querySelector("h1").innerText || "Pixiv";
- createFolder(folderName, function (err, folder) {
- if (folder) {
- folderData = folder;
- getImages(folderData);
- } else {
- alert("软件尚未打开,或当前软件版本不支持,需至 Eagle 官网下载,手动重新安装最新版本");
- }
- });
- }
- })();