您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
由于C大禁止,所以即日起该项目停止!
// ==UserScript== // @name 妖火热门 // @namespace https://yaohuo.me/ // @version 2.0.6 // @description 由于C大禁止,所以即日起该项目停止! // @author id:30235 // @match https://yaohuo.me/ // @icon https://yaohuo.me/css/favicon.ico // @license MIT // ==/UserScript== (function() { let title = document.querySelector('.title'); let rma = document.createElement("a"); let rmspan = document.createElement("span"); rmspan.className = "separate"; rma.innerText = "热门"; rmspan.innerText = " "; rma.style.cursor="pointer"; let roua = document.createElement("a"); let rouspan = document.createElement("span"); rouspan.className = "separate"; roua.innerText = "肉贴"; rouspan.innerText = " "; roua.style.cursor="pointer"; title.append(rouspan); title.append(roua); title.append(rmspan); title.append(rma); let myurl = ''; let listW = document.getElementsByClassName("list")[0].offsetWidth; rma.onclick=function(){ var xhr=new XMLHttpRequest(); xhr.open('get',myurl); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { let resp = xhr.responseText; let res=JSON.parse(resp); let rt=""; for(let key in res["head"]){ if(key!="null") rt+='<a style="color:#a83d65">'+res["head"][key]+'</a><br>'; } if(res.hasOwnProperty("data1")){ rt+='<div style="margin:10px auto; font-size:18px; background-color:rgb(250,247,239)">近24h</div>'; for(let i=0;i<res["data1"].length;i++){ rt+=(i+1)+'.<a href="/bbs-'+res["data1"][i][0]+'.html" target="_blank">'+"【"+res["data1"][i][4]+"热】"+res["data1"][i][3]+'</a><br>'; } } if(res.hasOwnProperty("data2")){ rt+='<div style="margin:10px auto; font-size:18px; background-color:rgb(250,247,239)">近48h</div>'; for(let i=0;i<res["data2"].length;i++){ rt+=(i+1)+'.<a href="/bbs-'+res["data2"][i][0]+'.html" target="_blank">'+"【"+res["data2"][i][4]+"热】"+res["data2"][i][3]+'</a><br>'; } } if(res.hasOwnProperty("data")){ rt+='<div style="margin:10px auto; font-size:18px; background-color:rgb(250,247,239)">近72h</div>'; for(let i=0;i<res["data"].length;i++){ rt+=(i+1)+'.<a href="/bbs-'+res["data"][i][0]+'.html" target="_blank">'+"【"+res["data"][i][4]+"热】"+res["data"][i][3]+'</a><br>'; } } let date = new Date(); let hour = date.getHours(); rt = '<div class="title"><a href="/">首页</a>><a href="/bbs/">论坛</a>>热门 更新于:'+res["updateTime"]+'</div>'+'<div class="list">'+rt+'</div>'; rt+='<div style="margin:10px auto; font-size:18px; background-color:rgb(250,247,239)">近24h全站热度</div>'; rt+=' <canvas id="my_canvas" width="'+listW+'" height="200"></canvas>'; document.body.innerHTML=rt; if(res.hasOwnProperty("hot")){ const minrd = Math.min.apply(Math,res["hot"]); const maxrd = Math.max.apply(Math,res["hot"]); let data = []; for(let i=0;i<res["hot"].length;i++){ data.push({x:i/24*(listW-20),y:(res["hot"][i]-minrd)/(maxrd-minrd)*80}) } console.log(data); let lineChart = new LineChart("my_canvas"); lineChart.init(data); } } } xhr.send(); }; roua.onclick=function(){ var xhr=new XMLHttpRequest(); xhr.open('get',myurl); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { let resp = xhr.responseText; let res=JSON.parse(resp); let rt=""; for(let key in res["head"]){ if(key!="null") rt+='<a style="color:#a83d65">'+res["head"][key]+'</a><br>'; } if(res.hasOwnProperty("rou")){ for(let i=0;i<res["rou"].length;i++){ rt+=(i+1)+'.<img src="/NetImages/li.gif" alt="礼"><a href="/bbs-'+res["rou"][i][0]+'.html" target="_blank">'+res["rou"][i][1]+'</a><br>'; } } rt = '<div class="title"><a href="/">首页</a>><a href="/bbs/">论坛</a>>肉贴 更新于:'+res["updateTime"]+'</div>'+'<div class="list">'+rt+'</div>'; document.body.innerHTML=rt; } } xhr.send(); }; var LineChart = function(canvas){ // 获取canvas this.canvas = document.querySelector("canvas"); // 获取上下文 this.ctx = this.canvas.getContext("2d"); // 获取画布的高 this.canvasHeight = this.ctx.canvas.height; // 获取画布的宽 this.canvasWidth = this.ctx.canvas.width; // 设置网格格子的大小 this.gridSize = 10; // 设置坐标系边距 this.space = 20; // 设置箭头的长 this.arrowSize = 10; // 设置点的大小 this.dottedSize = 6; } LineChart.prototype.init = function(data){ this.drawGrid(this.ctx, this.canvasHeight, this.canvasWidth, this.gridSize); this.drawCoord(this.ctx, this.space, this.arrowSize, this.canvasHeight, this.canvasWidth); this.drawDotted(data, this.ctx, this.canvasHeight, this.space, this.dottedSize); } // 绘制网格 LineChart.prototype.drawGrid = function(ctx,canvasHeight, canvasWidth, gridSize){ var xLineTotal = Math.floor(canvasHeight / gridSize); var yLineTotal = Math.floor(canvasWidth / gridSize); // 绘制横线 for(var i = 0; i < xLineTotal; i++){ ctx.beginPath(); ctx.moveTo(0, i * gridSize - .5); ctx.lineTo(canvasWidth, i * gridSize - .5); ctx.strokeStyle = "#ddd"; ctx.stroke(); } // 绘制竖线 for(let i = 0; i < yLineTotal; i++){ ctx.beginPath(); ctx.moveTo(i * gridSize - .5, 0 ); ctx.lineTo(i * gridSize - .5, canvasHeight); ctx.strokeStyle = "#ddd"; ctx.stroke(); } } //绘制坐标系 LineChart.prototype.drawCoord = function(ctx, space, arrowSize, canvasHeight, canvasWidth){ var x0 = space; var y0 = canvasHeight - space; // 绘制X轴 ctx.beginPath(); ctx.moveTo(x0, y0); ctx.lineTo(canvasWidth - space, y0); ctx.strokeStyle = "#000"; ctx.stroke(); ctx.lineTo(canvasWidth - space - arrowSize, y0 + arrowSize / 2); ctx.lineTo(canvasWidth - space - arrowSize, y0 - arrowSize / 2); ctx.lineTo(canvasWidth - space, y0); ctx.fill(); // 绘制Y轴 ctx.beginPath(); ctx.moveTo(x0, y0); ctx.lineTo(space, space); ctx.strokeStyle = "#000"; ctx.stroke(); ctx.lineTo(space + arrowSize / 2, space + arrowSize); ctx.lineTo(space - arrowSize / 2, space + arrowSize); ctx.lineTo(space, space); ctx.fill(); } // 绘制点并连线 LineChart.prototype.drawDotted = function(data,ctx,canvasHeight,space,dottedSize){ var x0 = space; var y0 = canvasHeight - space ; var prevCanvasX = 0; var prevCanvasY = 0; data.forEach(function(item,i){ var canvasX = x0 + item.x; var canvasY = y0 - item.y; ctx.beginPath(); ctx.moveTo(canvasX - dottedSize / 2, canvasY - dottedSize / 2); ctx.lineTo(canvasX + dottedSize / 2, canvasY - dottedSize / 2); ctx.lineTo(canvasX + dottedSize / 2, canvasY + dottedSize / 2); ctx.lineTo(canvasX - dottedSize / 2, canvasY + dottedSize / 2); ctx.closePath(); ctx.fill(); ctx.beginPath(); if(i == 0){ ctx.moveTo(x0, y0); ctx.lineTo(canvasX, canvasY); ctx.stroke(); }else{ // ctx.moveTo(x0+data[i-1].x, y0 - data[i-1].y); ctx.moveTo(prevCanvasX, prevCanvasY); ctx.lineTo(canvasX, canvasY); ctx.stroke(); } prevCanvasX = canvasX; prevCanvasY = canvasY; }); } })();