tehát így néz ki az új script:
#!/bin/sh
# Filmek letöltéséhez használható script
# Paraméterei:
# 1. a file, amiben a letöltendő file-ok URL-jei vannak
# 2. a könyvtár, ahová mentsen (ha nincs megadva, akkor az aktuális könyvtár)
# 3. parancs, amit végrehajt, ha végeztt (pl. halt a számítógép leállításához)
# Eddig működik a következő helyekről: data.hu, rapidshare.com
# Készítette: Sparow2
# http://forum.terminal.hu/profile.php?mode=viewprofile&u=252463
# További info:
# http://forum.terminal.hu/viewtopic.php?t=37165
# http://forum.terminal.hu/viewtopic.php?t=36539
DATA="data.hu"
RAPIDSHARE="rapidshare.com"
OK=0
HIBA=1
DEFTRY=3
#itt adhatod meg a letöltési limitet, az, hogy hol található a lista file és, hogy hova mentsen
LIMIT_RATE="550k"
FILEHELY=
IDE=
# letöltés a data.hu-ról
function get_data {
if ! try "wget -qO \"$TMPFILE\" \"$URL\"" "Ideiglenes állomány letöltése"; then
echo "Ideiglenes állomány letöltése nem sikerült: $URL"
return "$HIBA"
fi
DATAURLSOR=`grep -m 1 "download_it.....href=" "$TMPFILE"`
if [ -z "$DATAURLSOR" ]; then
echo "Nem találom az ideiglenes állományban a linket"
return "$HIBA"
fi
DATAURL=`echo "$DATAURLSOR" | sed -ne 's/^.*href="\([^"]*\)".*$/\1/p'`
if [ -z "$DATAURL" ]; then
echo "Nem találom az URL-t a linkben"
return "$HIBA"
fi
if ! try "wget --limit-rate=\"$LIMIT_RATE\" -cP \"$TARGETDIR\" \"$DATAURL\""; then
echo "Állomány letöltése nem sikerült: $DATAURL"
return "$HIBA"
fi
return "$OK"
}
# letöltés a rapidshare-ről
# ez rekurzív függvény lett, mert elképzelhetőek várakozások
# rövid fileoknál nincs várakozás a Free user gombra kattintva, nagyoknál van
# plusz ha lejárt az ingyenes kvóta, akkor egy hosszabb várakozás is jön
function get_rapidshare {
BURL="$1"
WGETPARAM="$2"
SZOV="${3:-Ideiglenes állomány letöltése}"
if ! try "wget $WGETPARAM -qO \"$TMPFILE\" \"$BURL\"" "$SZOV"; then
echo "Ideiglenes állomány letöltése nem sikerült: $URL"
return "$HIBA"
fi
GOMBSOR=`grep -m 1 "form id=\"ff\" action=" "$TMPFILE"`
KISVAR=`grep -m 1 "Still ' + c + ' seconds" "$TMPFILE"`
NAGYVAR=`grep -m 1 "You have reached the download limit for free-users. Would you like more?" "$TMPFILE"`
DUPLA=`grep -m 1 "Your IP address .* is already downloading a file." "$TMPFILE"`
NOTFOUND=`grep -m 1 "The file could not be found." "$TMPFILE"`
# "Free user" gomb
if [ -n "$GOMBSOR" ]; then
GOMB=`echo "$GOMBSOR" | sed -ne 's/^.*action="\([^"]*\)".*$/\1/p'`
if [ -z "$GOMB" ]; then
echo "Nem találom a \"Free user\" gombot ..."
return "$HIBA"
fi
get_rapidshare "$GOMB" "--post-data='dl.start=Free'" "Free user gomb lenyomására jövő oldal letöltése"
# kis várakozás
elif [ -n "$KISVAR" ]; then
VAR=`grep -m 1 "var c=[[:digit:]]*;" "$TMPFILE" | sed -ne 's/^.*=\([[:digit:]]*\);.*$/\1/p'`
LINK=`grep -m 1 "input checked" "$TMPFILE" | sed -ne 's/^.*document.dlf.action=\\\\'\''\([^\\\\]*\)\\\\.*$/\1/p'`
if [ -z "$VAR" ]; then
echo "Nem találom a rövid várakozás idejét ..."
return "$HIBA"
fi
if [ -z "$LINK" ]; then
echo "Nem találom a linket ..."
return "$HIBA"
fi
# rövid várakozás
varakozas "$VAR"
# letöltés (a rapidshare-n nem lehet folytatni a félbeszakadt letöltést)
# ezért megvizsgáljuk, hogy a file teljesen megvan-e, ha nem, akkor letöltjük újra
if teljes "$TARGETDIR" "$LINK"; then
echo "A file már le volt töltve, nem töltöm le újra: $LINK"
return "$OK"
fi
if ! try "wget --limit-rate=\"$LIMIT_RATE\" -P \"$TARGETDIR\" \"$LINK\""; then
echo "Állomány letöltése nem sikerült: $LINK"
return "$HIBA"
fi
# nagy várakozás
elif [ -n "$NAGYVAR" ]; then
VAR=`grep -m 1 "Or try again in about [[:digit:]]* minutes." "$TMPFILE" | sed -ne 's/^.*about \([[:digit:]]*\) .*$/\1/p'`
if [ -z "$VAR" ]; then
echo "Nem találom a hosszú várakozás idejét!"
return "$HIBA"
fi
VAR=`expr "$VAR" "*" 60`
# hosszú várakozás
varakozas "$VAR"
get_rapidshare "$BURL" "$WGETPARAM" "$SZOV"
# hibás link, vagy már törölték
elif [ -n "$NOTFOUND" ]; then
echo "A file nem található. Hibás a link, vagy már törölték: $BURL"
return "$HIBA"
# már töltünk le erről az IP címről, kilépés
elif [ -n "$DUPLA" ]; then
IPADDR=`echo "$DUPLA" | sed -ne 's/^.*address //' -e 's/ is.*$//p'`
echo "Erről az IP címről ($IPADDR) már töltünk le. A másik töltés befejeződése után újra el lehet indítani ezt."
exit "$HIBA"
# hiba, nem lekezelt ág, kilépés
else
echo "get_rapidshare nem lekezelt ág: $TMPFILE"
# ideiglenes megoldás ----------------------------------------------------------
# exit "$HIBA"
varakozas 60
get_rapidshare "$BURL" "$WGETPARAM" "$SZOV"
# ideiglenes megoldás ----------------------------------------------------------
fi
}
# Megvizsgáljuk, hogy egy file le van-e töltve teljesen
# Paraméterek: 1. directory, ahová menteni kell
# 2. URL, ahonnét tölteni kell
# Visszatérési érték: $OK = le van töltve, $HIBA = nincs letöltve
function teljes {
DIR="$1"
URL="$2"
# header lekérése
echo -n "Header lekérése ... "
if ! try "wget -S --spider \"$LINK\" 2>\"$TMPFILE\""; then
echo "nem sikerült."
return "$HIBA"
fi
echo "sikerült."
# a filenév
#ez volt eredetileg FNEV=`sed -ne 's/^ *=> \`\([^'\'']*\)'\''.*$/\1/gp' "$TMPFILE"`
FNEV=`sed -e '2!d' -e 's/^ *=> *//g' -e 's/\`//g' -e 's/'\''.*$//g' -e 's@^.*/@@g' "$TMPFILE"`
if [ -z "$FNEV" ]; then
# nem találja a filenevet, letöltjük újra
echo "Nem találom a filenevet!"
return "$HIBA"
fi
PFNEV="$DIR/$FNEV"
if [ ! -e "$PFNEV" ]; then
# nem létezik a file, le kell tölteni
return "$HIBA";
fi
# a file-t más használja, kilépés
if lsof -- "$PFNEV" >/dev/null 2>&1; then
echo "A file-t más is használja: $PFNEV"
exit 1
fi
# a file mérete byte-ban
LEN=`sed -ne 's/^ *content-length *: *//gpi' "$TMPFILE"`
if [ -z "$LEN" ]; then
echo "Nem találom a file hosszát!"
return "$HIBA"
fi
# a meglévő file mérete byte-ban
FHOSSZ=`ls -l "$PFNEV" | sed -ne 's/^[^ ]* *[^ ]* *[^ ]* *[^ ]* *//' -e 's/ .*$//p;q'`
if [ "$LEN" -eq "$FHOSSZ" ]; then
# teljes hosszan le van töltve, nem kell letölteni
return "$OK"
fi
# a file létezik, de nem teljesen volt letöltve
rm -f "$PFNEV"
return "$HIBA"
}
# Várkozás
# Paraméterek: 1. a várakozás ideje másodpercben
# 2. ahol éppen járunk (híváskor nem kell megadni)
function varakozas {
MAX="${1:-0}"
IDO="${2:-0}"
echo -ne "\rVárakozás $IDO/$MAX mp ..."
if [ "$IDO" -ge "$MAX" ]; then
echo ""
return
fi
sleep 1
varakozas "$MAX" "`expr \"$IDO\" + 1`"
}
# Parancsot próbál végrehajtani
# Paraméterek: 1. a végrehajtandó parancs
# 2. kiírandó szöveg (default üres, és nem ír ki semmit)
# 2. ennyiszer próbálkozik maximum (default $DEFTRY)
# 3. ennyiedik próbálkozás (ezt nem kell átadni, csak a rekurzió miatt kell)
function try {
PARANCS="$1"
SZOVEG="$2"
MAXDB="${3:-$DEFTRY}"
DB="${4:-1}"
if [ -n "$SZOVEG" ]; then
echo "$SZOVEG ($DB / $MAXDB) ... "
fi
if eval "$PARANCS"; then
return "$OK"
fi
if [ "$DB" -lt "$MAXDB" ]; then
try "$PARANCS" "$SZOVEG" "$MAXDB" "`expr \"$DB\" + 1`"
else
return "$HIBA"
fi
}
if [ $# -lt 1 ]; then
echo "A script használata:"
echo "`basename \"$0\"` lista_file [mentési_könyvtár] [parancs]"
exit "$HIBA"
fi
URLFILE="$FILEHELY$1"
if [ ! -r "$URLFILE" ]; then
echo "Az állományt nem tudom olvasni: \"$URLFILE\""
exit "$HIBA"
fi
echo $URLFILE
TARGETDIR="${2:-$IDE}"
if [ ! -d "$TARGETDIR" ]; then
echo "A könyvtár nem létezik: \"$TARGETDIR\""
exit "$HIBA"
elif [ ! -r "$TARGETDIR" -o ! -w "$TARGETDIR" -o ! -x "$TARGETDIR" ]; then
echo "A könyvtárra nincs meg az olvasás, írás és keresés jogosultság: \"$TARGETDIR\""
exit "$HIBA"
fi
COMMAND="$3"
TMPFILE=`mktemp -q -t get_files.XXXXXXXX`
if [ -z "$TMPFILE" ]; then
echo "Ideiglenes állomény létrehozása nem sikerült"
exit "$HIBA"
fi
echo "Filmletöltés a \"$TARGETDIR\" könyvtárba."
shopt -s nocasematch
for URL in `grep -i "http://" "$URLFILE"`; do
echo "-----------------------------------------------------------------------"
echo "Lekérés: $URL"
SERVER=`echo "$URL" | sed -e 's@^.*http://@@' -e 's@/.*$@@'`
case "$SERVER" in
"$DATA") get_data;;
"$RAPIDSHARE") get_rapidshare "$URL";;
*) echo "Nem implementált szerver: \"$SERVER\"";;
esac
done
rm -f "$TMPFILE"
# ha volt parancs a befejés után, akkor végrehajtjuk
if [ -n "$COMMAND" ]; then
eval "$COMMAND"
fi