Download Script uploaded.to

Download Script uploaded.to

Als ich vor kurzem eine große Anzahl von Dateien, die auf uploaded.net veröffentlicht wurden, für einen Freund ohne Premium Account auf meinem Server bereitstellen wollte, suchte ich nach einem komfortablen Weg diese auf meinem Server herunter zu laden. Die gängigsten Methoden für solche Massen-Downloads von One-Click-Hostern sind sicherlich die bekannten Programme pyload.org und jDownloader2. Diese hatten mir aber viel zu viele Abhängigkeiten (jDownloader2 benötigt sogar eine Desktop Umgebung oder etwas Bastelarbeit), welche nur den Wartungsaufwand meines Servers erhöhen. Daher suchte ich nach einem einfacheren Weg und fand diesen auch.

Jan Philip Gehrke hat ein kleines Bash Script veröffentlicht, mit welchem das herunterladen von vielen Dateien bei uploaded.net sehr komfortabel aus dem Terminal heraus funktioniert. Es nutzt nur Standardprogramme die auf jedem Linux und Mac vorhanden sein sollten (wget, grep, sed, mktemp).

Die Ausführung ist denkbar einfach. Man gibt im Script die Logindaten seines uploaded.net-Accounts ein und startet das Script, in dem man beim Start eine Textdatei mit den gewünschten Links übergibt. Die Daten landen dann im selben Verzeichnis in dem das Script ausgeführt wird.

/bin/sh download.sh urls.txt

In der Textdatei müssen die gewünschten Links in Zeilen untereinander stehen, wie im folgen Beispiel:

http://uploaded.net/file/98283023/foo.rar
http://uploaded.net/file/gavzlinm/bar.rar
http://uploaded.net/file/sd2143km/not.zip

Das Script funktioniert wie folgt: Als erstes wird die Login-Seite aufgerufen, mit den im Script geschriebenen Login-Daten und der Authentifiction-cookie in eine Datei gespeichert. Dann werden die Links heruntergeladen, wobei wget dann den Authentifiction-cookie nutzt um einen Premium Download auszuführen.

Hier das Script:

#!/bin/sh
# Copyright 2015 Jan-Philip Gehrcke, http://gehrcke.de
# See http://gehrcke.de/2015/03/uploaded-to-download-with-wget/
 
 
USERNAME="user"
PASSWORD="password"
 
 
if [ "$#" -ne 1 ]; then
    echo "Missing argument: URLs file (containing one URL per line)." >&2
    exit 1
fi
 
 
URLSFILE="${1}"
if [ ! -r "${URLSFILE}" ]; then
    echo "Cannot read URLs file ${URLSFILE}. Exit." >&2
    exit 1
fi
if [ ! -s "${URLSFILE}" ]; then
    echo "URLs file is empty. Exit." >&2
    exit 1
fi
 
 
TMPDIR="$(mktemp -d)"
# Install trap that removes the temporary directory recursively
# upon exit (except for when this program retrieves SIGKILL).
trap 'rm -rf "$TMPDIR"' EXIT
 
 
LOGINRESPFILE="${TMPDIR}/login.response"
LOGINOUTPUTFILE="${TMPDIR}/login.outerr"
COOKIESFILE="${TMPDIR}/login.cookies"
LOGINURL="http://uploaded.net/io/login"
 
 
echo "Temporary directory: ${TMPDIR}"
echo "Log in via POST request to ${LOGINURL}, save cookies."
wget --save-cookies=${COOKIESFILE} --server-response \
    --output-document ${LOGINRESPFILE} \
    --post-data="id=${USERNAME}&pw=${PASSWORD}" \
    ${LOGINURL} > ${LOGINOUTPUTFILE} 2>&1
 
# Status code is 200 even if login failed.
# Uploaded sends a '{"err":"User and password do not match!"}'-like response
# body in case of error.
 
echo "Verify that login response is empty."
# Response is more than 0 bytes in case of login error.
if [ -s "${LOGINRESPFILE}" ]; then
    echo "Login response larger than 0 bytes. Print response and exit." >&2
    cat "${LOGINRESPFILE}"
    exit 1
fi
 
# Zero response size does not necessarily imply successful login.
# Wget adds three commented lines to the cookies file by default, so
# set cookies should result in more than three lines in this file.
COOKIESFILELINES="$(cat ${COOKIESFILE} | wc -l)"
echo "${COOKIESFILELINES} lines in cookies file found."
if [ "${COOKIESFILELINES}" -lt "4" ]; then
    echo "Expected >3 lines in cookies file. Exit.". >&2
    exit 1
fi
 
echo "Process URLs."
# Assume that login worked. Iterate through URLs.
while read CURRENTURL; do
    if [ "x$CURRENTURL" = "x" ]; then
        # Skip empty lines.
        continue
    fi
    echo -e "\n\n"
    TMPFILE="$(mktemp --tmpdir=${TMPDIR} response.html.XXXX)"
    echo "GET ${CURRENTURL} (use auth cookie), store response."
    wget --no-verbose --load-cookies=${COOKIESFILE} \
        --output-document ${TMPFILE} ${CURRENTURL}
 
    if [ ! -s "${TMPFILE}" ]; then
        echo "No HTML response: ${TMPFILE} is zero size. Skip processing."
        continue
    fi
 
    # Extract (temporarily valid) download URL from HTML.
    LINEOFINTEREST="$(grep post ${TMPFILE} | grep action | grep uploaded)"
    # Match entire line, include space after action="bla" , replace
    # entire line with first group, which is bla.
    DLURL=$(echo $LINEOFINTEREST | sed 's/.*action="\(.\+\)" .*/\1/')
    echo "Extracted download URL: ${DLURL}"
    # This file contains account details, so delete as soon as not required
    # anymore.
    rm -f "${TMPFILE}"
    echo "POST to URL w/o data. Response is file. Get filename from header."
    # --content-disposition should extract the proper filename.
    wget --content-disposition --post-data='' "${DLURL}"
done < "${URLSFILE}"
© teilzeitrebell.de Impressum