// ==UserScript==
// @name ImgBB 相册下载器
// @name:en ImgBB Image Downloader
// @name:zh-CN ImgBB 相册下载器
// @namespace http://tampermonkey.net/
// @version 1.0.2
// @description Downbnload Single Image or album
// @description:zh-cn 批量下载ImgBB 相册图片
// @license MIT
// @author You
// @match https://ibb.co/album/*
// @match https://123.imgbb.com
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_download
// @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,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 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);
}
}
$(document).ready(function () {
// 查找相册名称位置,向左上角添加【下载】按钮.
let albumInfo = findAlbumInfo();
albumInfo.imgInfos = listImageURLs(albumInfo.albumID);
//console.log(albumInfo);
if (albumInfo.imgInfos.length == albumInfo.imgCount) { appendDownloadEle(albumInfo); }
});
/** 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
}
**/
})();