Greasy Fork

Greasy Fork is available in English.

nga楼内关键字统计

用于在nga论坛楼内关键字出现次数统计

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         nga楼内关键字统计
// @namespace    http://tampermonkey.net/
// @version      0.1.3
// @description  用于在nga论坛楼内关键字出现次数统计
// @author       Stormer
// @license MIT
// @match       *://nga.178.com/read.php?*
// @match       *://bbs.nga.cn/read.php?*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=nga.178.com
// @grant        GM_log
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';
     //启动按钮
     let startbtn=document.createElement('div')
     startbtn.innerText='开始统计'
     startbtn.setAttribute('class','nav_link')
     startbtn.style.position='absolute'
     startbtn.style.top=0
     startbtn.style.right='385px'
     startbtn.style.cursor='pointer'
     document.body.append(startbtn)
     //关键字输入框
     let keywordinput=document.createElement('input')
     keywordinput.placeholder='关键字(多个以/划分)'
     keywordinput.style.width='200px'
     keywordinput.style.height='30px'
     keywordinput.style.position='absolute'
     keywordinput.style.top=0
     keywordinput.style.right='455px'
     document.body.append(keywordinput)
     //范围输入框
     let pageinput=document.createElement('input')
     pageinput.placeholder='到多少页'
     pageinput.type='number'
     pageinput.style.width='80px'
     pageinput.style.height='30px'
     pageinput.style.position='absolute'
     pageinput.style.top=0
     pageinput.style.right='665px'
     document.body.append(pageinput)
     //展示了处理进度框
     let progress=document.createElement('div')
     progress.style.width='125px'
     progress.style.height='30px'
     progress.style.position='absolute'
     progress.style.top='10px'
     progress.style.right='775px'
     progress.style.fontSize='14px'
     document.body.append(progress)
     //获取请求的url
     let url=''
     if(location.href.includes('page')){
       let tempindex=location.href.indexOf('page')-1
       url=location.href.slice(0,tempindex)
     }else{
       url=location.href
     }
     //获取最后一页是多少页
     let outerdiv=document.querySelector('#m_pbtntop')
     let lastadom=outerdiv.getElementsByTagName('a')
     lastadom[lastadom.length-1].click()
     document.querySelector('.colored_text_btn').click()
     let origingroup=document.querySelector('.ltxt.group')
     let pagelinklist=origingroup.getElementsByTagName('a')
     let maxpage=Number(pagelinklist[pagelinklist.length-1].innerText)
     console.log(maxpage)
     //事件启动
    startbtn.onclick=()=>{
       let keyword=keywordinput.value
       let pagevalue=pageinput.value
       if(pagevalue<=0){
           alert('页数需大于0')
           return;
       }else if(pagevalue>maxpage){
           alert('页数需小于最大页'+maxpage)
           return;
       }else if(keyword.trim()<=0){
           alert('关键字长度需大于0')
           return;
       }else{
         //cookie处理
         let cookie=document.cookie
         let cookiearr= cookie.split(';')
         let cookieobj={}
         for(let i=0;i<cookiearr.length;i++){
           let key=cookiearr[i].indexOf('=')
           let name=cookiearr[i].slice(0,key).trim()
           let value=cookiearr[i].slice(key+1).trim()
           cookieobj[name]=value
         }
         //关键字处理
         let keywordarr=keyword.split('/')
         let result={}
         analysis(1,cookieobj,keywordarr,result,pagevalue)
       }
    }
    //需要执行的事件
    function analysis(page,cookie,keywordarr,result,pagevalue){
      GM_xmlhttpRequest({
        methods:'get',
        url:url+'&page='+page,
        headers:{
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0',
           'Connection':'keep-alive',
        },
        onload:function(res){
          let text=''
          let tempdom=document.createElement('div')
          tempdom.innerHTML=res.responseText
          let spanlist=tempdom.getElementsByTagName('span')
          for(let i=0;i<spanlist.length;i++){
            if(spanlist[i].id.includes('postcontent')&&!spanlist[i].id.includes('subject')){
               text+=spanlist[i].innerText
            }
          }
          for(let i=0;i<keywordarr.length;i++){
              let key=keywordarr[i]
              let regex=new RegExp(key,'g')
              let regexresult=text.match(regex)
              let count=!regexresult?0:regexresult.length
              if (!(key in result)) {
                  result[key]=0
              }else{
                  result[key]+=count
              }
          }
          progress.innerText='已处理到'+page
          //console.log('已处理到'+page)
          page++
          if(page<=pagevalue){
              analysis(page,cookie,keywordarr,result,pagevalue)
          }else{
             console.log('结果是'+JSON.stringify(result))
             progress.innerText=''
             alert('结果是'+JSON.stringify(result))
          }
        },
        onerror:function(res){
          console.log(res)
        }
      })
    }
})();