// ==UserScript== // @name huPuTopicZone // @namespace http://tampermonkey.net/ // @version 0.1 // @description 这是一个为虎扑崩版编写的脚本,主要为了网页端的各个分区,本人不懂前端与油猴,代码稀烂 // @author 孤独的海浪 // @match https://*.hupu.com/* // @icon https://i1.hoopchina.com.cn/newsPost/22621-2u62scrc-upload-1655706446630-7.png?x-oss-process=image/resize,m_fill,w_72,h_72 // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @connect hupu.com // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== // 用来让虎扑网页查看剧场帖子的脚本 // 创建 HTML 结构 // 获取并创建各个子分区的内容 function createHTML(topicId, zoneId, page=1) { // 将title回复/浏览改为 回复/推荐 let titleSelector = document.querySelector("#container > div > div.bbs-sl-web-holder > div > div.bbs-sl-web-topic-wrap > div.bbs-sl-web-post > div > div:nth-child(2)") titleSelector.innerText = "回复/推荐" let url = `https://bbs.mobileapi.hupu.com/1/8.0.34/topics/getTopicThreads?topic_id=${topicId}&tab_type=2&page=${page}&zoneId=${zoneId}` let list_tmp = "" getURL_GM(url).then( (result) => { result = JSON.parse(result) let data = result.data.list let hasNextPage = result.data.next_page for (let each_data of data) { let tid = each_data.tid let post_time = each_data.time let title = each_data.title let replies = each_data.replys let recommends = each_data.recommends let userName = each_data.user_name list_tmp += `
  • ${title}
    ${replies}/${recommends}
    ${userName}
    ${post_time}
  • ` } let logo = document.querySelector("#container > div > div.bbs-sl-web-holder > div > div.bbs-sl-web-topic-wrap > div.bbs-sl-web-post > ul") logo.innerHTML = list_tmp // 创建翻页标签 createPageBar(topicId, zoneId, page, hasNextPage) } ) }; // 分页 function createPageBar(topicId, zoneId, curPage, hasNextPage){ let pageBar = `
  • ${curPage}
  • ` let prePageBar = `
  • 上一页
  • ` let nextPageBar = `
  • 下一页
  • ` if(hasNextPage){ pageBar += nextPageBar } if(curPage != 1) { pageBar = prePageBar + pageBar } let pageSelector = document.querySelector("#container > div > div.bbs-sl-web-holder > div > div.bbs-sl-web-topic-wrap > div:nth-child(5) > div > ul") pageSelector.innerHTML = pageBar pageSelector.onclick=function(event){ let pageId = event.target.id let page = curPage if (pageId == "curPage"){ page = curPage }else if (pageId == "nextPage") { page = curPage + 1 } else if (pageId == "prePage"){ page = curPage - 1 } else { return } createHTML(topicId, zoneId, page) //返回页面顶部 let topBtn = document.querySelector("#container > div > section.hp-pc-footer > div.backToTop_2mZa6 > div:nth-child(3) > a") topBtn.click() } } // 创建子分区 function createZone(topicId) { let zoneUrl = "https://bbs.hupu.com/pcmapi/pc/bbs/v1/topicZone?topicId=" + topicId let oldSelectZoneId = GM_getValue("clickZoneId", null) getURL_GM(zoneUrl).then( (result) => { result = JSON.parse(result) let zone_list = result.data let cur_div = "" for (let each_zone of zone_list) { let zoneId = each_zone.id let zoneName = each_zone.zoneName cur_div += `
    ${zoneName}
    ` } let tf = document.querySelector("#container > div > div.bbs-sl-web-holder > div > div.bbs-sl-web-topic-wrap > div.bbs-sl-web-type-wrap") tf.innerHTML += cur_div tf.onclick=function(event){ let zoneName = event.target.innerText let clickZoneId = event.target.getAttribute("value") if (clickZoneId) { // 重置选中元素 let selector = document.querySelectorAll(`.bbs-sl-web-type`) for (var i=0; i { result = JSON.parse(result) let topicId = result.data.anchor.id createZone(topicId) } ) }else { return } // 只有在帖子内才会加载emoji if (hrefTail.indexOf("html") > 0) { createEmoji() } })(); //实现接口请求的通用方法 function getURL_GM(url) { return new Promise(resolve => GM.xmlHttpRequest({ method: 'GET', url: url, onload: function (response) { if (response.status >= 200 && response.status < 400) { resolve(response.responseText); } else { console.error(`Error getting ${url}:`, response.status, response.statusText, response.responseText); resolve(); } }, onerror: function (response) { console.error(`Error during GM.xmlHttpRequest to ${url}:`, response.statusText); resolve(); } })); }