// ==UserScript==
// @name huPuTopicZone
// @version 1.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
// @namespace http://tampermonkey.net/
// @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 += `
${replies}/${recommends}
${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 = `
`
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 3) {
return
}
// 默认取第三个值作为topicId
let hrefTail = hrefArray[3]
if (!isNaN(Number(hrefTail, 10))) {
let topicId = hrefTail
createZone(topicId)
}else if (hrefTail.indexOf("-") > 0) {
let paramUrl = "%2F" + hrefTail
let navUrl = `https://bbs.hupu.com/api/v2/nav?url=` + paramUrl
getURL_GM(navUrl).then(
(result) => {
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();
}
}));
}