Sono sempre stato un downloader compulsivo e ora ho scritto uno script che mi avvisa su whatsapp quando un download -o uno script- finisce.
Può essere l’installazione di un programma molto pesante, il download di una iso con wget, o (questa non l’ho ancora fatta) avvisare della temperatura della stanza (se abbinato con un cronjob e un sensore).
Se non avete paura della mia soluzione molto incasinata, ecco come faccio.
Installiamo subito un programma che tramite riga di comando ci consente di scaricare dei video da internet
sudo apt-get install youtube-dl
Poi creiamo una cartella “video” che conterrà i file scaricati
mkdir /home/$USER/video
Per prima cosa dobbiamo installare da github una libreria che ci consenta l’accesso da programma ai server whatsapp.
Si chiama YOWSUP-CLI, per installarla e configurarla questo l’url
Io ho seguito il tutorial qui presente
Mi raccomando, vi conviene registrarvi con un numero di telefono dove NON avete Whatsapp.
Se avete genitori o nonni, prendete in prestito il loro telefono, ma non usate il vostro numero con cui siete registrati su whatsapp.
Si può programmare in python, ma non conosco bene questo linguaggio, e promette di inviare anche foto (cosa che non sono riuscito a fare, appunto per il motivo di cui sopra)
Quando trovo su Youtube un video che mi piace e voglio scaricare apro un file di testo “list” e ci copio dentro l’URL.
In effetti questo è un file che contiene degli url separati da un a capo.
Ho scritto poi un programma in C “youload.c” che legge da questo file “list” e genera in output un file “list.sh” e poi lo esegue.
Non chiedetemi perchè ho dovuto ricorrere a questo stratagemma: sono passati diversi mesi e non me lo ricordo più 😉
Sono ricorso all’aiuto di StackOverflow per leggere dal file “list” e memorizzare nella variabile “line” ogni riga di quel file, dove riga è sinonimo di URL di un video, come intuite.
Successivamente poi nel programma apro il file “list.sh” che è uno script, e da programma C ci scrivo i comandi che sono necessari affinchè questo script generato automaticamente scarichi ciò che voglio e mi notifichi dell’eventuale successo.
Alla fine del programma eseguo materialmente lo script generato tramite il comando
system("./list.sh");
Affinchè questo programma funzioni dovete sostituire IL_MIO_NUMERO_DI_WHATSAPP e IL_MIO_USERNAME con il vostro numero telefonico e l’username con cui siete loggati al pc.
//questo programma si chiama youload.c
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
void strip(char *s) {
char *p2 = s;
while(*s != '\0') {
if(*s != '\t' && *s != '\n') {
*p2++ = *s++;
} else {
++s;
}
}
*p2 = '\0';
}
int main(void)
{
char buf[80];
FILE *fp;
char *line = NULL;
size_t len = 0;
ssize_t read;
FILE *sh;
sh = fopen("list.sh","w");
fp = fopen("list", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
fprintf(sh,"youtube-dl ");
fprintf(sh,"%s", line);
strip(line);
fprintf(sh,"page=$( wget \"%s",line); // "\b" perchè %s,line aggiunge un ritorno a capo che non mi serve
fprintf(sh,"%c\" -O youtube)\n",0x08);
fprintf(sh,"echo -n \"Finito il download di %c\"\" >> whatsapp\n",0x5c); //hex value per "\"
fprintf(sh,"awk -vRS=\"</title>\" \'/<title>/{gsub(/.*<title>|%cn+/,\"\");print;exit}\' youtube >>whatsapp\n",0x5c);
fprintf(sh,"echo \"%c\" alle ore \" >>whatsapp\n",0x5c);
fprintf(sh,"echo $(date +\"%T\") >>whatsapp\n");
fprintf (sh,"echo \" del \" >>whatsapp\n");
fprintf(sh,"date +\"\%cd/\%cm/\%cy\">>whatsapp\n",0x25,0x25,0x25); //0x25=hex value di %
fprintf(sh,"a=$(cat whatsapp | tr -d \"");
fprintf(sh,"%cn\"",0x5c);
fprintf(sh,")\n");
fprintf(sh,"yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP \"$a\" --config /home/IL_MIO_USERNAME/yowsup-master/src/yowsup-cli.config\n");
fprintf(sh,"rm whatsapp\n");
fprintf(sh,"rm youtube\n");
}
fprintf(sh,"yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP \"Per oggi abbiamo finito!!\" --config /home/IL_MIO_USERNAME/yowsup-master/src/yowsup-cli.config\n");
fclose(sh);
fclose(fp);
if (line)
free(line);
system("cd /home/IL_MIO_USERNAME/video");
system("./list.sh");
exit(EXIT_SUCCESS);
}
Creo anche un altro file “whatsapp” che mi aiuta nella costruzione della stringa finale. Per l’utilità leggere più in basso
Non avete capito niente, lo so e anch’io adesso non ricordo l’iter che mi ha portato a questo procedimento, ma se apriamo lo script che viene generato da questo programma “list.sh”, capiamo subito un po’ di più.
//questo file script "list.sh" è stato generato automaticamente da youload.c
youtube-dl https://www.youtube.com/watch?v=URL_DEL_VIDEO
page=$( wget "https://www.youtube.com/watch?v=URL_DEL_VIDEO" -O youtube)
echo -n "Finito il download di \"" >> whatsapp
awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}' youtube >>whatsapp
echo "\" alle ore " >>whatsapp
echo $(date +"%T") >>whatsapp
echo " del " >>whatsapp
date +"%d/%m/%y">>whatsapp
a=$(cat whatsapp | tr -d "\n")
yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP "$a" --config /home/MIO_USERNAME/yowsup-master/src/yowsup-cli.config
la riga
page=$( wget "https://www.youtube.com/watch?v=URL_DEL_VIDEO" -O youtube)
awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}' youtube >>whatsapp
mi serve per risalire al titolo del video su Youtube. Grazie StackOverflow!
vedete la riga
yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP "$a" --config /home/MIO_USERNAME/yowsup-master/src/yowsup-cli.config
usiamo il nome del programma senza “./” per eseguirlo. Ciò significa che è diventato un programma di “sistema”, perchè abbiamo copiato tutto il contenuto di yowsup-master/src in /usr/bin.
ESEMPIO
ecco il contenuto di “list”

ecco il contenuto di “list.sh”

Ed ecco uno screenshot di whatsapp sul telefono

NON BIASIMATEMI PER I TITOLI DEI VIDEO: dovevo controllare semplicemente se funzionava, e ho scelto i filmati più brevi.
Che cosa vi sembra?
Commentate numerosi, perchè so di non essere stato chiaro -ho scritto in fretta- !
Grazie dell’attenzione
61LL35