您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
10.4.2021, 17:52:31
// ==UserScript== // @name custom profile page rule34.xxx // @namespace Violentmonkey Scripts // @match https://rule34.xxx/index.php // @grant GM_setValue // @grant GM_getValue // @version 1.1 // @author usnkw // @description 10.4.2021, 17:52:31 // @require https://code.jquery.com/jquery-3.5.1.min.js // ==/UserScript== var threadUrl = "https://rule34.xxx/index.php?page=forum&s=view&id=12998&pid="; var dir = GM_getValue('dir'); $("document").ready(async function() { var li = document.createElement("li"); li.style.cursor = "pointer"; var a = document.createElement("a"); a.innerHTML = "Refresh Database"; a.onclick = updateDb; li.appendChild(a); document.getElementsByClassName("flat-list")[0].appendChild(li); if(window.location.href.includes("profil")){ addView(document.getElementsByTagName("h2")[1].innerText); } }); function addView(userName){ var div = document.createElement("div"); for(var i = 0; i < dir.length; i++){ if(dir[i][0] == userName){ var text = encodeHTML(dir[i][1]); console.log(dir[i][1]); var matches = text.match(/(?<=\[).+?(?=\])/g); if(matches != null){ for(var i = 0; i < matches.length; i++){ var type = matches[i].match(/([a-z]*):(.*)/)[1]; switch(type){ case "img": var elm = "<img src=\"" + encodeHTML(matches[i].match(/([a-z]*):(.*)/)[2]) +"\" style='height:150px'>" text = text.replace("["+matches[i]+"]", elm); break; case "link": var t = encodeHTML(matches[i].match(/([a-z]*):(.*)/)[2]); var elm = "<a href=\"" + t +"\">"+t+"</a>" text = text.replace("["+matches[i]+"]", elm); break; case "br": var elm = "<br>" text = text.replace("["+matches[i]+"]", elm); break; } } } div.innerHTML = text; document.getElementById("content").prepend(div); break; } } } async function updateDb(){ console.log("Fetching!"); var postCount = await getPostCount(); for(var i = 0; i <= postCount; i+=15){ dir = (await fetchPosts(threadUrl + i)); } console.log(dir); GM_setValue('dir', dir); } async function fetchPosts(url){ return new Promise(function(resolve, reject) { var ifream = document.createElement("iframe"); ifream.src = url; ifream.onload = function() { var author = $("iframe").contents().find(".author a[href]"); var links = $("iframe").contents().find(".body").find("a[rel='nofollow']"); for(var i = 0; i < links.length; i++){ links[i].outerText = links[i].href; } var post = $("iframe").contents().find(".body"); var out = []; for(var i = 0; i < author.length; i++){ out.push([author[i].innerHTML, post[i].innerText]); ifream.parentNode.removeChild(ifream); } resolve(out); } document.body.appendChild(ifream); }); } async function getPostCount(){ return new Promise(function(resolve, reject) { var ifream = document.createElement("iframe"); ifream.src = threadUrl; ifream.onload = function() { var elm = $("iframe").contents().find("a[alt='last page']")[0]; if(elm != null){ resolve(parseInt(/pid=([0-9]*)/gm.exec($("iframe").contents().find("a[alt='last page']")[0].href)[1])); } resolve(0); ifream.parentNode.removeChild(ifream); } document.body.appendChild(ifream); }); } function encodeHTML(s) { return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"'); }