ImgBB 相册下载器

批量下载ImgBB 相册图片

// ==UserScript==
// @name         ImgBB 相册下载器
// @name:en      ImgBB Album Downloader
// @name:zh-CN   ImgBB 相册下载器
// @namespace    http://tampermonkey.net/
// @version      1.1.2
// @description  批量下载ImgBB 相册图片
// @description:en Batch Downbnloader for ImgBB Album
// @description:zh-CN 批量下载ImgBB 相册图片
// @license      MIT
// @author       You
// @match        https://ibb.co/album/*
// @match        https://*.imgbb.com/*
// @match        https://*.imgbb.com
// @exclude      https://*.imgbb.com/albums*
// @exclude      https://*.imgbb.com/following*
// @icon         data:image/png;base64,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
// @grant        GM_download
// @grant        GM_xmlhttpRequest
// @run-at       document-body
// ==/UserScript==
(function () {
    'use strict';
    /* globals jQuery, $, waitForKeyElements */
    function findAlbumInfo() {
        //Get Album Info
        var albumInfo = { albumName: "", albumURL: "", albumID: "", imgCount: 0 };
        $("meta").each(function (index) {
            if ($(this).attr("property")) {
                switch ($(this).attr("property")) {
                    case ("og:title"):
                        albumInfo.albumName = $(this).attr("content");
                        break;
                    case ("og:url"):
                        albumInfo.albumURL = $(this).attr("content");
                        albumInfo.albumID = albumInfo.albumURL.slice(21, 27);
                        break;
                }
            }
        });
        //Get image Count
        $("span").each(function (index) {
            if ($(this).attr("data-text") == "image-count") {
                albumInfo.imgCount = parseInt($(this).text());
                return;
            }
        });
        //console.log(albumInfo);
        return albumInfo;
    }

    function listImageURLs(albumID) {
        var imgInfos = [];
        $.ajaxSettings.async = false;
        $.ajax({
            url: "https://ibb.co/json",
            data: { "action": "get-album-contents", "albumid": albumID },
            type: "POST",
            dataType: "json",
            timeout: 5000, // 设置超时时间为5秒
            success: function (data) {
                //console.log(data);
                imgInfos = data.contents;
            },
            error: function (jqXHR, textStatus, errorThrown) {
                if (textStatus === 'timeout') {
                    // 超时错误处理
                    console.log('Request timed out.');
                } else {
                    // 其他错误处理
                    console.log('Error: ' + errorThrown);
                }
            }

        });
        $.ajaxSettings.async = true;
        //console.log(imgInfos);
        return imgInfos;
    }

    function appendDownloadEle(albumInfo) {
        if ($("#img_downloader").length <= 0) {
            // 下载按钮
            let btnTab;
            // Get location of the Tab
            $("#tab-sub-link").each(function (index) { btnTab = $(this); });
            //Create the Download Tab
            var tabtxt = `<li id="img_downloader" class="phone-hide phablet-hide pop-btn">
                            <span class="top-btn-text">
                                <span id ="download_button" class="btn-text phone-hide phablet-hide"
                                    style="background-color: rgb(223, 110, 110); color: rgb(255, 255, 255);  border-radius: 10px; padding-left: 10px; padding-right: 10px; margin-bottom: 2px;"><img
                                        width="24" height="22" class="iconcenter" style="vertical-align: middle;"
                                       src="data:image/png;base64,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"></img>
                                    点击下载<span class="arrow-down"></span></span></span>
                            <div id="img_downloader_dropdown" class="pop-box arrow-box arrow-box-top anchor-left" style="display: none;">
                                <div class="pop-box-inner pop-box-menu">
                                    <ul>
                                        <li><a id="img_downloader_origin"> 原图下载</a></li>
                                        <li><a id="img_downloader_medium"> 标清图下载</a></li>
                                        <li><a id="img_downloader_thumb"> 缩略图下载</a></li>
                                        <li><a id="img_downloader_CB"> 复制到剪切板</a></li>
                                    </ul>
                                </div>
                            </div>
                        </li>`;
            btnTab.parent().parent().after(tabtxt);
            $("#img_downloader_origin").on("click", async function (event) {
                await album_download(albumInfo.imgInfos, albumInfo.albumName, "原图");
            });
            $("#img_downloader_medium").on("click", async function (event) {
                await album_download(albumInfo.imgInfos, albumInfo.albumName, "标清图");
            });
            $("#img_downloader_thumb").on("click", async function (event) {
                await album_download(albumInfo.imgInfos, albumInfo.albumName, "缩略图");
            });
            $("#img_downloader_CB").on("click", function (event) {
                $("#img_downloader").css("pointer-events", "none")
                event.preventDefault();
                let imgInfos = albumInfo.imgInfos;
                var copystring = "";
                for (let i = 0; i < imgInfos.length; i++) {
                    var name = "ImgBB/" + albumInfo.albumName + "/" + imgInfos[i].filename;
                    var url = imgInfos[i].url;
                    copystring = copystring + url + "\n";
                }
                //console.log(copystring);
                copyText(copystring);
                console.log("Links copied!-By Yingest");
            });
        }
    }

    async function album_download(imgInfos, albumName, type) {
        event.preventDefault();
        $("#img_downloader").css("pointer-events", "none")
        let downloading = `<span id ="download_button" class="btn-text phone-hide phablet-hide"
                                    style="background-color: rgb(223, 110, 110); color: rgb(255, 255, 255);  border-radius: 10px; padding-left: 10px; padding-right: 10px; margin-bottom: 2px;"><img
                                        width="24" height="22" class="iconcenter" style="vertical-align: middle;"
                                       src="data:image/png;base64,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"></img>
                                    下载中...<span id="downloaded"></span><meter id="downloadedbar" min="0" max="100" value="0"></meter></span>`
        let downloaded = `<span id ="download_button" class="btn-text phone-hide phablet-hide"
                                    style="background-color: rgb(223, 110, 110); color: rgb(255, 255, 255);  border-radius: 10px; padding-left: 10px; padding-right: 10px; margin-bottom: 2px;"><img
                                        width="24" height="22" class="iconcenter" style="vertical-align: middle;"
                                       src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF00lEQVRoge2YXYhkxRXH/6eqbt2Pme6e2flwFV/yIErAQJDVhSwJyj4kL3kKJtENBJ8UQciDwSUJog8rGhISAvElYUkIgQRCyEteDEuEGI1CYnyKREQf1tWe7pntj/tVt6qOD9Mj3bNOT9+ewWZh/tDQVd11zvndqrrnVBEz42aWWHQAR9UJwKJ1ArBonQAsWicAi5Yab5w+fQuIaNQiOOsAAkIdorIVBAkIInhmMABnLcqyPFua8rvW2i865+4iokwp9aZSwZUoii5HUdTx3iPPMjAzlFIQJGCdBQiQUkEQQUgBIQQAhjF29F8JIQSIBLz3AAAhBK5d++CTmGm8lDgMQJKEIAIpiTzPbtvZ2fmTc+7stCe0tLT0dLPZfDbPclRVBR1oCHF8ALWWkPMOQknkWXau0+lcPSx4AEjT9JlOp/uSlBKBDgAiHGf1NTMAEUEqibzI7+x0Oy/XcVJV5nyWZ39otVrQOgDAAB06bCbNBMAApJSQUqHX6/1q1nHjyvP8wV6v9zAzgz0nAGjXptydlTmnRU39dfSUvHMQUiBNh18zxpybzxXQ6/VeJNALDG4QUUdK+XoURb9O4uQlIQQ8M6jmzEwHGMkzA56R5/k35gl8T8zcYHBj77v3/nNVVX0zy7I3Tp1a+3qo9YeVrWrZnLoUiAjee5RliaIoYIy59wjxHyjn3Jmtrfb7RVncHQQBuMY2P3QtM/Po48HMG0eKdLr09vb237znplbB2Ot8ug4GYAZA0FpDaw3n3EPe+1tmjYaIbBiGP47C6BIRFbOM8d5vbrXbf02z9H4AwV7Sm7bDD9wDUirAe/T7vSfyPHuOGcmswQNAq9V6IgyjF4mAsiz/v7Ozc3mWcZWtvlQNqytEwzyJl37YWmn9VJCEM+ZTZ2UfAI8yYADnfNLpbP3dWnumTuB7ctb9M3cZKmsBQq28AQDMiNMs/Ulpyoc2Nja/rJTKnHM3/G/fEpKQMoD3LLa22m/MGzwAGGN8VVWoTIWyKM28dqy197TbH/2bQCoIbtwbEwBKqb1k9Rvn3OfndQrs1ixCCCgpoYQ8iik45+7cub79WyKaDsBgpGl6LsuyC0fyOGETx1L75Hn+7TRNv7K/fwLAVtVqnmWPHoO/MR0XApDn2WPWVuvjfRMAZVHeX5ry/LF4G8kzwzMfy8HJGHPeGPPAeN+E4bzIv1DnXf9Zy3u/lmXZ3eN9EwDGVLd/tiHVlzHVbePtCYAgUNfmNZwkyfPLy8vx0tLS46MaKmZmOOfgnIsAYHl5+XvNZiuK4+TSvH6CQH003p4AiKLof0TUq280+Fez0XyKQEWz2frl+vrGd0BQQgjEcYwwDJPVldVvNZYbPyOicqXV+kEQBK/U9UNEwyiK3h7vm8jEoQ5fKYPyVWPMV+sYZmYhpEAURXDOIUmS31lbwXmHUEdQSr2llPxvURSIohAkBJhROzkEgX4tCqMJ8IkZ0KF+L0mSmWqWcVlrz/T7gx81Gk0kSQxnLYQQkCRhbQXvPTvnoIIAURRjOBxctLY69Dy9X3EcX1ZB8M6BAFIqNBrNP4Y6/Edd48Ph4Nlut3ORQLDWQkoJEgRm/uRmQUmFbrf7/X6/X3sPaK1fTZLk9/tzymQisxWYGSurqxcAzFQCj6vX711qt9tPjV/VMO+WFUEQ4Pr1nSeHw8Hzde0CMCsrKxfE7tI7GMB7D2MMlFLvr62t3wcgrespzdLnBoPBRTU6lAghoJTC9vb2k4PB4IU5gs83NzbPJvHSu+x5ei0E7B4jrbXQWr+1ubl5q9bhn+t6zPLsUr/f+wWRgBQC3W735/1+r3bwWuu/rK+t3xpF8X+8Z5AQN9zG7LuZO429qwjv/e6VB4Aiz+8oyuIRa+1Z59wdzHwKgD3ArwcQAQiVUlfAgHX2AQAGQI6DT4EBEXWllO8opV4Lw/ByHCdve+8hhYBSGt47MHtc/eDqpwPcjLrpb6dPABatE4BF6wRg0ToBWLQ+BnnCtp5Nn1j6AAAAAElFTkSuQmCC"></img>
                                    下载完成<span class="arrow-down"></span></span>`
        $("#download_button").replaceWith(downloading)
        let total = imgInfos.length.toString();
        $("#downloaded").text("0/" + total + " : ")
        $("#downloadedbar").attr("max", total)
        let delay = sleep(100);
        let url = ""
        let name = ""
        console.log(type + " download Start...-By Yingest");
        for (let i = 0; i < imgInfos.length; i++) {
            name = "ImgBB/" + albumName + "/" + type + "/" + imgInfos[i].filename;
            if (type == "原图") {
                url = imgInfos[i].url;
                name = "ImgBB/" + albumName + "/" + imgInfos[i].filename;}
            else if (type == "标清图") { url = imgInfos[i].medium.url;}
            else if (type == "缩略图") { url = imgInfos[i].thumb.url;}
            await download(imgInfos[i].url, name);
            $("#downloaded").text((i + 1).toString() + "/" + total + " : ")
            $("#downloadedbar").attr("value", (i + 1).toString())
            await delay;
        }
        console.log(type + " download Finished.-By Yingest");
        $("#download_button").replaceWith(downloaded)
        $("#img_downloader").css("pointer-events", "auto")
    }

    function download(url, name) {
        return new Promise((resolve, reject) => {
            GM_download({
                url,
                name,
                saveAs: false,
                onerror: reject,
                onload: resolve
            });
            console.log("'" + name + "' downloaded");
        });
    }


    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }


    async function copyText(copystring) {
        try {
            await navigator.clipboard.writeText(copystring);
            console.log('文本已复制到剪贴板');
        } catch (err) {
            console.error('复制失败: ', err);
        }
    }
// Script for not album page
    function findImgEle() {
        setInterval(function () {
            let imgJQList = $("div");
            if (imgJQList.length > 0) {
                imgJQList.each(async function (index) {
                    if ($(this).attr("data-type")=="image") {
                        appendLink2Album($(this));
                        await sleep(100)
                    }
                });
            }
        }, 3000);
    }
    function appendLink2Album(imgJQ) {
        let linkIdAttrName = imgJQ.attr("data-id") + "_albumlink";
        if ($("#" + linkIdAttrName).length <= 0) {
            // 打开详细页获取整个网页
            var p = GM_xmlhttpRequest({
                method: "GET",
                url: "https://ibb.co/" + imgJQ.attr("data-id"),
                responseType:"text",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
                },
                onload: function (response) {
                    //console.log("请求成功");
                    //console.log(response.responseText);
                    let matchs = response.responseText.match("https://ibb\\.co/album/[a-zA-Z0-9]+");
                    //提取链接
                    let url = matchs[0];
                    //形成按钮,借用相册图标
                    let btn=`<div class="btn-icon icon-images" title="点击打开相册" id = "`+ linkIdAttrName + `"></div>`
                    //获取每个图片左上角勾选框位置
                    let target = childernRef(imgJQ,[0,1,0])
                    //在其后添加按钮,会在其右边形成图标
                    target.after(btn);
                    //添加链接事件
                    $("#" + linkIdAttrName).on("click", async function (event) {
                        event.preventDefault();
                        window.open(url, "_blank");
                    });
                    //console.log(imgJQ.attr("data-id")+" Created");
                },
                onerror: function (response) {
                    console.log("请求失败");
                },
                ontimeout: function (response) {
                    console.info("查询信息超时。");
                }
            });
        }
    }

    function childernRef(father,Orders){
        // Tools for get childern elements
        var len=Orders.length;
        var ret
        if(len==0){
             ret=father
        }
        else if(len>=1){
            var childern=father.contents();
            childern.each(function (index) {
                if(index==Orders[0]){
                    ret= childernRef($(this),Orders.slice(1,len));}
            });
        }
        return ret;
    }

    $(document).ready(function () {
        // 查找相册名称位置,向左上角添加【下载】按钮.
        let albumInfo = findAlbumInfo();
        console.log(albumInfo);
        if (albumInfo.imgCount>0){
            //如果是相册,则直接可以通过链接查找Json 获取所有图片信息
            albumInfo.imgInfos = listImageURLs(albumInfo.albumID);
            //console.log(albumInfo);
            if (albumInfo.imgInfos.length == albumInfo.imgCount) { appendDownloadEle(albumInfo); }}
        //如果不是,则是个人空间,则每种图片显示去相册的直达链接
        else {
            findImgEle()
        }
    });
    /** useless function
    function childernEle(father,Orders,attr){
        // Tools for get childern elements
        var len=Orders.length;
        var info=new Array;;
        if(len==0){
            info.push(father.val());
            info.push(father.text());
            for(var i = 0;i < attr.length;i++){info.push(father.attr(attr[i]));}
        }
        else if(len>=1){
            var childern=father.contents();
            childern.each(function (index) {
                if(index==Orders[0]){info = childernEle($(this),Orders.slice(1,len),attr);}
            });
        }
        return info
    }

    function listImageURLs_old() {
        var info0,info1,info2;
        var imgInfos=new Array();
        let imgJQList = $("div");
        if(imgJQList.length > 0 ){
            imgJQList.each(function (index) {
                if($(this).attr("data-type")=="image"){
                    var imgInfo={
                        imgName:"",
                        imgID:"",
                        imgURL_Origin:"",
                        imgURL_View:"",
                        imgURL_Small:""
                    };
                    info0=childernEle($(this),[],["data-id"]);
                    //info1=childernEle($(this),[0,0],["href"]);
                    info2=childernEle($(this),[0,0,0],["src","alt"]);
                    imgInfo.imgName=info2[3];
                    imgInfo.imgID=info0[2];
                    imgInfo.imgURL_View=info2[2];
                    //console.log(imgInfo);
                    imgInfos.push(imgInfo);
                }
            });
        }
        return imgInfos
    }
    function getImageURL_old(viewerLink,type) {
        console.info(viewerLink);
        var p = GM_xmlhttpRequest({
                method: "GET",
                url: viewerLink,
                responseType:type,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
                },
                onload: function (response) {
                    console.log("请求成功");
                    console.log(response.responseText);
                },
                onerror: function (response) {
                    console.log("请求失败");
                },
                ontimeout: function (response) {
                    console.info("查询信息超时。");
                }
            });
        console.info(p)
        return p
    }

    function listImageURLs_old() {
        var info0,info1,info2;
        var imgInfos=new Array();
        let imgJQList = $("div");
        if(imgJQList.length > 0 ){
            imgJQList.each(function (index) {
                if($(this).attr("data-type")=="image"){
                    var imgInfo={
                        imgName:"",
                        imgID:"",
                        imgURL_Origin:"",
                        imgURL_View:"",
                        imgURL_Small:""
                    };
                    info0=childernEle($(this),[],["data-id"]);
                    //info1=childernEle($(this),[0,0],["href"]);
                    info2=childernEle($(this),[0,0,0],["src","alt"]);
                    imgInfo.imgName=info2[3];
                    imgInfo.imgID=info0[2];
                    imgInfo.imgURL_View=info2[2];
                    //console.log(imgInfo);
                    imgInfos.push(imgInfo);
                }
            });
        }
        return imgInfos
    }
    function getImageURL_old(viewerLink,type) {
        console.info(viewerLink);
        var p = GM_xmlhttpRequest({
                method: "GET",
                url: viewerLink,
                responseType:type,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
                },
                onload: function (response) {
                    console.log("请求成功");
                    console.log(response.responseText);
                },
                onerror: function (response) {
                    console.log("请求失败");
                },
                ontimeout: function (response) {
                    console.info("查询信息超时。");
                }
            });
        console.info(p)
        return p
    }

    **/
})();