psimem
24-05-2014, 08:31
La sera mi piace rilassarmi guardando i video delle mie sottoscrizioni youtube senza pero' appesantire troppo la rete, quindi perche' non creare uno script che mi scarichi in automatico questi ultimi durante l'arco della giornata?
Ecco quindi cosa sono riuscito a combinare:
#!/bin/bash
# This script downloads new uploaded videos from your favourite youtubers channel.
# You can define your favourites in the .conf file following the format examples;
# the .conf file requires an empty line at the bottom to be properly read.
# This script requires:
# youtube-dl; sed; wc; tac
# How to use it:
# ./ytdla_v## file.conf
# Setting the configuration file
conffile="$@"
# Reading the configuration file and setting the work directories
outfile=$(sed '1!d' $conffile)
destdir=$(sed '2!d' $conffile)
# Counting the entries
nlines=$(wc -l < $conffile)
nlines=$(( nlines-1 ))
xnm=4
xid=5
# All credits for the script part checking for new videos goes to this guy:
# http://superuser.com/questions/654273/how-to-subscribe-to-a-youtube-feed-from-linux-command-line
# Starting the loop looking for new videos
while read line; do
# Getting the channel name
chname=$(sed ''$xnm'!d' $conffile)
url="http://gdata.youtube.com/feeds/api/users/"$chname"/uploads"
lastid=$(sed ''$xid'!d' $conffile)
echo -e "Processing \e[1m$chname\e[0m:"
allids=$(wget -q -O- "$url" | sed 's,href,\nhref,g' | sed -n -e "s,^.*href='http://www.youtube.com/watch?v=\([A-Za-z0-9_-]*\).*$,\1,p")
for id in $allids; do
if [ "$lastid" == "$id" ]; then echo " No new items left." >&2; break; fi
echo "$id"
echo -e " Adding \e[1m$id\e[0m" >&2
done | tac >> "$outfile"
newlastid=$(echo $allids | grep -o "^[A-Za-z0-9_-]*")
sed -i "$xid s|.*|$newlastid|" $conffile
# Checking if there are more channels to scan
if [ "$xnm" == "$nlines" ]; then break; fi
xnm=$(( xnm+3 ))
xid=$(( xid+3 ))
done < $conffile
# Counting the number of files to download
nftd=$(wc -l < list.all)
# Feeding the list to youtube-dl (-i ignore errors -c continue downloads -a batch download)
# Cleaning and archiving list file
# Moving videos to the specific folder
echo -e "\e[1mNow downloading $nftd files:\e[0m"
youtube-dl -o "%(uploader)s - %(title)s.%(ext)s" -ica list.all && mv list.all list.`date +"%Y-%m-%d-%H-%M-%S"` && mv *.mp4 "$destdir"
echo -e "\e[1mDone downloading $nftd files.\e[0m"
exit
Lo script per comodita' e' commentato nelle sue parti principali.
Ed ecco il file di configurazione d'esempio:
/media/sda/Downloads/list.all
/media/sda/Downloads/Videos
HDmagazineVIDEO
LO0uA8QuBrM
HDblog
Sk4IhCfdbto
Note:
- ovviamente per automatizzare lo script basta inserirlo in un cron per eseguirlo ogni paio d'ore o quanto piu' vi aggrada;
- per ottenere il nome del canale da inserire nel file di configurazione basta cliccare sul nome di quest'ultimo in un browser qualsiasi e copiarlo dalla barra degli indirizzi;
- nel file di configurazione dopo il nome del canale lo script memorizza l'ultimo video disponibile.
Avvertenze:
naturalmente testate prima lo script perche' se non scarica i file voluti, s'inceppa, vi brasa l'hd, vi spaventa il gatto, vi nuclearizza casa, ecc. la responsabilita' e' vostra :read: .
Spero possa tornare utile a qualcun'altro e se avete idee, modifiche, suggerimenti avanti con i carri ;) .
Ecco quindi cosa sono riuscito a combinare:
#!/bin/bash
# This script downloads new uploaded videos from your favourite youtubers channel.
# You can define your favourites in the .conf file following the format examples;
# the .conf file requires an empty line at the bottom to be properly read.
# This script requires:
# youtube-dl; sed; wc; tac
# How to use it:
# ./ytdla_v## file.conf
# Setting the configuration file
conffile="$@"
# Reading the configuration file and setting the work directories
outfile=$(sed '1!d' $conffile)
destdir=$(sed '2!d' $conffile)
# Counting the entries
nlines=$(wc -l < $conffile)
nlines=$(( nlines-1 ))
xnm=4
xid=5
# All credits for the script part checking for new videos goes to this guy:
# http://superuser.com/questions/654273/how-to-subscribe-to-a-youtube-feed-from-linux-command-line
# Starting the loop looking for new videos
while read line; do
# Getting the channel name
chname=$(sed ''$xnm'!d' $conffile)
url="http://gdata.youtube.com/feeds/api/users/"$chname"/uploads"
lastid=$(sed ''$xid'!d' $conffile)
echo -e "Processing \e[1m$chname\e[0m:"
allids=$(wget -q -O- "$url" | sed 's,href,\nhref,g' | sed -n -e "s,^.*href='http://www.youtube.com/watch?v=\([A-Za-z0-9_-]*\).*$,\1,p")
for id in $allids; do
if [ "$lastid" == "$id" ]; then echo " No new items left." >&2; break; fi
echo "$id"
echo -e " Adding \e[1m$id\e[0m" >&2
done | tac >> "$outfile"
newlastid=$(echo $allids | grep -o "^[A-Za-z0-9_-]*")
sed -i "$xid s|.*|$newlastid|" $conffile
# Checking if there are more channels to scan
if [ "$xnm" == "$nlines" ]; then break; fi
xnm=$(( xnm+3 ))
xid=$(( xid+3 ))
done < $conffile
# Counting the number of files to download
nftd=$(wc -l < list.all)
# Feeding the list to youtube-dl (-i ignore errors -c continue downloads -a batch download)
# Cleaning and archiving list file
# Moving videos to the specific folder
echo -e "\e[1mNow downloading $nftd files:\e[0m"
youtube-dl -o "%(uploader)s - %(title)s.%(ext)s" -ica list.all && mv list.all list.`date +"%Y-%m-%d-%H-%M-%S"` && mv *.mp4 "$destdir"
echo -e "\e[1mDone downloading $nftd files.\e[0m"
exit
Lo script per comodita' e' commentato nelle sue parti principali.
Ed ecco il file di configurazione d'esempio:
/media/sda/Downloads/list.all
/media/sda/Downloads/Videos
HDmagazineVIDEO
LO0uA8QuBrM
HDblog
Sk4IhCfdbto
Note:
- ovviamente per automatizzare lo script basta inserirlo in un cron per eseguirlo ogni paio d'ore o quanto piu' vi aggrada;
- per ottenere il nome del canale da inserire nel file di configurazione basta cliccare sul nome di quest'ultimo in un browser qualsiasi e copiarlo dalla barra degli indirizzi;
- nel file di configurazione dopo il nome del canale lo script memorizza l'ultimo video disponibile.
Avvertenze:
naturalmente testate prima lo script perche' se non scarica i file voluti, s'inceppa, vi brasa l'hd, vi spaventa il gatto, vi nuclearizza casa, ecc. la responsabilita' e' vostra :read: .
Spero possa tornare utile a qualcun'altro e se avete idee, modifiche, suggerimenti avanti con i carri ;) .