Aquesta és una revisió antiga del document —-
procesa descargas
objetivo
crear un método para gestionar la descarga de los ficheros .torrent, desde el fichero .torrent hasta el fichero final, automatizando en todo lo posible el proceso
método
- esta parte indica la URL del site (conseguida a través del lector RSS) donde encontraremos el fichero .torrent (no el .torrent directamente) para descargarlo y proceder a su subida en el servidor externo con rTorrent, donde se procederá a su descarga
- la parte de sincronización entre el servidor y la raspberry (mediante
rsync) - el proceso de los ficheros descargados ya en local (desde la raspberry) y su «normalización» (incluso extracción si están comprimidos)
1
- newpct+down+scp+pass+kde.sh
#!/bin/bash # versiones # PTE cambiar variable URL_TMP pot URL2 directamente # # 5.8 informar solo en caso de error del log de intento de conexión, si no, dar OK en popup emergente # 5.7 modificación para nuevas URLs de tumejortorrent.com # han modificado la ubicación de la URL (ahora está en una función llamada OpenTorrent), pero la detección sigue funcionando igual # OK en sentencias IF, hacer que reconozca el patrón http://*<loquesea>/<loquesea>/*, las pruebas realizadas no reconocen el primer * > ^http://.*<loquesea>/<loquesea>/* # 5.6 añadido soporte para las URLs de torrentrapid.com # torrentrapid.com = torrentlocura.com = tumejortorrent.com ==> tumejorjuego.com # 5.5 añadido soporte para las URLs de torrentlocura.com # 5.4.1 realizadas modificaciones para reconocer contraseñas del site "torrentlocura.com". # > No funciona pq la gente de "tumejortorrent.com" 'sablean' a los de "torrentlocura.com", de manera que en el primer site no aparece la contraseña de descarga. # 5.4 realizadas modificaciones para aceptar la URL a través de parámetro además de por el diálogo # # 5.3 cambio de ficheros temporales a variables en memoria para procesamiento de URL # 5.2 modificación para nuevas URL de tumejortorrent # 5.1 añadida opción de ACTIVA_GUI, para desactivar si necesario las salidas por KDE # 5.0 integración con KDE # las contraseñas se guardan en fichero dentro del DIR_PASS # 4.2 recuperación de contraseña # versiones anteriores sin comentarios # retales, mate, 03/10/2016 # https://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs # http://www.linux-magazine.com/var/linux_magazin/storage/images/linux-magazine.com/issues/2009/99/shell-click/table2.png/428127-1-eng-US/table2.png_reference.png # https://mostlylinux.wordpress.com/bashscripting/kdialog/ # https://forum.kde.org/viewtopic.php?f=66&t=135037 (ejemplo con fichero de apoyo para la generación de la ventana en KDE) # pruebas de conversación entre KDE y BASH # kdialog --password "Please enter the server access code:" 2>/dev/null # # FUNCIONES # function aleatorio { if [ "$NOMBRE" == "" ]; then NOMBRE=$(apg -a 0 -n 1 -q -MC -m 8); fi } ACTIVA_GUI=1 # puesto a 0 no muestra salidas información por GUI escritorio SALIDA_BUCLE=0 # bucle general (salida en modo CLI) CODIGO_SALIDA=0 # establecido a 0 para salida OK, a 1 para salida KO PARAMETROS=$# # recogida de parámetros de entrada MOSTRAR_LOG=0 # fuerza mostrar en GUI el log de acciones del script aunque ACTIVA_GUI=0 CODIGOS_ERROR=0 # recoje los códigos de retorno de WGET y SCP para determinar si se ha realizado con éxito la transferencia, # y evitar que muestre el LOG si no es necesario DIR_TORRENT="/media/mate/WD2-3TB-EXT4/__VIDEO/4.torrent/" SSH_KEY="/home/mate/.ssh/user@seedbox.torresegea.es" REMOTE_LOGIN="user@seedbox.torresegea.es" REMOTE_DIR_TORRENT="/home/user/torrent" DIR_PASS="/media/mate/WD2-3TB-EXT4/__VIDEO/0.PROCESAR/" APP_NAME="Torrent Downloader v5.8" export DISPLAY=:0.0 while [ $SALIDA_BUCLE -eq 0 ] ; do if [[ $PARAMETROS -ge 1 && ! -z "$1" ]]; then URL=$1 SALIDA_BUCLE=1 ACTIVA_GUI=0 MOSTRAR_LOG=1 else if [ $ACTIVA_GUI -eq 1 ]; then sleep .3 URL=$(kdialog --title "$APP_NAME" --inputbox "Introduce la URL" 2>/dev/null) else read -p "$APP_NAME (vacío acaba)> " URL fi if [ $? != 0 ]; then echo "saliendo...." exit fi fi if [ "$URL" != "" ]; then # extrae el nombre del futuro archivo .torrent NOMBRE=$(echo ${URL//\//_} | cut -d "_" -f 5-8) aleatorio # si no, nos inventamos uno wget -O /tmp/url.tmp $URL > /tmp/text.tmp 2>&1 # causística para tumerjortorrent.com if [[ "$URL" =~ ^http://.*tumejortorrent.com* ]]; then COUNTER_LOOP=3 while [ $COUNTER_LOOP -ge 0 ]; do case $COUNTER_LOOP in 0) # v1 URL #URL_TMP=$(grep -o 'http://tumejorjuego.com/redirect/index.php?link=descargar-torrent/.*/"' /tmp/url.tmp | tee /tmp/url2.tmp) URL_TMP=$(grep -o 'http://tumejorjuego.com/redirect/index.php?link=descargar-torrent/.*/"' /tmp/url.tmp) [ -n "$URL_TMP" ] && URL_TMP=${URL_TMP::-1} # eliminamos último caracter ("), si hay algo que quitar ;; 1) # v2 URL #URL_TMP=$(grep -o 'http://tumejorjuego.com/download/index.php?link=descargar-torrent/.*html' /tmp/url.tmp | tee /tmp/url2.tmp) URL_TMP=$(grep -o 'http://tumejorjuego.com/download/index.php?link=descargar-torrent/.*html' /tmp/url.tmp) ;; 2) # v3 URL #URL_TMP=$(grep -o 'http://www.tumejortorrent.com/descargar-torrent/.*/"' /tmp/url.tmp | tee /tmp/url2.tmp) URL_TMP=$(grep -o 'http://www.tumejortorrent.com/descargar-torrent/.*/"' /tmp/url.tmp) [ -n "$URL_TMP" ] && URL_TMP=${URL_TMP::-1} # eliminamos último caracter ("), si hay algo que quitar ;; 3) # v4 URL URL_TMP=$(grep -o 'http://tumejorjuego.com/download/tumejortorrent.php?link=descargar-torrent/.*/' /tmp/url.tmp) ;; esac [ -z "$URL_TMP" ] && COUNTER_LOOP=$[COUNTER_LOOP-1] || COUNTER_LOOP=-1 done fi # causística para newpct.com if [[ "$URL" =~ ^http://www.newpct.com* ]]; then #URL_TMP=$(grep -o 'http://tumejorserie.com/descargar/index.php?link=torrents/.......torrent' /tmp/url.tmp | tee /tmp/url2.tmp) URL_TMP=$(grep -o 'http://tumejorserie.com/descargar/index.php?link=torrents/.......torrent' /tmp/url.tmp) fi # causística para torrentlocura.com if [[ "$URL" =~ ^http://torrentlocura.com* ]]; then URL_TMP=$(grep -o 'http://tumejorjuego.com/redirect/torrentlocura.php?link=descargar-torrent/.*/"' /tmp/url.tmp) [ -n "$URL_TMP" ] && URL_TMP=${URL_TMP::-1} # eliminamos último caracter ("), si hay algo que quitar fi # causística para torrentrapid.com if [[ "$URL" =~ ^http://torrentrapid.com* ]]; then URL_TMP=$(grep -o 'http://tumejorjuego.com/redirect/torrentrapid.php?link=descargar-torrent/.*/"' /tmp/url.tmp) [ -n "$URL_TMP" ] && URL_TMP=${URL_TMP::-1} # eliminamos último caracter ("), si hay algo que quitar fi # procesa url #URL2=$(cat /tmp/url2.tmp) URL2=$URL_TMP # descarga el torrent wget $URL2 -O $DIR_TORRENT$NOMBRE.torrent >> /tmp/text.tmp 2>&1 CODIGOS_ERROR_TEMP=$? CODIGOS_ERROR=$[CODIGOS_ERROR+CODIGOS_ERROR_TEMP] # subir el torrent al servidor de descargas scp -i $SSH_KEY $DIR_TORRENT$NOMBRE.torrent $REMOTE_LOGIN:$REMOTE_DIR_TORRENT >> /tmp/text.tmp 2>&1 CODIGOS_ERROR_TEMP=$? CODIGOS_ERROR=$[CODIGOS_ERROR+CODIGOS_ERROR_TEMP] # mira si tiene contraseña if [[ "$URL" =~ ^http://*tumejortorrent.com* ]] || [[ "$URL" =~ ^http://torrentlocura.com* ]] || [[ "$URL" =~ ^http://torrentrapid.com* ]] ; then grep -o '<input type="text" id="txt_password" name="txt_password" value=".*"' /tmp/url.tmp > /tmp/pass.tmp PASS=$(cat /tmp/pass.tmp | tr -d "\"" | awk '{print $5}' | tr -s '=' ' ' | awk '{print $2}') if [[ "$PASS" == "" && $CODIGOS_ERROR -eq 0 ]]; then echo "Descarga sin contraseña" if [ $ACTIVA_GUI -eq 1 ]; then kdialog --title "$APP_NAME" --passivepopup "Descarga sin contraseña" 5 fi fi if [[ "$PASS" != "" && $CODIGOS_ERROR -eq 0 ]]; then echo "DESCARGA CON CONTRASEÑA, ANÓTALA: $PASS" if [ $ACTIVA_GUI -eq 1 ]; then kdialog --title "$APP_NAME" --passivepopup "Esta descarga contenía contraseña: $PASS" 10 fi touch "$DIR_PASS$NOMBRE = $PASS" fi fi unset NOMBRE unset URL2 unset PASS unset CODIGOS_ERROR_TEMP if [[ $ACTIVA_GUI -eq 1 || $MOSTRAR_LOG -eq 1 ]]; then if [[ $CODIGOS_ERROR -ne 0 || $MOSTRAR_LOG -eq 1 ]]; then kdialog --error "error subiendo .torrent" kdialog --title "$APP_NAME" --textbox /tmp/text.tmp 1024 636 & else kdialog --title "$APP_NAME" --passivepopup ".torrent subido correctamente" 5 fi fi CODIGOS_ERROR=0 else CODIGO_SALIDA=1 if [ $ACTIVA_GUI -eq 1 ]; then kdialog --title "$APP_NAME" --sorry "la URL está vacía" 2>/dev/null fi fi done exit $CODIGO_SALIDA
2
3
- procesar.sh
#!/bin/bash -x # # VARIABLES GLOBALES # DIR_ORIGEN="/media/mate/WD2-3TB-EXT4/__VIDEO/0.PROCESAR" DIR_DESTINO="/media/mate/WD2-3TB-EXT4/__VIDEO/1.VISUALIZAR" FICHERO_IGNORE=".ignore" UNRAR="/usr/bin/unrar" ESRAR="0" # # FUNCIONES # function mirarCarpeta() { CARPETA=$1 if [ ! -e "$CARPETA/$FICHERO_IGNORE" ]; then mirarRARenCarpeta "$CARPETA" mirarFicherosCarpeta "$CARPETA" # else # echo "Carpeta Ignorada: ${CARPETA##*/}" # echo "+++" fi } function mirarRARenCarpeta() { # prueba a descomprimir un RAR (por si no lleva contraseña) CARPETA=$1 NOMBRE_CARPETA=${CARPETA##*/} for fichero in "$CARPETA"/* ; do NOMBRE_FICHERO=${fichero##*/} EXTENSION=${NOMBRE_FICHERO##*.} if [ "$EXTENSION" == "rar" ]; then ESRAR="1" LLEVA_PASS=$($UNRAR l "$fichero" | grep \*) # mirar la lista de archivos, si aparece un * es que está encriptado if [ "$LLEVA_PASS" == "" ]; then # no lleva contraseña $UNRAR e "$fichero" "$CARPETA" if [ "$?" == "0" ]; then rm "$fichero" rm "$CARPETA"/*.url rm "$CARPETA"/*.txt fi else touch "$CARPETA"/LLEVA_PASS! fi fi done } function mirarFicherosCarpeta { CONTADOR=0 # si una carpeta contiene más de un fuchero de video, añadirle un numerador para evitar peder el fichero en el MV CARPETA=$1 NOMBRE_CARPETA=${CARPETA##*/} # echo "$NOMBRE_CARPETA" # se podría usar for fichero in "$CARPETA"/.mkv "$CARPETA"/.avi ; do ??? # habría que mirar de ordenarlos antes de renombrarlos para que conserven el orden # o igual dejarlos con el nombre original para hacerlo a mano for fichero in "$CARPETA"/* ; do NOMBRE_FICHERO=${fichero##*/} EXTENSION=${NOMBRE_FICHERO##*.} if [ "$EXTENSION" == "mkv" -o "$EXTENSION" == "avi" ]; then ORIGEN="$fichero" if [ $CONTADOR -eq 0 ]; then DESTINO="$DIR_DESTINO/$NOMBRE_CARPETA.$EXTENSION" else DESTINO="$DIR_DESTINO/$NOMBRE_CARPETA.$CONTADOR.$EXTENSION" fi # echo -e "Origen: $ORIGEN\n" # echo -e "Destino: $DESTINO\n" mv "$ORIGEN" "$DESTINO" # borrarCarpetaVacia "$CARPETA" CONTADOR=$((CONTADOR + 1)) fi if [ "$ESRAR" == "0" ]; then rm "$CARPETA"/*.txt fi # echo "contador: $CONTADOR" done # echo "+++" } # # MAIN # for carpeta in $DIR_ORIGEN/* do if [ -d "$carpeta" ]; then ESRAR="0" mirarCarpeta "$carpeta" # else # echo "no directorio: $carpeta" fi done # elimina las carpetas vacías find "$DIR_ORIGEN" -mindepth 1 -type d -empty -delete
OLD
- procesa.sh
#!/bin/bash # # VARIABLES GLOBALES # DIR_ORIGEN="/media/WD1-3TB-EXT4/__VIDEO/0.REVISAR" DIR_DESTINO="/media/WD1-3TB-EXT4/__VIDEO/1.DOWNLOADED" FICHERO_IGNORE=".ignore" # # FUNCIONES # function mirarCarpeta() { CARPETA=$1 if [ ! -e "$CARPETA/$FICHERO_IGNORE" ]; then mirarFicherosCarpeta "$CARPETA" else echo "Carpeta Ignorada: ${CARPETA##*/}" echo "+++" fi } function mirarFicherosCarpeta { CONTADOR=0 # si una carpeta contiene más de un fuchero de video, añadirle un numerador para evitar peder el fichero en el MV CARPETA=$1 NOMBRE_CARPETA=${CARPETA##*/} echo "$NOMBRE_CARPETA" # se podría usar for fichero in "$CARPETA"/.mkv "$CARPETA"/.avi ; do ??? for fichero in "$CARPETA"/* ; do NOMBRE_FICHERO=${fichero##*/} EXTENSION=${NOMBRE_FICHERO##*.} if [ "$EXTENSION" == "mkv" -o "$EXTENSION" == "avi" ]; then ORIGEN="$fichero" if [ $CONTADOR -eq 0 ]; then DESTINO="$DIR_DESTINO/$NOMBRE_CARPETA.$EXTENSION" else DESTINO="$DIR_DESTINO/$NOMBRE_CARPETA.$CONTADOR.$EXTENSION" fi echo -e "Origen: $ORIGEN\n" echo -e "Destino: $DESTINO\n" mv "$ORIGEN" "$DESTINO" # borrarCarpetaVacia "$CARPETA" fi CONTADOR=$((CONTADOR + 1)) echo "contador: $CONTADOR" done echo "+++" } function borrarCarpetaVacia { # esta función no se ejecuta # no he encontrado una manera de comprobar si un directorio está vacío # se utiliza un FIND al final del bucle de carpetas para eliminar las vacías CARPETA=$1 if [ -s "$CARPETA" ]; then echo "existe y no está vacío" else echo "no existe o está vacío?" fi } # # MAIN # for carpeta in $DIR_ORIGEN/* do if [ -d "$carpeta" ]; then mirarCarpeta "$carpeta" else echo "no directorio: $carpeta" fi done # elimina las carpetas vacías find "$DIR_ORIGEN" -mindepth 1 -type d -empty -delete