您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Script tries to restore images/videos from removed posts. If post couldn't be restored that means it had been also removed from servers.
// ==UserScript== // @name Restore Removed Posts // @version 0.1 // @namespace liquid5925.scripts // @description Script tries to restore images/videos from removed posts. If post couldn't be restored that means it had been also removed from servers. // @author liquid5925 // @match https://rule34.xxx/index.php?page=post&s=view&id=* // @icon https://www.google.com/s2/favicons?sz=64&domain=rule34.xxx // @grant none // @license MIT // ==/UserScript== (async function() { 'use strict'; const shouldBeExecuted = [...document.getElementsByClassName("status-notice")].filter(e => e.innerText.includes("This post was deleted.")); if(shouldBeExecuted.length == 0) return; const getParams = function() { let e = location.search.substr(1).split("&"); let returnable = {}; e.forEach(function(r) { let ob = r.split("="); returnable[ob[0]] = ob[1]; }); return returnable; } const getParam = function(key) { let params = getParams(); return params[key] || null; } const id = getParam("id"); let resp; try{ resp = await fetch(`https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&id=${id}&json=1&limit=1`).then(async function(r) { return (await r.json())[0] }); }catch{ let text = shouldBeExecuted[0].innerText; shouldBeExecuted[0].innerText = `${text}\n[SCRIPT] No file found.`; } if(!resp) return; let file_url = resp.file_url; let file_ext = file_url.split(".")[file_url.split(".").length-1]; let isVideo = ['webm','mp4'].includes(file_ext.toLowerCase()); let appendable = document.getElementById('fit-to-screen'); let elem = document.createElement(isVideo ? 'video' : 'img'); elem.src = file_url; if(isVideo){ elem.loop = true; elem.controls = true; } appendable.prepend(elem); shouldBeExecuted[0].remove(); })();