Ricevere notifiche su Whatsapp quando finisce uno script:il download di un video su youtube

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”

list

ecco il contenuto di “list.sh”

sh

Ed ecco uno screenshot di whatsapp sul telefono

okpwz

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

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • juhan  Il 23 novembre 2014 alle 11:16

    Ottimo 61ll35! Solo una preghiera, per quelli come me che si perdono facilmente: usa l’indentazione per i sorgenti C/C++, anzi tutti 😳
    Ma OK!

  • Carlo  Il 13 dicembre 2014 alle 14:44

    Ciao, io sto cercando di ricevere questo benedetto sms di autorizzazione da whatsapp ma non mi arriva.. tu hai dovuto fare qualcosa in particolare?

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: