/* jshint esversion: 9 */ // ==UserScript== // @name Fantia downloader // @namespace http://tampermonkey.net/ // @version 1.2 // @description Download your Fantia rewards more easily! // @author suzumiyahifumi // @match https://fantia.jp/posts/* // @icon https://www.google.com/s2/favicons?domain=fantia.jp // @require https://code.jquery.com/jquery-3.4.1.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js // @grant none // @downloadURL none // ==/UserScript== (function () { 'use strict'; $('head').append(``); $('nav.scroll-tabs>div').append(`擷取下載`); window.getDownLoadButton = () => { $('div.btn-group-tabs').each((i, div) => { $(div).append(``); $('#set').remove(); }); }; var init = setInterval(() => { if ($('nav.post-next-prev-buttons').length != 0) { if ($('div.btn-group-tabs').length != 0) { window.getDownLoadButton(); clearInterval(init); } else { $('#set').remove(); clearInterval(init); } } }, 500); window.getImg = (event) => { let srcArr = []; let dataCont = 0; var downloadB = ($(event.target).is("button")) ? $(event.target) : $(event.target).closest("button"); downloadB.addClass(['active', 'hdr']); downloadB.find('i').removeClass('fa-download').addClass('fa-download2'); downloadB.find('span').text(`擷取連結中`); $($(event.target).closest('div.content-block').find('div.image-thumbnails')[0]).find('img').each((i, img) => { let src = $(img).attr('src'); let id = /file\/\d+\//g.exec(src); if (id[0] != null) { srcArr.push(`https://fantia.jp/posts/SRC/post_content_photo/SRC`.replaceAll(`SRC`, /\d+/.exec(id)[0])); } }); downloadB.find('span').text(`${dataCont} / ${srcArr.length}`); var zip = new JSZip(); srcArr.digits = window.getDigits(Number(srcArr.length)); srcArr.forEach((url, i) => { $.get(url, function (data) { let div = document.createElement("div"); $(div).html(data); $(div).find('img').attr("id", `${i}_img`); let imgSRC = $(div).find('img').attr("src"); $(div).remove(); loadAsArrayBuffer(imgSRC, function (imgData) { dataCont += 1; downloadB.find('span').text(`${dataCont} / ${srcArr.length}`); zip.file(`${i.toString().padStart(srcArr.digits, 0)}.jpg`, imgData); if (dataCont == srcArr.length) { downloadB.find('span').text(`壓縮檔案中`); zip.generateAsync({ type: "blob" }).then(function (content) { downloadB.find('i').removeClass('fa-download2').addClass('fa-download'); downloadB.removeClass(['active', 'hdr']); downloadB.find('span').text(`下載已完成`); let tag = document.createElement('a'); tag.href = (URL || webkitURL).createObjectURL(content); tag.download = `${$("h1.post-title").text()}_${downloadB.closest("div.post-content-inner").find('h2').text()}`; document.body.appendChild(tag); tag.click(); document.body.removeChild(tag); }); } }); }); }); return; }; window.getDigits = (i) => { let L = 0; while (i >= 1) { i = i / 10; L += 1; } return `${L}`; }; window.loadAsArrayBuffer = (url, callback) => { let xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.responseType = "arraybuffer"; xhr.onerror = function (error) { console.log(`error`) }; xhr.onload = function () { if (xhr.status === 200) { callback(xhr.response, url) } else { console.log(`error`) } }; xhr.send(); }; })();