commit d52bd9aaaf88946ed32923949a81c781ab006444 Author: Philipp Korylec Date: Thu Apr 3 10:24:15 2025 +0200 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..26eee13 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# MoPa Loader + +A simple file downloader for your favourite File-Listing-Website. + +## Installation + +1) Clone the repository +2) Make the script executable: `chmod +x mopa_loader.sh` +3) Edit `.env` and update all variables (Download location is optional) +4) Run `./mopa_loader.sh` + +## Usage + +Update or create a local library with: `./mopa_loader.sh update` first. Have fun downloading. :) diff --git a/mopa_loader.sh b/mopa_loader.sh new file mode 100755 index 0000000..099ffbd --- /dev/null +++ b/mopa_loader.sh @@ -0,0 +1,230 @@ +#!/bin/bash + +clear +cat << "EOF" + __ ___ ____ + / |/ /___ / __ \____ _ + / /|_/ / __ \/ /_/ / __ `/ + / / / / /_/ / ____/ /_/ / +/_/ _/_/\____/_/ \__,_/_ + / / ____ ____ _____/ /__ _____ + / / / __ \/ __ `/ __ / _ \/ ___/ + / /__/ /_/ / /_/ / /_/ / __/ / +/_____|____/\__,_/\__,_/\___/_/ + +v0.1BETA +by MoPa Ltd + +EOF + +#!/bin/bash + +# .env-Datei laden, falls vorhanden +if [ -f .env ]; then + export $(grep -v '^#' .env | xargs) +fi + +# Basis-URL aus der .env Datei +if [ -z "$BASE_URL" ]; then + echo "BASE_URL ist nicht gesetzt. Bitte in der .env Datei festlegen." + exit 1 +fi + +# Sicherstellen, dass BASE_URL mit / endet +if [[ ! "$BASE_URL" =~ /$ ]]; then + BASE_URL="$BASE_URL/" +fi + +# Funktion zum Generieren des JSON +update_json() { + # HTML-Inhalt abrufen + HTML_CONTENT=$(curl -s -u "$USERNAME:$PASSWORD" "$BASE_URL") + + # Alle Ordnernamen extrahieren + DIRS=($(echo "$HTML_CONTENT" | grep -o 'href="[^"]*/"')) + + # JSON-Daten initialisieren + JSON_OUTPUT="{\n \"folders\": [" + + # Verarbeiten der Ordner + for dir in "${DIRS[@]}"; do + # Entferne das href=" und " + dir=$(echo "$dir" | sed 's/href="\([^"]*\)"/\1/') + + # Entschlüsselte Version des Ordnernamens (schöner Name) + readable_dir=$(echo "$dir" | sed 's/%20/ /g; s/%28/(/g; s/%29/)/g') + + # Überprüfen, ob der Pfad mit einem / endet und ggf. hinzufügen + if [[ ! "$dir" =~ /$ ]]; then + dir="$dir/" + fi + + # Vollständige URL mit Pfad erstellen + FULL_URL="$BASE_URL$dir" + echo "Verarbeite Ordner: $FULL_URL" + + # Dateien im Ordner finden + FILES=($(curl -s -u "$USERNAME:$PASSWORD" "$FULL_URL" | grep -o 'href="[^"]*\.\(mp4\|mkv\|avi\|mov\|flv\)"' | sed 's/href="\([^"]*\)"/\1/')) + + # Falls Dateien gefunden wurden + if [ ${#FILES[@]} -gt 0 ]; then + echo "Gefundene Dateien im Ordner '$dir':" + for file in "${FILES[@]}"; do + echo "$file" + done + + # Ordner-JSON hinzufügen + JSON_OUTPUT+="{\n \"name\": \"$readable_dir\",\n \"files\": [" + + # Dateien-JSON hinzufügen + for file in "${FILES[@]}"; do + full_file_url="$BASE_URL$dir$file" + JSON_OUTPUT+="{\n \"file\": \"$file\",\n \"url\": \"$full_file_url\"\n }," + done + + # Letztes Komma entfernen und Ordner-JSON abschließen + JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' ) + JSON_OUTPUT+=" }," + else + echo "Keine Dateien im Ordner '$dir' gefunden." + fi + done + + # Letztes Komma entfernen und JSON abschließen + JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' ) + JSON_OUTPUT+="}" + + # JSON speichern + echo -e "$JSON_OUTPUT" > output.json + + echo "Daten gespeichert in output.json" +} + +# Funktion zum Auflisten der Ordnernamen +list_folder_names() { + if [ -f "output.json" ]; then + folder_names=$(jq -r '.folders[].name' output.json) + if [ -n "$folder_names" ]; then + echo "Ordnernamen:" + echo "$folder_names" + else + echo "Keine Ordnernamen im JSON gefunden." + fi + else + echo "Die Datei output.json existiert nicht." + fi +} + +# Funktion zur Ordnersuche +search_folder() { + if [ -z "$2" ]; then + echo "Bitte einen Suchbegriff angeben." + exit 1 + fi + + if [ ! -f "output.json" ]; then + echo "Die Datei output.json existiert nicht." + exit 1 + fi + + results=$(jq -r --arg search "$2" '.folders[].name | select(test($search; "i"))' output.json) + + if [ -z "$results" ]; then + echo "Keine passenden Ordner gefunden." + else + echo "🔎 Gefundene Ordner:" + count=1 + while IFS= read -r line; do + if [ $(echo "$results" | wc -l) -gt 1 ]; then + echo "${count}️⃣ $line" + count=$((count + 1)) + else + echo "$line" + fi + done <<< "$results" + fi +} + +# Funktion zum Herunterladen einer Datei +download_file() { + if [ -z "$2" ]; then + echo "Bitte einen Suchbegriff angeben." + exit 1 + fi + + if [ ! -f "output.json" ]; then + echo "Die Datei output.json existiert nicht." + exit 1 + fi + + # Wenn DOWNLOAD_LOCATION nicht gesetzt, nach dem Zielordner fragen + DOWNLOAD_LOCATION=${DOWNLOAD_LOCATION:-$(read -p "Bitte Zielordner für den Download angeben (Standard: .): " loc; echo ${loc:-.})} + + results=$(jq -r --arg search "$2" '.folders[] | select(.name | test($search; "i"))' output.json) + + if [ -z "$results" ]; then + echo "Keine passenden Dateien gefunden." + exit 1 + fi + + matched_files=($(echo "$results" | jq -r '.files[].url')) + matched_names=($(echo "$results" | jq -r '.files[].file')) + + if [ ${#matched_files[@]} -eq 1 ]; then + file_url=${matched_files[0]} + file_name=${matched_names[0]} + read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice + choice=${choice:-J} + if [[ "$choice" =~ ^[Jj]$ ]]; then + wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name" + echo "Download abgeschlossen: $file_name" + else + echo "Download abgebrochen." + fi + else + echo "🔎 Gefundene Dateien:" + count=1 + for file in "${matched_names[@]}"; do + echo "${count}️⃣ $file" + count=$((count + 1)) + done + read -p "Gib die Zahl der Datei ein, die du herunterladen möchtest: " selection + if [[ "$selection" =~ ^[0-9]+$ ]] && [ "$selection" -le ${#matched_files[@]} ]; then + index=$((selection - 1)) + file_url=${matched_files[$index]} + file_name=${matched_names[$index]} + read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice + choice=${choice:-J} + if [[ "$choice" =~ ^[Jj]$ ]]; then + wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name" + echo "Download abgeschlossen: $file_name" + else + echo "Download abgebrochen." + fi + else + echo "Ungültige Auswahl." + fi + fi +} + +# Aliase hinzufügen +alias dl="download_file" + +case "$1" in + "update") + update_json + ;; + "list") + list_folder_names + ;; + "search") + search_folder "$@" + ;; + "download"|"dl") + download_file "$@" + ;; + *) + echo "Verwendung: $0 {update|list|search |download }" + exit 1 + ;; +esac