SMZDM 分类页自动排序

SMZDM 分类页自动热度排序10页商品

// ==UserScript==
// @name         SMZDM 分类页自动排序
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  SMZDM 分类页自动热度排序10页商品
// @author       cheerchen37
// @match        https://www.smzdm.com/fenlei/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 获取当前页面的 URL 并构造基础 URL
    const currentPage = window.location.href;
    const baseUrl = currentPage.split('#')[0]; // 移除 URL 中的 hash 部分
    const itemsPerPage = 20; // 假设每页有20个项目
    let items = [];

    function parseItems(doc) {
        const itemList = doc.querySelectorAll('ul#feed-main-list > li');
        itemList.forEach(li => {
            const favCount = parseInt(li.querySelector('.z-group-data[title^="收藏数"] span').textContent, 10);
            const commentCount = parseInt(li.querySelector('.z-group-data[title^="评论数"] span').textContent, 10);
            const activity = favCount + commentCount;
            items.push({ element: li, favCount, commentCount, activity });
        });
    }

    function fetchPage(pageNumber) {
        const url = `${baseUrl}/p${pageNumber}/`;
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open('GET', url);
            xhr.responseType = 'document';
            xhr.onload = () => {
                if (xhr.status === 200) {
                    parseItems(xhr.response);
                    resolve();
                } else {
                    reject(`Failed to load page ${pageNumber}`);
                }
            };
            xhr.onerror = () => reject(`Network error while fetching page ${pageNumber}`);
            xhr.send();
        });
    }

    async function fetchAllPages() {
        const promises = [];
        for (let i = 2; i <= 9; i++) { // 从第2页到第10页
            promises.push(fetchPage(i));
        }
        await Promise.all(promises);
        items.sort((a, b) => b.activity - a.activity);
        items = items.slice(0, itemsPerPage); // 只保留最活跃的一页项目
        // Debug output
        console.log("Sorted and filtered items:");
        items.forEach(item => {
            console.log(`Activity: ${item.activity}, Comments: ${item.commentCount}, Favorites: ${item.favCount}`);
        });
        displaySortedItems();
    }

    function displaySortedItems() {
        const listContainer = document.querySelector('ul#feed-main-list');
        listContainer.innerHTML = '';
        items.forEach(item => {
            listContainer.appendChild(item.element);
        });
    }

    // 首先解析当前页
    parseItems(document);
    // 然后获取后续页
    fetchAllPages();
})();