Greasy Fork

Greasy Fork is available in English.

Arixv Downloader

download paper from arixv with correct name

当前为 2024-09-07 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Arixv Downloader
// @namespace    http://tampermonkey.net/
// @version      2024-09-07-08
// @description  download paper from arixv with correct name
// @author       Chaorui Xiong
// @match        https://arxiv.org/abs/*
// @icon         https://arxiv.org/static/browse/0.3.4/images/arxiv-logo-one-color-white.svg
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Get the paper title and remove blank white characters
    const title_element = document.getElementsByTagName("h1");
    // const num = title_element.length;
    let title_text = title_element[1].innerText;
    title_text = title_text.replace(/\s/g, "_");

    // Get the url of the paper
    const paper_url = document.getElementsByClassName("abs-button download-pdf")[0].href;
    // console.log(paper_url);
    const bibtex_url = paper_url.replace('pdf', 'bibtex');
    // console.log(bibtex_url);

    // Add a download button and set its style
    // Can I add an icon to this button?
    // Make a beautiful button.
    let download_button = document.createElement('button');
    download_button.id = 'download_button';
    download_button.textContent = 'Download';
    download_button.style.position = 'fixed';
    download_button.style.right = '0.4%';
    download_button.style.top = '30.6%';
    // download_button.style.backgroundColor = '#fff';
    download_button.style.border = 'none';
    download_button.style.borderRadius = '6px';
    download_button.style.borderStyle = 'solid';
    download_button.style.textAlign = 'center';
    download_button.style.padding = '5px 5px';
    download_button.style.fontSize = '11px';
    download_button.style.fontWeight = 'bold';
    download_button.style.cursor = 'hand';
    download_button.style.opacity = '1.0';

    // Append the button to the page
    document.body.appendChild(download_button);

    // Download the paper when click "Download" button
    download_button.addEventListener('click', () => {
        // alert('Downloading pdf file for you');
        // alert(title_text);
        // alert(`There are ${num} paragraph in #h1`);
        // console.log(title_text);

        // This method does not work!
        // let view_pdf = document.getElementsByClassName("abs-button download-pdf")[0];
        // view_pdf.download = title_text + ".pdf";
        // view_pdf = document.getElementsByClassName("abs-button download-pdf")[0];
        // console.log(view_pdf.download);
        // view_pdf.click();

        // Create a link element to trigger the download
        let download_link = document.createElement('a');
        document.body.appendChild(download_link);

        // Fetch paper
        fetch(paper_url)
            .then(response => response.blob())
            .then(blob => {
            // Create a blob URL for the pdf data
            var url = window.URL.createObjectURL(blob);

            // Set the download link attributes
            download_link.href = url;
            download_link.download = title_text + ".pdf";
            download_link.style.display = 'none';

            // Click download link programmly
            download_link.click();

            // Clean up by revoking the blob URL and removing the link element
            window.URL.revokeObjectURL(url);

        })
            .catch(error => {
            console.error("Failed to download the PDF file: ", error);
        });

        // Fetch bibtex
        fetch(bibtex_url)
            .then(response => response.blob())
            .then(blob => {
            // Create a blob URL for the pdf data
            var url = window.URL.createObjectURL(blob);

            // Change the download link attributes
            download_link.href = url;
            download_link.download = title_text + ".bib";
            download_link.style.display = 'none';

            // Click download link programmly
            download_link.click();

            // Clean up by revoking the blob URL and removing the link element
            window.URL.revokeObjectURL(url);

        })
            .catch(error => {
            console.error("Failed to download the PDF file: ", error);
        });

        document.body.removeChild(download_link);

    });

    download_button.addEventListener('mouseover', function() {
        this.style.backgroundColor = '#999';
        this.style.color = '#fff';
        this.style.borderColor = '#fff'
    });

    download_button.addEventListener('mouseout', function() {
        this.style.backgroundColor = '#fff';
        this.style.color = '#000';
        this.style.borderColor = '#000';
    });

})();