Da un'idea tratta da qui: https://medium.com/@aborruso/tutorial-a-richiesta-gdrive-importxml-e-xpath-e756adf615a5
per scrapare albo pretorio Maggioli con google sheet fondamentalmente si usa <td>
le formule useranno ImportXML:
andare nel proprio drive : https://drive.google.com/drive/my-drive
cliccare Nuovo e poi Fogli Google
dare un titolo
quindi mettere nelle caselle i seguenti import (con l'uguale = davanti) :
cella A1: http://crema.trasparenza-valutazione-merito.it/web/trasparenza/papca-ap/-/papca/igrid/1489180872/1489180071
cella A3: =IMPORTxML(A1;"//td[1]")
cella B3 (occupa 3 colonne B-C-D): =IMPORTxML(A1;"//td[2]")
cella E3: =IMPORTxML(A1;"//td[3]")
cella F3(occupa 3 colonne F-G-H): =IMPORTxML(A1;"//td[4]")
cella I3: =IMPORTxML(A1;"//td[5]")
cella K3: =IMPORTxML(A1;"//td[5]/a[1]/@href")
la cella k3 riporta il link, per cui @href all'interno del primo dei tag <a> dopo il quinto <td>
l'aggiornamento automatico del foglio si otterrà così, nelle impostazioni del menu file:
A questo punto il foglio si aggiorna da solo, ma occorrerebbe tutte le volte entrare in drive per leggere l'albo pretorio. Meglio farsi spedire il foglio via email.
Occorre inserire uno script che manda via email le righe. (Strumenti ==> edit script).
Mettere l'indirizzo email destinazione nella casella K1 dl foglio perchè sarà lì che andrà a prelevarla lo script.
Cominciamo da una riga per prova:
/**
* manda la mail all'indirizzo contenuto in una certa casella.
*/
function sendEmailToMe() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1; // prima riga
var numRows = 20; // numero righe da processare
var dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range.
var data = dataRange.getValues();
var emailAddress = data[0][10]; // casella 1,11 a.k.a. K1 contiene indirizzo
for (i in data) {
var row = data[i];
var message = row; // riga = contenuto di tutte le celle
var subject = 'Sending emails from a Spreadsheet';
}
MailApp.sendEmail(emailAddress, subject, message);
}
Run lo script : la prima volta Google chiederà di essere autorizzato , rispondere autorizzando ciò che chiede. Lanciare e verificare nella propria posta che arrivi il messaggio.
Passiamo a tutte le righe (Maggioli di solito 20) :
/**
* manda la mail all'indirizzo contenuto in una certa casella.
*/
function sendEmailToMe() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1; // prima riga
var numRows = 20; // numero righe da processare
var dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range.
var data = dataRange.getValues();
var emailAddress = data[0][10]; // casella 1,11 a.k.a. K1 contiene indirizzo
var subject = 'Sending emails from a Spreadsheet';
var message = "";
for (i in data) {
var row = data[i];
message += row; // riga = contenuto di tutte le celle
message += " \n"; // vado a capo
}
MailApp.sendEmail(emailAddress, subject, message);
}
Vogliamo che la cosa sia automatica.
Bisogna decidere ogni quanto far spedire la email dallo spreadsheet, cioè ogni quanto attivare spedisci email (il trigger cioè attivatore)
aggiungere "attivatore" cliccando + blu
scegliere attivatore basato su orario
se si mette ogni ora, verrà spedita ogni ora. Oppure ogni giorno ad una certa ora:
Salvare.
**************************************************************
Se il messaggio nel formato Maggioli non va bene, si può fare un secondo foglio nel file Spreadsheet organizzandolo a piacere (con le info essenziali ad esempio, si aggiorneranno anch'esse automaticamente) e farsi spedire quello.
Ecco lo script modificato che mostra come saltare dal primo foglio (quello con l'indirizzo email in casella K1) al secondo foglio (quello coi dati da mettere nel messaggio della email):
function sendEmailToMe() {
/**
* manda la mail all'indirizzo contenuto in una certa casella.
*/
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]); // primo FOGLIO
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1; // prima riga
var numRows = 1; // numero righe da processare
var dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range fino a 12 colonne.
var data = dataRange.getValues();
var emailAddress = data[0][10]; // casella arancione, nota bene 1,11 a.k.a. K1 , contiene indirizzo
var subject = 'Albo Pretorio Crema oggi';
var message = "";
// passo al secondo foglio
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[1]); // SECONDO FOGLIO
sheet = SpreadsheetApp.getActiveSheet();
numRows = 20; // numero righe da processare
dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range.
var data2 = dataRange.getValues();
for (i in data2) {
var row = data2[i];
message += row; // aggiungo a message una riga = contenuto di tutte le celle della riga
message += " \n\n\n"; // a capo 3 volte per separare
}
// mando email con dentro message
MailApp.sendEmail(emailAddress, subject, message);
}
Giocandoci ci si può far spedire solo righe con contenuti che interessano ad esempio.
Variante con lista di email nel terzo foglio , lista anche compilabile da cosiddetto "Modulo Google".
Invece che leggere dalla casella K1, legge da una lista di email nel terzo foglio.
Variante con lista di email nel terzo foglio , lista anche compilabile da cosiddetto "Modulo Google".
Invece che leggere dalla casella K1, legge da una lista di email nel terzo foglio.
/**
* manda la mail agli indirizzi caricati con un Modulo, foglio spostato in terza posizione.
*/
function sendEmailToList() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]); // primo FOGLIO
var startRow = 1; // prima riga
var numRows = 1; // numero righe da processare
var dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range fino a 12 colonne.
var data = dataRange.getValues();
var emailAddress = data[0][10]; // casella 1,11 a.k.a. K1 contiene indirizzo
var subject = 'Albo Pretorio - Crema ultime 20 notizie a Lista Iscritti da lucasc';
var message = "";
// passo al secondo foglio
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[1]); // SECONDO FOGLIO
sheet = SpreadsheetApp.getActiveSheet();
numRows = 20; // numero righe da processare
dataRange = sheet.getRange(startRow, 1, numRows, 12);
// importa il range.
var data2 = dataRange.getValues();
for (i in data2) {
var row = data2[i];
message += row; // riga = contenuto di tutte le celle
message += " \n\n\n"; // a capo
}
// passo al foglio del modulo ,
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[2]); // attiva terzo FOGLIO, collegato al Modulo
sheet = SpreadsheetApp.getActiveSheet();
numRows = sheet.getLastRow() -1; // numero email da processare
startRow = 2; // prima riga, salta riga intestazioni
dataRange = sheet.getRange(startRow, 1, numRows, 2); // ultima riga è vuota, da qui -1
// importa il range.
var data3 = dataRange.getValues();
for (i in data3) {
emailAddress = data3[i][1]; // salta intestazioni Modulo google, salta colonna data registrazione
MailApp.sendEmail(emailAddress, subject, message);
Logger.log(i); // per controllare e debuggare : menu Visualizza -> log
Logger.log('indirizzo: ' + data3[i][1]);
}
}
Ovviamente funziona anche come prima (un indirizzo destinatario) mettendo a mano un indirizzo nella prima casella al posto di pippo.@libero.it, che diventa un caso particolare monoindirizzo. Se la spedizione non va a buon fine (es: indirizzo inesistente), viene recapitata una email al mittente con la segnalazione.
Link al foglio google finale, che ho condiviso:
https://docs.google.com/spreadsheets/d/124hFSaAgbLur57aBQ0c04ZfRTA54flFd8fbW6J4hWIY/edit?usp=sharing








Nessun commento:
Posta un commento