From a882dfc74328b3b2d71f553685d1aebadafed0a3 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Mon, 20 Jan 2025 22:41:37 +0100 Subject: [PATCH] Updated readme --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ec5de44..1077006 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,78 @@ -# InstructionsDownloader +# Instruction Downloader Script -Script to download LEGO instructions \ No newline at end of file +This Python script is designed to download LEGO building instructions for a given set ID from the Rebrickable website. It will search for all available instruction links related to a set, and based on the presence of a "V29" (or "V 29") tag in the alt text, it will download specific versions of the instructions. + +## Features + +- **Download Specific Versions**: Automatically handles downloading of instructions based on the `V29` version. +- **Handle Complex Alt Text**: The script handles alt text that includes variations like `V29`, including `x/y` patterns and ignores invalid patterns. +- **Fallback for Missing or Invalid V29 Versions**: If no valid V29 instruction links are found, the script will download all available instructions. +- **Customizable Download Filenames**: Instructions are saved with filenames based on the set ID and the instruction variant. +- **User-Agent Spoofing**: The script mimics a browser request to avoid being blocked as a bot. + +## Requirements + +- Python 3.x +- `requests` library +- `beautifulsoup4` library + +You can install the required dependencies by running: + +```bash +python3 -m pip install requests beautifulsoup4 +``` + +## Usage + +### Running the Script + +To use this script, you need to provide the LEGO set ID as an argument. The set ID is typically in the format `####-1` (e.g., `10313-1`). + +### Example Command + +```bash +python3 dl.py 10313-1 +``` + +This will download the LEGO building instructions for the set `10313-1` (Wildflower Bouquet). + +### How It Works + +1. The script will visit the Rebrickable page for the provided set ID. +2. It will search for all available instruction links containing "LEGO Building Instructions" in the `alt` text. +3. If links with "V29" are found, the script will download them in order, naming them as `{set_id}+1.pdf`, `{set_id}+2.pdf`, etc. +4. If the `x/y` values in the `alt` text are invalid (i.e., `x` or `y` greater than 10), those links will be ignored. +5. If no valid `V29` links are found, the script will fall back to downloading all available instruction links, with filenames based on the alt text. + +## Script Output + +The script will print status messages during the execution, including: + +- URLs of the files being downloaded. +- The filenames that the instructions will be saved as. +- Any errors encountered while downloading. + +## Example Output + +```bash +Downloading: https://rebrickable.com/instructions/10313-1/123456/download/?expire=1737409263 -> 10313+1.pdf +Saved: 10313+1.pdf +Downloading: https://rebrickable.com/instructions/10313-1/789012/download/?expire=1737409263 -> 10313+2.pdf +Saved: 10313+2.pdf +``` + +If no valid `V29` links are found, the script will print out the available instruction links. + +## Error Handling + +- If the page cannot be loaded (e.g., invalid set ID), the script will print an error message and stop. +- If an instruction download fails, the script will print an error message with the HTTP status code. + +## Customization + +- **User-Agent**: The script uses a browser-like User-Agent string to avoid being detected as a bot. You can customize the `headers` variable if needed. +- **Download Filename Format**: The filenames for the downloaded instructions are automatically generated. You can modify the `download_instructions` function to change the naming convention. + +## License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. \ No newline at end of file