Scholar Author Extractor

Extract authors from arXiv and Google Scholar search results and open Twitter search tabs for each author

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name Scholar Author Extractor
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Extract authors from arXiv and Google Scholar search results and open Twitter search tabs for each author
// @author Your name
// @match https://*/*
// @grant none
// @license MIT
// @namespace search handles of authors
// ==/UserScript==

(function() {
    'use strict';

    var shortcutKeyPressed = false;

    // Function to extract authors from arXiv
    function extractAuthorsFromArxiv() {
        var authorsElement = document.querySelector('.authors');
        if (authorsElement) {
            var authorsText = authorsElement.textContent.trim();
            var authors = authorsText.replace(/^Authors:\s*/, '').split(', ');
            return authors;
        }
        return [];
    }

    // Function to extract authors from Google Scholar
    function extractAuthorsFromGoogleScholar() {
        var authorElements = document.querySelectorAll('.gs_scl');
        var authors = [];

        for (var i = 0; i < authorElements.length; i++) {
            var element = authorElements[i];
            var field = element.querySelector('.gsc_oci_field');

            if (field && field.textContent.trim() === 'Authors') {
                var valueElement = element.querySelector('.gsc_oci_value');
                if (valueElement) {
                    var authorNames = valueElement.textContent.trim().split(', ');
                    authors = authors.concat(authorNames);
                }
            }
        }

        return authors;
    }

    // Function to open Twitter search tabs for each author
    function openTwitterTabs(authors) {
        authors.forEach(function(author) {
            var url = 'https://twitter.com/search?q=' + encodeURIComponent(author) + '&src=typed_query&f=user';
            window.open(url, '_blank');
        });
    }

    // Function to open LinkedIn search tabs for each author
    function openLinkedInTabs(authors) {
        authors.forEach(function(author) {
            var url = 'https://www.linkedin.com/search/results/all/?keywords=' + encodeURIComponent(author);
            window.open(url, '_blank');
        });
    }

    // Listen for keypress events
    window.addEventListener('keydown', function(event) {
        // Check if Ctrl + Shift + T is pressed
        if (event.ctrlKey && event.shiftKey && event.key === 'T') {
            shortcutKeyPressed = true;
        }
    });

    // Listen for keyup events to reset the flag
    window.addEventListener('keyup', function(event) {
        // Reset the flag if the same key combination is released
        if (event.key === 'T') {
            shortcutKeyPressed = false;
        }
    });


    // Create buttons for opening Twitter and LinkedIn search tabs
    var twitterButton = document.createElement('button');
    twitterButton.textContent = 'Open Twitter Search Tabs';
    twitterButton.addEventListener('click', function() {
        var authors;
        if (window.location.host === "arxiv.org") {
            // Extract authors from arXiv
            authors = extractAuthorsFromArxiv();
        } else if (window.location.host === "scholar.google.com") {
            // Extract authors from Google Scholar
            authors = extractAuthorsFromGoogleScholar();
        }

        openTwitterTabs(authors);
    });

    var linkedInButton = document.createElement('button');
    linkedInButton.textContent = 'Open LinkedIn Search Tabs';
    linkedInButton.addEventListener('click', function() {
        var authors;
        if (window.location.host === "arxiv.org") {
            // Extract authors from arXiv
            authors = extractAuthorsFromArxiv();
        } else if (window.location.host === "scholar.google.com") {
            // Extract authors from Google Scholar
            authors = extractAuthorsFromGoogleScholar();
        }

        openLinkedInTabs(authors);
    });


    // Listen for keyup events
    window.addEventListener('keyup', function(event) {
        // Check if Ctrl + Shift + T is released
        if (event.ctrlKey && event.shiftKey && event.key === 'T') {
            shortcutKeyPressed = true;

            var authors = [];
            if (window.location.host === "arxiv.org") {
                // Extract authors from arXiv
                authors = extractAuthorsFromArxiv();
            } else if (window.location.host === "scholar.google.com") {
                // Extract authors from Google Scholar
                authors = extractAuthorsFromGoogleScholar();
            }

            // Create a container element for the buttons and textarea
            var container = document.createElement('div');
            container.style.position = 'fixed';
            container.style.top = '10px';
            container.style.right = '10px';
            container.style.zIndex = '9999';
            document.body.appendChild(container);

            // Create a textarea to display and edit author names
            var textarea = document.createElement('textarea');
            textarea.style.width = '300px';
            textarea.style.height = '150px';
            textarea.value = authors.join(', ');
            container.appendChild(textarea);

            // Create the "Cancel" button
            var cancelButton = document.createElement('button');
            cancelButton.textContent = 'Cancel';
            cancelButton.addEventListener('click', function() {
                document.body.removeChild(container);
            });
            container.appendChild(cancelButton);

            // Create the "Twitter" button
            var twitterButton = document.createElement('button');
            twitterButton.textContent = 'Twitter';
            twitterButton.addEventListener('click', function() {
                var names = textarea.value.split(/,| and /).map(function(name) {
                    return name.trim();
                }).filter(function(name) {
                    return name !== '';
                });
                openTwitterTabs(names);
                document.body.removeChild(container);
            });
            container.appendChild(twitterButton);

            // Create the "LinkedIn" button
            var linkedInButton = document.createElement('button');
            linkedInButton.textContent = 'LinkedIn';
            linkedInButton.addEventListener('click', function() {
                var names = textarea.value.split(/,| and /).map(function(name) {
                    return name.trim();
                }).filter(function(name) {
                    return name !== '';
                });
                openLinkedInTabs(names);
                document.body.removeChild(container);
            });
            container.appendChild(linkedInButton);

            // Reset the flag after executing functionality
            shortcutKeyPressed = false;
        }
    });
})();