Autore Topic: script per scaricare webcomic  (Letto 744 volte)

Buntolo

  • Visitatore
script per scaricare webcomic
« il: Novembre 16, 2010, 12:34:12 pm »
Voglio scaricarmi tutte le striscie di Dilbert, XKCD e C&H....C'era uno del forum che aveva fatto uno script per salvare tutte quelle di C&H...

Dilbert è iniziato nell'89 e c'è una striscia al giorno o giù di lì

sgnablo

  • Visitatore
Re:script per scaricare webcomic
« Risposta #1 il: Novembre 16, 2010, 01:28:14 pm »
quelli per xkcd e per c&h li ho già  realizzati, quello per Dilbert dovrei guardarci sopra, ma non so se oggi ho tempo :D

C&H:

Codice: [Seleziona]
#!/bin/bash
<<\COMMENT
Script che scarica su una cartella scelta tutte le strisce di cyanide and happiness.
Si può usare anche una volta completato, per scaricare le nuove strisce eventualmente inserite nel sito. basta riavviare lo script
e fa tutto da solo.
made by sgnablo, rilasciato con licenza GPL (fateci un po' quello che volete :D )

COMMENT


#params
## impostare la directory su cui andare a scaricare le strisce (se non esiste viene creata automaticamente)
## esempio:
DIR="/media/DATA/Documenti/Fun/C_and_H/strip"

if [ ! -d "$DIR" ];then
mkdir -p "$DIR" #se non esiste già , crea la cartella in cui verranno inserite le strisce
fi

check=1
cifre=5  # numero di cifre che verranno usate per numerare le strip (5 in tutto, zeri a sinistra compresi)
workdir="$PWD"

if [ -z $1 ];then
start="new"
else
test=$(echo $1 | sed 's/[^0-9]//g')
if [ -z $test ];then
echo "passare solo numeri!"
exit 1
else
start=$1
fi
fi
wget -q "http://www.explosm.net/comics/$start/" ##se il download si blocca o restituisce "file esistente" quando non ha ragionevolmente
#finito, passare come parametro allo script il numero all'inizio del nome della striscia.
#ES: ./C_and_H_fetcher.sh 456

site=$(cat index.html)
temp=$(echo "$site" | grep URL= | sed 's/URL="/\
/; s%/URL.*%%' | tail -n 1 ) #ottengo la riga con solo il numero e il link della striscia
number=$(echo $temp | sed 's/IMG.*//;s/[^0-9]//g') #ricava il numero della striscia, senza errori
#echo $number
link=$(echo $temp | sed 's/.*\[IMG\]//; s/\[.*//') #link all'immagine
strip=$(basename $link) #ottengo il nome dell'ultima immagine presente nel blog
prev_url=$(echo "http://www.explosm.net"$(echo $site | grep "Previous" | sed 's/">< Previous.*//g; s/.*href="//g')) #link alla pagina precedente

rm index.html

cd $DIR #vado nella cartella delle strip
#salvataggio della strip più recente
if [ -e *"$number""_""$strip" ];then
echo "File esistente"
exit 1
else
counter=`printf %0"$cifre"d $number`
ord_strip=$(echo $counter"_""$strip")
wget -q $link -O "$ord_strip" ##&& zenity --info --text="$strip scaricato ed aggiunto in $DIR"  #decommentare la parte a sinistra se si vuole che per ogni striscia si abbia una finestrella di notifica
fi

#loop che scarica tutte le strisce precedenti (se becca una già  presente, si ferma)
while [ $check == 1 ];do
cd $workdir
if [ "$prev_url" == "http://www.explosm.net" ];then
echo "Raggiunta l'ultima striscia, download completo"
check=0 #può uscire dopo l'ultimo loop
else
wget -q $prev_url -O prevurl #scarico la pagina precedente
site=$(cat prevurl)
temp=$(echo "$site" | grep URL= | sed 's/URL="/\
/; s%/URL.*%%' | tail -n 1 ) #ottengo la riga con solo il numero e il link della striscia
number=$(echo $temp | sed 's/IMG.*//;s/[^0-9]//g') #ricava il numero della striscia, senza errori
#echo $number
link=$(echo $temp | sed 's/.*\[IMG\]//; s/\[.*//') #link all'immagine
strip=$(basename $link) #ottengo il nome dell'ultima immagine presente nel blog
prev_url=$(echo "http://www.explosm.net"$(echo $site | grep "Previous" | sed 's/">< Previous.*//g; s/.*href="//g')) #link alla pagina precedente

rm prevurl

cd $DIR #vado nella cartella delle strip

if [ -e *"$number""_""$strip" ];then
echo "File esistente" #se la striscia è già  presente (in base al numero)
check=0 #termino il loop
exit 1
else
counter=`printf %0"$cifre"d $number`
ord_strip=$(echo $counter"_""$strip")
wget -q $link -O "$ord_strip" ##&& zenity --info --text="$strip scaricato ed aggiunto in $DIR" #decommentare la parte a sinistra se si vuole che per ogni striscia si abbia una finestrella di notifica
fi
fi
done

XKCD (oltre alla strip salva anche un file di testo con l'alternate text dell'immagine):

Codice: [Seleziona]
#!/bin/bash
<<\COMMENT
Script che scarica su una cartella scelta tutte le strisce di xkcd.
Si può usare anche una volta completato, per scaricare le nuove strisce eventualmente inserite nel sito. basta riavviare lo script
e fa tutto da solo.
made by sgnablo, rilasciato con licenza GPL (fateci un po' quello che volete :D )

COMMENT


#params
## impostare la directory su cui andare a scaricare le strisce (se non esiste viene creata automaticamente)
## esempio:
DIR="/media/DATA/Documenti/Fun/xkcd/strip"

if [ ! -d "$DIR" ];then
mkdir -p "$DIR" #se non esiste già , crea la cartella in cui verranno inserite le strisce
fi


check=1
cifre=5  # numero di cifre che verranno usate per numerare le strip (5 in tutto, zeri a sinistra compresi)
workdir="$PWD"

if [ -z $1 ];then
start=""
else
test=$(echo $1 | sed 's/[^0-9]//g')
if [ -z $test ];then
echo "passare solo numeri!"
exit 1
else
start="/"$1"/"
fi
fi
wget -q "http://xkcd.com""$start" #scarico la pagina, se viene passato un numero allo strip viene usato come pagina iniziale da cui scaricare a ritroso
temp=$(cat index.html | grep '<img src="http://imgs.xkcd.com/'| grep  'title' )

alt_text=$(echo $temp | sed 's/<img src="/\
src=/; s/title=/\
title=/; s/alt=/\
alt=/' | grep title | sed 's/title="//; s/"//' | sed "s/'/'/g; s/&lt;/</g; s/&gt;/>/g") #ottengo il testo alternativo della striscia

number=$(cat index.html | grep 'Permanent link' | sed 's%.*http://xkcd.com/%%; s%/</h3>%%') #ricava il numero della striscia, senza errori
#echo $number
link=$(cat index.html | grep -i hotlinking | sed -e 's\<h3>Image URL (for hotlinking/embedding): \\g' -e 's\</h3>\\g')
strip=$(basename $link) #ottengo il nome dell'ultima immagine presente nel blog
if [ $(($number -1 )) -eq 404 ];then
echo "La pagina numero 404 non è presente nel sito (richiamo all'ovvio errore di page not found), salto alla precedente.."
prev_url=$(echo "http://xkcd.com/"$(($number -2 ))"/") #link alla pagina precedente corretto
else
prev_url=$(echo "http://xkcd.com/"$(($number -1 ))"/") #link alla pagina precedente
fi



rm index.html

cd $DIR #vado nella cartella delle strip
#salvataggio della strip più recente
if [ -e *"$number""_""$strip" ];then
echo "File esistente"
exit 1
else
counter=`printf %0"$cifre"d $number`
ord_strip=$(echo $counter"_""$strip")
wget -q $link -O "$ord_strip" && zenity --info --text="$ord_strip scaricato ed aggiunto in $DIR"  #decommentare la parte a sinistra se si vuole che per ogni striscia si abbia una finestrella di notifica
echo "$alt_text" > "${ord_strip:0:$((${#ord_strip} - 3))}""txt"  #salvo su file il testo alternato della striscia
fi

#loop che scarica tutte le strisce precedenti (se becca una già  presente, si ferma)
while [ $check == 1 ];do
cd $workdir
wget -q $prev_url -O prevurl #scarico la pagina precedente
temp=$(cat prevurl | grep '<img src="http://imgs.xkcd.com/'| grep  'title' )

alt_text=$(echo $temp | sed 's/<img src="/\
src=/; s/title=/\
title=/; s/alt=/\
alt=/' | grep title | sed 's/title="//; s/"//' | sed "s/'/'/g") #ottengo il testo alternativo della striscia

number=$(cat prevurl | grep 'Permanent link' | sed 's%.*http://xkcd.com/%%; s%/</h3>%%') #ricava il numero della striscia, senza errori
link=$(cat prevurl | grep -i hotlinking | sed -e 's\<h3>Image URL (for hotlinking/embedding): \\g' -e 's\</h3>\\g')
strip=$(basename $link) #ottengo il nome del file della striscia
if [ $(($number -1 )) -le 0 ];then
echo "raggiunta l'ultima striscia, download completo"
check=0  #può uscire al prossimo loop.
else
if [ $(($number -1 )) -eq 404 ];then
echo "La pagina numero 404 non è presente nel sito (richiamo all'ovvio errore di page not found), salto alla precedente.."
prev_url=$(echo "http://xkcd.com/"$(($number -2 ))"/") #link alla pagina precedente
else
prev_url=$(echo "http://xkcd.com/"$(($number -1 ))"/") #link alla pagina precedente
fi
fi

rm prevurl

cd $DIR #vado nella cartella delle strip

if [ -e *"$number""_""$strip" ];then
echo "File esistente" #se la striscia è già  presente (in base al numero)
check=0 #termino il loop
exit 1
else
counter=`printf %0"$cifre"d $number`
ord_strip=$(echo $counter"_""$strip")
wget -q $link -O "$ord_strip" && zenity --info --text="$ord_strip scaricato ed aggiunto in $DIR" #decommentare la parte a sinistra se si vuole che per ogni striscia si abbia una finestrella di notifica
echo "$alt_text" > "${ord_strip:0:$((${#ord_strip} - 3))}""txt"  #salvo su file il testo alternato della striscia
fi

done



lo so, potrei farli più brevi, ma mi piace che siano ben commentati e poi non sono un mago delle regex :D
quella di xkcd se non sbaglio su ubuntu-it l'ha scritta elrond :ysy:
enjoy ;)