Cross-platform terminal program to download IEEE journals

Overview

IEEE Journal Downloader

  • A cross-platform terminal program which tries to download every article in a specified journal and merge the documents into one PDF file.
  • May not work for some new journals
  • ▶️ YouTube Demo
  • Supported download domains:
  • 💻 Download:
  • Possible errors:
    • Windows: If Microsoft Defender SmartScreen appears, click More Info and then click Run Anyway.
    • Linux: If permission denied, try chmod +x ieee_journal_downloader_linux
  • 🐛 Possible bugs:
    • The PDF merging process has some bugs and the page order may get mixed up in some cases. Due to time constraints, I may not fix this anytime soon as I'm more interested in the separate documents.

Usage

  1. Identify the IEEE journal link. Sample link: https://ieeexplore.ieee.org/xpl/tocresult.jsp?isnumber=8802299&punumber=8014

    get_link

  2. Double click on the program or invoke it from the command line.

  3. Specify the journal link manually or from the clipboard:

    specify_link

    Alternatively, the link can be specified as an argument when you start the program from the terminal:

    # Linux
    ./ieee_journal_downloader "your_link_here"
    ./ieee_journal_downloader "https://ieeexplore.ieee.org/xpl/tocresult.jsp?isnumber=9340528&punumber=8475037"
    
    # Windows
    ieee_journal_downloader.exe "your_link_here"
    ieee_journal_downloader.exe "https://ieeexplore.ieee.org/xpl/tocresult.jsp?isnumber=9340528&punumber=8475037"
  4. Select the download domain:

    domain

  5. Wait for the documents to be fetched:

    fetch

  6. After downloading a couple of documents, the program will wait for 60 seconds to avoid any human captchas:

    captcha

  7. The merged PDF will be stored in the folder pdf_output relative to the program's location:

    done

  8. Some journals, especially very recent ones, may not be available:

    fail


Background Info

  • angular_main.js contains the main Angular code of the iEEE journal website. There are plenty REST API links littered throughout the code.
  • requests_tracking_data.txt is a list of network requests made by the IEEE journal website. The relevant requests are listed in relevant_requests.txt.
  • sample_toc_api_data.json contains a sample response returned by a POST request to https://ieeexplore.ieee.org/rest/search/pub/8014/issue/8802299/toc. This response is used to identify the journal's documents.
  • As an example, the minimum required POST request headers are:
    Accept: application/json, text/plain, */*
    Content-Type: application/json
    Host: ieeexplore.ieee.org
    Origin: https://ieeexplore.ieee.org
    Referer: https://ieeexplore.ieee.org/xpl/tocresult.jsp?isnumber=8802299&punumber=8014
    
    whereas the request payload is:
    {
        "isnumber":"8802299",
        "punumber":"8014",
        "sortType":"vol-only-seq"
    }
  • sample_metadata_api_data.json contains a sample response returned by a GET request to https://ieeexplore.ieee.org/rest/publication/home/metadata?issueid=4381235. This metadata is fetched if the user-specified URL does not contain a publication number. The headers should be:
    Accept: application/json, text/plain, */*
    Content-Type: application/json
    Host: ieeexplore.ieee.org
    Origin: https://ieeexplore.ieee.org
    

Building from source

  1. Clone this repository 👪
    • git clone https://github.com/FongYoong/ieee_journal_downloader.git
  2. Install the Rust toolchains (Rustc, Rustup, Cargo).
  3. For Linux systems, install the following: sudo apt-get install pkg-config libssl-dev libx11-xcb-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-xfixes0-dev
  4. Move into the cloned repository
    • cd ieee_journal_downloader
  5. Build! 🔨
    • cargo build --release or
    • cargo run --release
You might also like...
Download binary for your OS from Github
Download binary for your OS from Github

github-bin-downloader Download binary for your OS from Github. Installation Install github-bin-downloader using cargo cargo install github-bin-downloa

A cli tool to download specific GitHub directories or files

cloneit A cli tool to download specific GitHub directories or files. Installation From git git clone https://github.com/alok8bb/cloneit cd cloneit car

CLI tool and crate to download FTDC data from mongodb clusters.

Download mongodb FTDC data Command line tool and lib crate to download FTDC data from mongodb clusters to investigate with e.g. keyhole. Crate For the

A simple CLI to build VEXCode V5 Pro projects and download them to the V5 brain.

vexer A simple CLI to build VEXCode V5 Pro projects and download them to the V5 brain. (WIP) This currently is only tested on and only works on window

A simple, fast and interruptable download accelerator, written in Rust
A simple, fast and interruptable download accelerator, written in Rust

snatch A simple, fast and interruptable download accelerator, written in Rust WARNING This project is no longer maintained by @k0pernicus and @jean-se

Use the osu!direct button on the osu! website to download beatmaps directly to osu
Use the osu!direct button on the osu! website to download beatmaps directly to osu

osum!direct-web Use the osu!direct button on the osu! website to download beatmaps directly to osu! - without osu! supporter. Badges Usage Run the app

cli application to visualize crate download metrics.

cli application to visualize crate download metrics.

dlfile is a very simple, straightforward CLI to download a file

dlfile dlfile is a very simple, straightforward CLI to download a file, except it... Only downloads over HTTPS Requires TLS 1.2 or higher Executes in

A cli tool to download Imperial DoC past papers 🦀

Exams DoC Downloader A cli tool to download past papers from exams.doc.ic.ac.uk. An excercise in procrastination, written in Rust 🦀 . This currently

Releases(0.4.0)
Owner
Fong Chien Yoong
A Malaysian born in the advent of the second millenium.
Fong Chien Yoong
A cross-platform file sorting program

Cabinet Cross-platform file sorting system that sorts files based on their attributes, such as file type, file name and date modified. Disclaimer: Not

Ray 2 Jul 12, 2022
Nazuna - 🐦 Download Twitter videos using your terminal!

Nazuna ?? Download Twitter videos using your terminal! Installation Binary Download the desired file for your OS (Windows, Mac, Linux) from https://gi

Felipe Garcia 27 Nov 22, 2022
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Lukas Kalbertodt 75 Jul 28, 2022
Cross platform terminal library rust

Cross-platform Terminal Manipulation Library Crossterm is a pure-rust, terminal manipulation library that makes it possible to write cross-platform te

crossterm-rs 2.1k Jan 2, 2023
Alacritty - A fast, cross-platform, OpenGL terminal emulator

Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows.

Alacritty 43.8k Dec 31, 2022
Cross-platform terminal screen clearing library

ClearScreen Cross-platform terminal screen clearing library. API documentation. Dual-licensed with Apache 2.0 and MIT. Uses Caretaker Maintainership.

null 23 Dec 30, 2022
Native cross-platform full feature terminal-based sequence editor for git interactive rebase.

Native cross-platform full feature terminal-based sequence editor for git interactive rebase.

Tim Oram 1.2k Jan 2, 2023
Simple macros to write colored and formatted text to a terminal. Based on `termcolor`, thus also cross-platform.

Bunt: simple macro-based terminal colors and styles bunt offers macros to easily print colored and formatted text to a terminal. It is just a convenie

Lukas Kalbertodt 202 Dec 22, 2022
glicol cli: cross-platform music live coding in terminal

glicol-cli What's this? It's a command line interface that you can use for music live coding with Glicol. It watches a file changes and then update th

Glicol 70 Apr 14, 2023
A simple program for C program IO testing. Written in Rust

A simple program for C program IO testing. Written in Rust, using concurrency to speed up valgrind testing. Make sure to update settings at your first run of the program!

null 1 Feb 22, 2022