Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Stalker VOD/Serien Downloader

clever999

Stamm User
Registriert
5. Oktober 2011
Beiträge
1.185
Reaktionspunkte
2.200
Punkte
1.860
Hallo Zusammen,

habe mal einen Downloader, unter Ubuntu, für VOD und Serien erstellt. Mal schauen evtl nehme ich es in xtreammulti mit rein.

nano /home/stalkerdownloader.sh (spoiler einfügen)
Bash:
#!/bin/bash
# ╔═════════════════════════════════════════════════════════════╗
# ║ IPTV / Stalker Portal Script – Live, VOD & Serien           ║
# ║ Interaktive Auswahl + ffplay/mpv + ESC-Handling  by clever  ║
# ╚═════════════════════════════════════════════════════════════╝

# === Grundeinstellungen ===
MAC="00:1A:79:ab:f4:af"
URL="http://global4k.info:8080"
UA="Mozilla/5.0 (QtEmbedded; U; Linux; C) AppleWebKit/533.3 (KHTML, like Gecko) MAG250 stbapp ver: 4 rev: 2721 Mobile Safari/533.3"
COOKIE="mac=$MAC; stb_lang=en; timezone=Europe/Amsterdam;"
token=""
PLAYER="ffplay -hide_banner"

# ==========================================================
# 💡 Interaktive Änderung von URL & MAC
# ==========================================================
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📡 IPTV Portal Zugriff"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
read -p "Aktuelle URL ist '$URL' – neue eingeben oder Enter: " input_url
if [[ -n "$input_url" ]]; then
    URL="$input_url"
fi

read -p "Aktuelle MAC ist '$MAC' – neue eingeben oder Enter: " input_mac
if [[ -n "$input_mac" ]]; then
    MAC="$input_mac"
fi

COOKIE="mac=$MAC; stb_lang=en; timezone=Europe/Amsterdam;"

# Download-Ordner prüfen
if [ ! -d "Download" ]; then
    mkdir Download
fi

# Abhängigkeiten prüfen
for pkg in curl fzf ffmpeg; do
    if ! dpkg -s "$pkg" >/dev/null 2>&1; then
        echo "→ Installiere $pkg ..."
        sudo apt-get install -y "$pkg"
    else
        echo "✔ $pkg ist bereits installiert."
    fi
done


# ==========================================================
# 🔐 Authentifizierung
# ==========================================================
get_token() {
    echo "🔑 Authentifiziere mit Portal..."
    response=$(curl -s -i -H "User-Agent: $UA" -H "Cookie: $COOKIE" \
        "$URL/portal.php?type=stb&action=handshake&JsHttpRequest=1-xml")
    token=$(echo "$response" | grep -oP '(?<="token":")[^"]*')
    [[ -z "$token" ]] && { echo "❌ Kein Token erhalten!"; exit 1; }
    echo "✅ Token: $token"
}

# ==========================================================
# 📡 API-Funktionen
# ==========================================================
get_live_categories() {
    curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=itv&action=get_genres&JsHttpRequest=1-xml"
}

get_live_channels() {
    local genre_id="$1"
    local results=""
    for ((page=1; page<=10000; page++)); do
        echo "📡 Lade Sender Seite $page..." >&2
        resp=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
            "$URL/portal.php?type=itv&action=get_ordered_list&genre=$genre_id&p=$page&JsHttpRequest=1-xml")
        [[ "$(echo "$resp" | jq -c '.js.data')" == "[]" ]] && { echo "✅ Alle Sender geladen."; break; }
        results+=$(echo "$resp" | jq -r '.js.data[]? | "\(.name)\t\(.cmd)"')$'\n'
    done
    echo "$results"
}

get_vod_categories() {
    curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=vod&action=get_categories&JsHttpRequest=1-xml"
}

get_vod_list() {
    local cat="$1"
    local results=""
    for ((page=1; page<=10000; page++)); do
        echo "🎬 Lade Filme Seite $page..." >&2
        resp=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
            "$URL/portal.php?type=vod&action=get_ordered_list&category=$cat&p=$page&JsHttpRequest=1-xml")
        [[ "$(echo "$resp" | jq -c '.js.data')" == "[]" ]] && { echo ""; break; }
        results+=$(echo "$resp" | jq -r '.js.data[]? | "\(.name)\t\(.cmd)"')$'\n'
    done
    echo "$results"
}

get_series_categories() {
    curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=series&action=get_categories&JsHttpRequest=1-xml"
}

get_series_list() {
    local cat="$1"
    local results=""
    for ((page=1; page<=10000; page++)); do
        echo "🎞️ Lade Serien Seite $page..." >&2
        resp=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
            "$URL/portal.php?type=series&action=get_ordered_list&category=$cat&p=$page&JsHttpRequest=1-xml")
        [[ "$(echo "$resp" | jq -c '.js.data')" == "[]" ]] && { echo ""; break; }
        results+=$(echo "$resp" | jq -r '.js.data[]? | "\(.name)|\(.id)"')$'\n'
    done
    echo "$results"
}

get_episodes() {
    local series_id="$1"
    local results=""
    for ((page=1; page<=10000; page++)); do
        echo "🎬 Lade Episoden Seite $page..." >&2
        resp=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
            "$URL/portal.php?type=series&action=get_ordered_list&movie_id=$series_id&category=$series_id&genre=*&season_id=0&episode_id=0&p=$page&JsHttpRequest=1-xml")
        [[ "$(echo "$resp" | jq -c '.js.data')" == "[]" ]] && { echo ""; break; }

        results+=$(echo "$resp" | jq -r '
            .js.data[]? as $season
            | $season.series[]? as $ep_id
            | "\($ep_id)\t\($season.cmd)\t\($season.path) \($season.name) Episode \($ep_id)\t\($ep_id)"
        ')$'\n'
    done
    echo "$results"
}

# ==========================================================
# ▶️ Wiedergabe
# ==========================================================
play_media() {
    local cmd="$1"
    link=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=itv&action=create_link&cmd=$(echo "$cmd" | sed 's#ffmpeg ##g')&JsHttpRequest=1-xml")
    ffplay_cmd=$(echo "$link" | jq -r '.js.cmd' | sed 's#ffmpeg ##g')
    [[ -z "$ffplay_cmd" ]] && { echo "❌ Kein Stream-Link!"; return 1; }
    $PLAYER "$ffplay_cmd" >/dev/null 2>&1
    echo "⏹️ Stream beendet"
}

play_vod() {
    local cmd="$1"
    link=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=vod&action=create_link&cmd=$(echo "$cmd" | sed 's#ffmpeg ##g')&JsHttpRequest=1-xml")
    ffplay_cmd=$(echo "$link" | jq -r '.js.cmd' | sed 's#ffmpeg ##g')
    [[ -z "$ffplay_cmd" ]] && { echo "❌ Kein Stream-Link!"; return 1; }
    $PLAYER "$ffplay_cmd" >/dev/null 2>&1
    echo "⏹️ Stream beendet"
}

download_vod() {
    local cmd="$1"
    local title="$2"

    # Stream-Link abrufen
    link=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=vod&action=create_link&cmd=$(echo "$cmd" | sed 's#ffmpeg ##g')&JsHttpRequest=1-xml")
 
    ffplay_cmd=$(echo "$link" | jq -r '.js.cmd' | sed 's#ffmpeg ##g')
    [[ -z "$ffplay_cmd" ]] && { echo "❌ Kein Stream-Link!"; return 1; }


    echo "⏬ Download in $title..."
    curl -L "$ffplay_cmd" -o Download/"$title"
    echo "⏹️ Download $title beendet"
}


play_series() {
    local season_cmd="$1"
    local ep_num="$2"
    link=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=vod&action=create_link&cmd=$season_cmd&series=$ep_num&JsHttpRequest=1-xml")
    ffplay_cmd=$(echo "$link" | jq -r '.js.cmd' | sed 's#ffmpeg ##g')
    [[ -z "$ffplay_cmd" ]] && { echo "❌ Kein Stream-Link!"; return 1; }
    $PLAYER "$ffplay_cmd" >/dev/null 2>&1
    echo "⏹️ Stream beendet"
}

download_series() {
    local season_cmd="$1"
    local ep_num="$2"
    local ep_title="$3"

    link=$(curl -s -H "User-Agent: $UA" -H "Cookie: $COOKIE" -H "Authorization: Bearer $token" \
        "$URL/portal.php?type=vod&action=create_link&cmd=$season_cmd&series=$ep_num&JsHttpRequest=1-xml")
    ffplay_cmd=$(echo "$link" | jq -r '.js.cmd' | sed 's#ffmpeg ##g')
    [[ -z "$ffplay_cmd" ]] && { echo "❌ Kein Stream-Link!"; return 1; }
    echo "⏬ Download in $title..."
    echo $ffplay_cmd
    curl -L "$ffplay_cmd" -o Download/"$ep_title"
    echo "⏹️ Download $title beendet"
}

# ==========================================================
# 🧭 ESC-fähige Menüs mit alphabetischer Sortierung der Items
# ==========================================================
menu_live() {
    livecats=$(get_live_categories | jq -r '.js[] | "\(.id)|\(.title)"' | sed '/|All/d')
    while true; do
        selected=$(echo "$livecats" | fzf --prompt="📺 LiveTV Kategorie (ESC=zurück): ")
        [[ $? -eq 130 ]] && break
        [[ -z "$selected" ]] && continue

        genre_id="${selected%%|*}"
        channels=$(get_live_channels "$genre_id")
        [[ -z "$channels" ]] && { echo "🚫 Keine Sender."; continue; }

        # ⚠️ Keine Sortierung, LiveTV bleibt in Portal-Reihenfolge
        while true; do
            sel=$(echo "$channels" | fzf --delimiter=$'\t' --with-nth=1 --prompt="📻 Sender auswählen (ESC=zurück): ")
            [[ $? -eq 130 ]] && break
            [[ -z "$sel" ]] && continue

            cmd=$(echo "$sel" | cut -f2)
            play_media "$cmd"
        done
    done
}


menu_vod() {
    vodcats=$(get_vod_categories | jq -r '.js[] | "\(.id)|\(.title)"')
    while true; do
        selected=$(echo "$vodcats" | fzf --prompt="🎞️ VOD Kategorie (ESC=zurück): ")
        [[ $? -eq 130 ]] && break
        [[ -z "$selected" ]] && continue
        cat_id="${selected%%|*}"
        vods=$(get_vod_list "$cat_id")
        [[ -z "$vods" ]] && { echo "🚫 Keine Filme."; continue; }

        # Filme alphabetisch sortieren
        vods_sorted=$(echo "$vods" | sort -t$'\t' -k1)

        while true; do
            sel=$(echo "$vods_sorted" | fzf --delimiter=$'\t' --with-nth=1 --prompt="🎬 Film auswählen (ESC=zurück): ")
            [[ $? -eq 130 ]] && break
            [[ -z "$sel" ]] && continue

            cmd=$(echo "$sel" | cut -f2)
    title=$(echo "$sel" | cut -f1 | sed 's/ /_/g' )

            # Auswahl: Watch oder Download
            action=$(echo -e "▶️ Watch\n⬇️ Download" | fzf --prompt="Wähle Aktion (ESC=zurück): ")
            [[ $? -eq 130 ]] && continue
            [[ -z "$action" ]] && continue

            case "$action" in
                "▶️ Watch")
                    play_vod "$cmd"
                    ;;
                "⬇️ Download")
                    download_vod "$cmd" "$title"
                    ;;
            esac
        done
    done
}


menu_series() {
    sercats=$(get_series_categories | jq -r '.js[] | "\(.id)\t\(.title)"')
    while true; do
        selected=$(echo "$sercats" | fzf --delimiter=$'\t' --with-nth=2 --prompt="📚 Serien Kategorie (ESC=zurück): ")
        [[ $? -eq 130 ]] && break
        [[ -z "$selected" ]] && continue

        cat_id="${selected%%$'\t'*}"
        series=$(get_series_list "$cat_id")
        [[ -z "$series" ]] && { echo "🚫 Keine Serien."; continue; }

        # Serien alphabetisch sortieren
        series_sorted=$(echo "$series" | sort -t'|' -k1)

        while true; do
            sel_series=$(echo "$series_sorted" | fzf --prompt="📺 Serie auswählen (ESC=zurück): ")
            [[ $? -eq 130 ]] && break
            [[ -z "$sel_series" ]] && continue

            series_id="${sel_series#*|}"
            episodes=$(get_episodes "$series_id")
            [[ -z "$episodes" ]] && { echo "🚫 Keine Episoden."; continue; }

            # Episoden alphabetisch sortieren (nach Titel + Episode)
            episodes_sorted=$(echo "$episodes" | sort -t$'\t' -k3,3 -k4,4n)

            # ✅ Multi-Select aktivieren (SPACE zum Markieren)
            sel_episodes=$(echo "$episodes_sorted" | fzf --multi --marker="✓ " --bind="space:toggle" --delimiter=$'\t' --with-nth=3 --prompt="🎬 Episoden auswählen (SPACE=markieren, ENTER=Download): ")
            [[ $? -eq 130 ]] && break
            [[ -z "$sel_episodes" ]] && continue

            # ✅ Jede markierte Episode durchgehen
            echo "$sel_episodes" | while IFS=$'\t' read -r show_title season_cmd ep_title ep_num; do
                clean_title=$(echo "$ep_title" | sed 's/ /_/g')
                echo "⬇️ Starte Download: S${season_cmd}E${ep_num} - ${clean_title}"
                download_series "$season_cmd" "$ep_num" "$clean_title"
            done
        done
    done
}


# ==========================================================
# ⚙️ Start
# ==========================================================
clear
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📡 IPTV Portal Zugriff"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " MAC: $MAC"
echo " URL: $URL"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

get_token

while true; do
    choice=$(echo -e "1|📺 LiveTV\n2|🎞️ VOD (Filme)\n3|📚 Serien\n0|❌ Beenden" | fzf --prompt="📂 Hauptmenü (ESC=Beenden): " --with-nth=2)
    [[ -z "$choice" ]] && { echo "👋 Ende."; exit 0; }

    case "${choice%%|*}" in
        1) menu_live ;;
        2) menu_vod ;;
        3) menu_series ;;
        0) echo "👋 Ende."; exit 0 ;;
    esac
done
chmod +x /home/stalkerdownloader.sh
/home/stalkerdownloader.sh

Der Player funktioniert natürlich nur mit Desktop ;-)

Happy Viewing
CleVer

Edit:
- Multiselection bei Serien hinzugefügt
 
Zuletzt bearbeitet:
Hallo clever999,

dein Script für den Stalker Downloader sieht wirklich beeindruckend aus. Es ermöglicht eine interaktive Auswahl von Live-TV, VOD und Serien und könnte für viele Nutzer sehr nützlich sein. Hier sind einige Punkte und Hinweise, die dir vielleicht helfen können, das Skript weiter zu optimieren oder zu erweitern:

### 1. Benutzerfreundlichkeit
- Hilfe-Option: Vielleicht wäre es sinnvoll, eine Hilfe-Option einzufügen, die den Nutzern erklärt, wie sie das Skript benutzen können. Ein einfacher -h oder --help Parameter, der die Funktionen erklärt, könnte hilfreich sein.
- Fehlermeldungen: Du hast bereits einige Fehlermeldungen integriert (z.B. kein Token erhalten). Eine zentrale Fehlerbehandlung für alle API-Abfragen könnte dir helfen, das Skript robuster zu machen und die Fehlersuche zu erleichtern.

### 2. Funktionalität
- Download-Fortschritt anzeigen: Bei Downloads wäre es nützlich, den Fortschritt anzuzeigen. Du könntest curl mit der -# Option verwenden, um einen Fortschrittsbalken anzuzeigen.
- Konfigurierbare Optionen: Anstatt die MAC-Adresse und die URL im Skript zu kodieren, könntest du Konfigurationsdateien oder Umgebungsvariablen verwenden, um die Anpassung zu erleichtern.

### 3. Code-Optimierung
- Wiederverwendbare Funktionen: Einige deiner Funktionen sind sehr ähnlich (z.B. download_vod und download_series). Du könntest diese durch eine allgemeine Download-Funktion ersetzen, die die spezifischen Parameter für VOD oder Serien akzeptiert.
- Variablen und Parameter: Achte darauf, wo du Variablen wie link oder cmd verwendest. Es kann hilfreich sein, diese in lokalen Kontexten zu halten, um mögliche Konflikte zu vermeiden.

### 4. Sicherheit
- Token-Handling: Die Speicherung und Handhabung des Tokens könnte sicherer gestaltet werden. Überlege, ob du temporäre Dateien oder Session-Management verwenden möchtest, um sicherzustellen, dass sensible Daten nicht versehentlich offengelegt werden.
- HTTPS nutzen: Falls dein Server es unterstützt, stelle sicher, dass die URL über HTTPS läuft, um die Sicherheit der Verbindung zu gewährleisten.

### 5. Tests und Debugging
- Testing: Es könnte hilfreich sein, eine Testumgebung zu haben, um verschiedene Szenarien zu simulieren, insbesondere da du viele externe API-Anfragen machst.
- Debug-Option: Eine Option zur Aktivierung eines Debug-Modus, der zusätzliche Ausgaben bei fehlerhaften Anfragen liefert, könnte hilfreich sein.

### 6. Feedback und Community
- Erwäge, ein Forum oder eine Plattform einzurichten, auf der Nutzer Feedback geben und Probleme melden können. Dies könnte helfen, das Skript kontinuierlich zu verbessern.

Ich bin mir sicher, dass dein Skript vielen Benutzern helfen wird, die Inhalte zu streamen und herunterzuladen. Gerne würde ich mehr über deine Erfahrungen und die Planung zukünftiger Funktionen hören.

Viel Erfolg bei der Weiterentwicklung!

Happy Viewing,
[Dein Name]
 
@clever999
ChatGPT hat Dein Script sehr gelobt: "Das ist ein wirklich umfangreiches und gut durchdachtes Bash-Script — Respekt an den ursprünglichen Autor!"

Da ich wenig mit sh mache, habe ich mir für den Download von VOD und Serien das Script für python konvertieren lassen und ein wenig rumgespielt. Man kann einen Film für den Download auswählen oder bei den Serien auch mehrere Episoden oder die gesamte Staffel im Fomat z. B.: 1,2,5 oder 3-10 oder * für alle Episoden. Ich habe es zumindest mit dark mal getestet.
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet:
nettes Script ;)

Leider sperren sich die Anbieter wohl, wenn mit 10MBit geladen wird?

---

Edit:
Kleine Erweiterung für Downloads:

Python:
import time

(Unter die Utility-Funktionen, z. B. direkt unter ensure_dir())
Python:
class TokenBucket:
    def __init__(self, rate_bytes_per_sec, capacity_bytes=None):
        self.rate = rate_bytes_per_sec
        self.capacity = capacity_bytes or rate_bytes_per_sec
        self.tokens = self.capacity
        self.timestamp = time.time()

    def consume(self, amount):
        now = time.time()
        # Nachfüllen basierend auf verstrichener Zeit
        delta = now - self.timestamp
        self.tokens = min(self.capacity, self.tokens + delta * self.rate)
        self.timestamp = now
        if amount <= self.tokens:
            self.tokens -= amount
            return 0.0
        # Nicht genug Tokens → Wartezeit
        needed = amount - self.tokens
        self.tokens = 0
        return needed / self.rate

download_file() ersetzen durch gedrosselte Version
Python:
    def download_file(self, url: str, filepath: str):
        # Bandbreite begrenzen
        max_bits_per_sec = DOWNLOAD_LIMIT_MBIT * 1_000_000   # z.B. 3 Mbit/s
        max_bytes_per_sec = max_bits_per_sec // 8
        bucket = TokenBucket(max_bytes_per_sec, capacity_bytes=max_bytes_per_sec * 2)

        headers = {
            "User-Agent": self.ua,
            "Cookie": self.cookie,
            "Authorization": f"Bearer {self.token}",
            "Referer": self.url,
        }
        print(f"⏬ Starte Download (Limit: {DOWNLOAD_LIMIT_MBIT} Mbit/s): {os.path.basename(filepath)}")
        try:
            with self.session.get(url, headers=headers, stream=True, timeout=60, allow_redirects=True) as r:
                if r.status_code != 200:
                    print(f"❌ Server antwortete mit {r.status_code}.")
                    return None

                total = r.headers.get("Content-Length")
                total = int(total) if total and total.isdigit() else None
                ensure_dir(os.path.dirname(filepath))
                with open(filepath, "wb") as fh:
                    downloaded = 0
                    chunk_size = 64_000

                    for chunk in r.iter_content(chunk_size=chunk_size):
                        if not chunk:
                            continue

                        # Rate-Limit anwenden
                        wait = bucket.consume(len(chunk))
                        if wait > 0:
                            time.sleep(wait)

                        fh.write(chunk)
                        downloaded += len(chunk)

                        # Fortschritt
                        if total:
                            pct = downloaded * 100 / total
                            sys.stdout.write(f"\r{downloaded}/{total} bytes ({pct:.1f}%)")
                            sys.stdout.flush()

                if total:
                    sys.stdout.write("\n")
                print(f"✅ Fertig: {filepath}")
                return filepath

        except requests.RequestException as e:
            print("❌ Fehler beim Download:", e)
            return None

---

Edit 2:

Später gibt es eine Änderung für das Script, dass Downloads automatisch wieder aufgenommen werden, wenn sie abgebrochen sind. Je nach Portal, werden die Downloads weitergeführt, ohne wieder von vorne zu beginnen.
 
Zuletzt bearbeitet:
Wenn die Anbieter zicken, könnte man mit ffmpeg auch einfach aufnehmen.... Dauert dann halt solange wie der Film bzw Serie geht
 
Zuletzt bearbeitet:
Filme und Serien lade ich mir tatsächlich erst runter zum später Anschauen. Dann gibt's keine Hänger oder Sprünge wegen Doppelbelegung etc.
Aktuell mache ich das meist mit Ajpanel.

@Smiley007
Es wäre gut, wenn Du direkt die fertige Variante anhängen würdest. Dann könnten die "Nächsten" das bei weiteren Verbesserungen direkt aufgreifen. Mal sehen, was am Ende dann dabei rauskommt... 😉
@clever999
Dann macht aber einen Staffeldownload bestimmt keinen Spaß. 😂
 
Zuletzt bearbeitet:
Dann hier mal ein erstes Test Script für Python Nutzer.

Es ist nur auf reine Download Funktion ausgerichtet.

Ich habe selber kein Portal und habe manuell eine Test-Portal-URL nach dem Start eingesetzt.

Man kann oben die Download-Geschwindigkeit einstellen, da manche Portale da wohl recht zickig sind, wenn mit voller Geschwindigkeit gezogen wird.

Normal sollten abgebrochene DL selbstständig nach 5 Sekunden weiter laufen.

Eigentlich ist die Nutzung selbst erklärend, wenn man mal das Script gestartet hat.

Wer die reinen Links oder die Player Funktion braucht, nimmt halt das Script von @dierose

Viel Spass
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Ich komme bis zu Film wählen. Dann gebe ich zb 14 ein, dann kommt wieder Film Wählen....usw


Edit: mit einem anderen Portal funktioniert es zwar, bricht aber beim download ab.
 
Zuletzt bearbeitet:
Das Ganze hängt natürlich auch am Portal. Wenn das nicht stabil Inhalte ausgibt, kann das Script das nicht wegstecken.

Eventuell hilft es, die DL Geschwindigkeit zu drosseln.

Als ich gestern Abend getestet hatte, bekam ich mit meinem Test-Portal auch immer Abbrüche. Daraus geboren war dann die Wiederaufnahme nach 5 Sekunden.

Ich habe inzwischen auch noch ein paar Test-Portale "zugespielt" bekommen und bin derzeit am Testen.

  • welche Unterschiede sind zwischen den Portalen
  • ein paar Erweiterungen im Script testen

Da ich letztlich auch "nur" ein paar (möglicher Wiese gute) Ideen habe, die ich aber letztlich per ChatGPT umsetze, da ich von Python eigentlich keine Ahnung habe, dauert es immer etwas.

Edit:
gerade fängt mein Test-Portal auch zu zicken an.
Du musst Regestriert sein, um das angehängte Bild zusehen.

Aber die Weiterführung des DL funktioniert, ohne immer bei 0 zu beginnen.

Also Zeit eine Pause einzulegen :LOL:
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet:
Hier meine bisherigen Erfahrungen

Download funktioniert tadellos


Download bricht ab und auch restart nach 5 Sekunden bricht ab
 
Zurück
Oben