Greasy Fork

某书笔记采集器

采集某书笔记信息的工具

// ==UserScript==
// @name         某书笔记采集器
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  采集某书笔记信息的工具
// @author       Your name
// @match        *://*.xiaohongshu.com/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// ==/UserScript==

(function() {
    'use strict';

    // 添加样式
    const style = `
        #collector-panel {
            position: fixed;
            left: 20px;
            top: 50%;
            transform: translateY(-50%);
            background: white;
            border: 1px solid black;
            padding: 10px;
            z-index: 9999;
            width: 300px;
            border-radius: 5px;
        }
        #collector-count {
            margin-bottom: 10px;
            font-weight: bold;
        }
        #collected-data {
            width: 100%;
            height: 200px;
            margin-bottom: 10px;
            resize: vertical;
        }
        .collector-btn {
            margin: 5px;
            padding: 5px 10px;
            cursor: pointer;
        }
         #collector-count1 {
            margin-bottom: 10px;
            font-weight: bold;
        }

    `;

    $('<style>').text(style).appendTo('head');

    // 创建采集面板
    const panel = `
        <div id="collector-panel">
            <div id="collector-count1">小某书采集器</div>
            <div id="collector-count">已采集: 0条数据</div>
            <textarea id="collected-data" readonly></textarea>
            <button class="collector-btn" id="copy-btn">复制数据</button>
            <button class="collector-btn" id="reset-btn">重新开始</button>
        </div>
    `;

    $('body').append(panel);

    let collectedData = [];
    let processedUrls = new Set();

    // 复制数据到剪贴板
    $('#copy-btn').click(function() {
        const textarea = document.getElementById('collected-data');
        textarea.select();
        document.execCommand('copy');
        alert('数据已复制到剪贴板!');
    });

    // 重置数据
    $('#reset-btn').click(function() {
        collectedData = [];
        processedUrls = new Set();
        updateDisplay();
        alert('数据已重置!');
    });

    // 更新显示
    function updateDisplay() {
        $('#collector-count').text(`已采集: ${collectedData.length}条数据`);
        // 添加表头
        const header = '作者\t标题\t点赞数\t详情页URL\n';
        const formattedData = header + collectedData.map(item =>
            `${item.author}\t${item.title}\t${item.likes}\t${item.url}`
        ).join('\n');
        $('#collected-data').val(formattedData);
    }

    // 采集数据
    function collectData() {
        $('.note-item').each(function() {
            const $item = $(this);
            const url = $item.find('a.cover').attr('href');

            if (!url || processedUrls.has(url)) return;
            processedUrls.add(url);

            const data = {
                author: $item.find('.author .name').text().trim(),
                title: $item.find('a.title span').text().trim(),
                likes: $item.find('.like-wrapper .count').text().trim(),
                url: 'https://www.xiaohongshu.com' + url
            };

            // 检查数据是否完整
            if (data.author && data.title) {
                collectedData.push(data);
                updateDisplay();
            }
        });
    }

    // 监听DOM变化
    const observer = new MutationObserver((mutations) => {
        collectData();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // 初始采集
    collectData();
})();