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:
- IEEE if document is free
- SciHub (Recommended, fast)
- LibGen (Slow)
-
💻 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
-
Identify the IEEE journal link. Sample link: https://ieeexplore.ieee.org/xpl/tocresult.jsp?isnumber=8802299&punumber=8014
-
Double click on the program or invoke it from the command line.
-
Specify the journal link manually or from the clipboard:
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"
-
Select the download domain:
-
Wait for the documents to be fetched:
-
After downloading a couple of documents, the program will wait for 60 seconds to avoid any human captchas:
-
The merged PDF will be stored in the folder pdf_output relative to the program's location:
-
Some journals, especially very recent ones, may not be available:
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
{ "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
- Clone this repository
👪 git clone https://github.com/FongYoong/ieee_journal_downloader.git
- Install the Rust toolchains (Rustc, Rustup, Cargo).
- 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
- Move into the cloned repository
cd ieee_journal_downloader
- Build!
🔨 cargo build --release
orcargo run --release