知乎热榜首页显示回答数、关注数、浏览数、创建者、创建时间

在知乎的热榜页中,显示每个问题的回答数、关注数、浏览数、创建者、创建时间。

目前為 2024-03-05 提交的版本,檢視 最新版本

// ==UserScript==
// @name         知乎热榜首页显示回答数、关注数、浏览数、创建者、创建时间
// @namespace    http://tampermonkey.net/
// @version      2024-03-05
// @description  在知乎的热榜页中,显示每个问题的回答数、关注数、浏览数、创建者、创建时间。
// @author       Fat Cabbage
// @license      MIT
// @match        https://www.zhihu.com/hot
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==
/* globals jQuery, $, waitForKeyElements */

let __a650_config__ = {};
let __a650_node_list__ = [];

(function () {
    'use strict';

    __a650_node_list__ = document.getElementsByClassName('HotItem-metrics');
    let links_list = document.getElementsByClassName('HotItem-content');

    let href_list = [];

    for (let i = 0; i < links_list.length; i++) {
        let links = links_list[i].getElementsByTagName('a')
        let href = links[0].href;

        if (/question/.test(href)) {
            href_list.push(href);
        }
    }

    fetchInOrder(href_list).then(() => {
    });
})();

async function fetchInOrder(href_list) {
    // for (let href of href_list) {
    for (let i = 0; i < href_list.length; i++) {
        let href = href_list[i];
        let log_href = `${href}/log`

        let match = href.match(/.*\/question\/(\d+)/)
        let id = match ? match[1] : -1;

        await fetchDataRow1(href, i, id);
        await fetchDataRow2(log_href, i, id);
    }
}

function fetchDataRow1(href, i, id) {
    return new Promise(function (resolve) {
        $.get(href, function (res) {
            let dom = new DOMParser().parseFromString(res, 'text/html');
            let values = dom.getElementsByClassName('NumberBoard-itemValue');

            let node = __a650_node_list__[i];
            let followers_num = parseInt(values[0].outerText.replaceAll(',', ''));
            let views_num = parseInt(values[1].outerText.replaceAll(',', ''));

            values = dom.getElementsByClassName('List-headerText');
            let answer_num = values[0].outerText;
            answer_num = answer_num.replaceAll(' 个回答', '').replaceAll(',', '')
            answer_num = parseInt(answer_num);

            if (__a650_config__[id] === undefined) {
                __a650_config__[id] = {}
            }
            if (__a650_config__[id].node === undefined) {
                __a650_config__[id].node = node;
            }
            __a650_config__[id].followers = followers_num;
            __a650_config__[id].views = views_num;
            __a650_config__[id].answers = answer_num;
            __a650_config__[id].updated = true;

            update_interface_value();

            resolve(res);
        });
    });
}

function fetchDataRow2(href, i, id) {
    return new Promise(function (resolve) {
        $.get(href, function (res) {
            let dom = new DOMParser().parseFromString(res, 'text/html');
            let log_list = dom.getElementsByClassName('zm-item');
            let initial_log = log_list[log_list.length - 1];

            let child1 = initial_log.children[0];
            let author = child1.outerText;
            author = author.replaceAll('添加了问题', '').replaceAll('\n', '');

            let child2 = initial_log.querySelector('time');
            let time = child2.outerText;

            if (__a650_config__[id] === undefined) {
                __a650_config__[id] = {}
            }
            if (__a650_config__[id].node === undefined) {
                __a650_config__[id].node = node;
            }
            __a650_config__[id].author = author;
            __a650_config__[id].created_time = time;
            __a650_config__[id].updated = true;

            update_interface_value();

            resolve(res);
        });
    });
}

function update_interface_value() {
    for (let id in __a650_config__) {
        let config = __a650_config__[id];

        let node = config.node;
        let followers_num = config.followers;
        let views_num = config.views;
        let answer_num = config.answers;
        let author = config.author;
        let created_time = config.created_time;
        let updated = config.updated;

        if (!updated) {
            continue;
        }

        node = node.childNodes;

        let view_str;
        if (views_num < 1e4) {
            view_str = `${views_num} `;
        } else if (views_num < 1e8) {
            view_str = `${Math.floor(views_num / 1e4)} 万`;
        } else {
            view_str = `${(views_num / 1e8).toFixed(1)} 亿`;
        }

        let match = node[1].nodeValue.match(/\d+.*?热度/);
        let hot = match ? match[0] : -1;

        let row1_text = `${hot} - ${answer_num} 回答 - ${followers_num} 关注 - ${view_str}浏览`
        let row2_text = `创建 ${author} | ${created_time}`

        let row1_node = document.createTextNode(row1_text);
        let br = document.createElement('br');
        let row2_node = document.createTextNode(row2_text);

        for (let i = 1; i < node.length - 1; i++) {
            node[i].remove();
        }
        node[0].parentNode.style.height = '0px'
        node[0].parentNode.insertBefore(row1_node, node[1])
        node[0].parentNode.insertBefore(br, node[2])
        node[0].parentNode.insertBefore(row2_node, node[3])

        config.updated = false;
    }
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址