<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2380163896391897267</id><updated>2024-09-20T17:12:52.237+02:00</updated><category term="Servizi utili"/><category term="Parole al vento"/><category term="Soluzioni personali"/><category term="Da sviluppare"/><category term="Servizi indispensabili"/><category term="Apps Script"/><category term="Recensioni"/><category term="software"/><category term="Studio"/><category term="Beta"/><category term="Mobile"/><title type='text'>Just A Little Bit Of Geekness</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justalittlebitofgeekness.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default?max-results=3&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://justalittlebitofgeekness.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default?start-index=4&amp;max-results=3&amp;redirect=false'/><author><name>Edo</name><uri>http://www.blogger.com/profile/07221020414805237106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>3</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2380163896391897267.post-7696291426122504853</id><published>2018-02-12T09:30:00.000+01:00</published><updated>2018-02-12T09:33:53.896+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apps Script"/><title type='text'>Creiamo uno script per non dimenticarci dei compleanni importanti</title><content type='html'>Oggi voglio sospendere temporaneamente la panoramica sugli Apps Script e iniziare con voi un piccolo progetto. Avevo in mente un Google Apps Script che giornalmente invitasse una email con il riepilogo dei compleanni odierni dei propri contatti e quelli dei prossimi 7 giorni in modo da potersi ricordare per tempo un eventuale regalo.&lt;br /&gt;
&lt;br /&gt;
Procediamo a creare il nostro script come abbiamo imparato a fare in precedenza.&lt;br /&gt;
&lt;br /&gt;
Google riversa automaticamente (prendendoli dai nostri contatti) i compleanni, e altri eventi, in un calendario speciale. Dovremmo quindi puntare questo calendario per recuperarli.&lt;br /&gt;
&lt;br /&gt;
Ci tengo a precisare che per ottenere il riferimento a un calendario ci sono 3 diversi metodi della classe CalendarApp:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;getDefaultCalendar()&lt;/span&gt; restituisce il calendario di default quindi non servono parametri e otteniamo un unico calendario&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;getCalendarsByName(name)&lt;/span&gt; restituisce un array di calendari, di proprietà dell&#39;utente o a lui accessibili, il cui nome combacia con la stringa passata come parametro.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;getCalendarById(id)&lt;/span&gt; restituisce il calendario che risponde a uno specifico id (i vari id dei calendari a cui avete accesso li trovate ovviamente in Google Calendar, nelle impostazioni dello specifico calendario)&lt;/li&gt;
&lt;/ul&gt;
In questo caso andremo ad usare il terzo metodo visto che l&#39;id del calendario dei contatti è univoco per tutti: #contacts@group.v.calendar.google.com&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
In questo progetto useremo 3 file diversi. Oltre a &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Codice.gs&lt;/span&gt;, presente di default in ogni nuovo progetto, dovremmo creare due file HTML (&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Email.html&lt;/span&gt; e &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Stylesheet.html&lt;/span&gt;), dal menù File -&amp;gt; Nuovo -&amp;gt; File HTML&lt;br /&gt;
&lt;br /&gt;
In Codice.gs ci saranno tutte le funzioni che verranno utilizzate nel nostro progetto, in caso di progetti più complessi si potrà suddividerle in più file che dovranno avere estensione .gs&lt;br /&gt;
In Stylesheet.html ci sarà il tag &amp;lt;style&amp;gt; con tutto il CSS necessario a dare uno stile alla nostra mail (&lt;a href=&quot;https://developers.google.com/gmail/design/css&quot; target=&quot;_blank&quot;&gt;Gmail supporta i CSS&lt;/a&gt;).&lt;/div&gt;
In Email.html ci sarà il &lt;a href=&quot;https://developers.google.com/apps-script/guides/html/templates&quot; target=&quot;_blank&quot;&gt;template&lt;/a&gt; che, a partire dai dati recuperati da una funzione, genererà l&#39;HTML che verrà inviato via mail.&lt;br /&gt;
&lt;br /&gt;
Come potrete vedere non mi sono impegnato molto per creare un HTML particolarmente accattivante ma ho cercato di fare del mio meglio per documentare chiaramente il codice.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Di seguito il codice commentato di tutti e 3 i file.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;script src=&quot;https://gist.github.com/Edo78/8bf50b306d6cc066a9bbf083dbc5673b.js&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
&lt;div&gt;
Il progetto nella sua interezza è su Github, la versione relativa a questo articolo è &lt;a href=&quot;https://github.com/Edo78/SendBirthday/tree/blog-v1.0&quot; target=&quot;_blank&quot;&gt;qui&lt;/a&gt; ma se voleste contribuire a migliorarlo o semplicemente andare a vedere l&#39;ultima versione disponibile allora recatevi subito &lt;a href=&quot;https://github.com/Edo78/SendBirthday&quot; target=&quot;_blank&quot;&gt;qui&lt;/a&gt;. Ovviamente qualsiasi contributo all&#39;html e ai css sarà il benvenuto.&lt;br /&gt;
&lt;br /&gt;
Come potrete intuire al momento dovrete configurare manualmente l&#39;esecuzione automatica dello script come avevamo già visto &lt;a href=&quot;https://justalittlebitofgeekness.blogspot.it/2018/02/esecuzione-automatica-di-un-google-apps.html&quot; target=&quot;_blank&quot;&gt;qui&lt;/a&gt;. Io vi consiglio di metterlo giornaliero ma se volete potrete modificare velocemente il codice per eseguire lo script una volta a settimana, recuperare gli eventi dei successivi 30 giorni, mostrare i compleanni della settimana in primo piano e i restanti in coda.&lt;br /&gt;
&lt;br /&gt;
Nei prossimi articoli vorrei illustrarvi come scrivere agevolmente il codice offline e caricarlo velocemente (in modo da poter usare strumenti di versioning come git e in modo da poter caricare con più comodità i miei futuri progetti), vorrei trattare la creazione programmatica dei trigger e migliorare questo progetto inserendo anche un modo per filtrare i contatti per cui ricevere il promemoria. Se avete preferenze fatemi sapere.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://justalittlebitofgeekness.blogspot.com/feeds/7696291426122504853/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2380163896391897267/7696291426122504853' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/7696291426122504853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/7696291426122504853'/><link rel='alternate' type='text/html' href='http://justalittlebitofgeekness.blogspot.com/2018/02/creiamo-uno-script-per-non-dimenticarci.html' title='Creiamo uno script per non dimenticarci dei compleanni importanti'/><author><name>Edo</name><uri>http://www.blogger.com/profile/07221020414805237106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2380163896391897267.post-1253343402247929821</id><published>2018-02-05T09:32:00.000+01:00</published><updated>2018-02-11T17:36:01.816+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apps Script"/><title type='text'>Esecuzione automatica di un Google Apps Script</title><content type='html'>&lt;h3&gt;
Progetto&lt;/h3&gt;
Creiamo un nuovo script per loggare il livello di spam nella nostra casella di posta.&lt;br /&gt;
Poniamo di essere degli individui meticolosi che controllano periodicamente lo spam alla ricerca di falsi positivi per evitare che una mail importante vada persa &lt;i&gt;come lacrime nella pioggia&lt;/i&gt; (cit.)&lt;br /&gt;
Per far ciò, ogni volta che vediamo aumentare il contatore delle mail non lette sotto l&#39;etichetta &quot;spam&quot;, andremo a controllare se queste mail siano effettivamente spam o meno e se sono spam li elimineremo definitivamente.&lt;br /&gt;
&lt;h3&gt;
Script&lt;/h3&gt;
Creiamo quindi un progetto &quot;Spam Monitor&quot; e scriviamo al suo interno questa funzione&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Edo78/c9a78743424d0e9f96cc9cf329470ce0.js&quot;&gt;&lt;/script&gt;

La funzione in se è molto semplice, recupera il numero di discussioni non lette in spam, crea un oggetto con un messaggio e il contatore stesso, successivamente logga questo oggetto come &quot;info&quot; se il contatore è a zero, &quot;warning&quot; se è compreso tra 0 e 5 e &quot;error&quot; se è maggiore o uguale a 5.&lt;br /&gt;
Ovviamente alla sua prima esecuzione ci troveremo a dover autorizzare lo script come abbiamo visto nel &lt;a href=&quot;https://justalittlebitofgeekness.blogspot.com/2018/02/il-nostro-primo-google-apps-script.html&quot; target=&quot;_blank&quot;&gt;precedente articolo&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;
Log filtering&lt;/h3&gt;
Potremo poi consultare i log su stackdriver, avere a colpo d&#39;occhio i messaggi in ordine cronologico e potremo anche filtrarli. Per esempio potremo usare un filtro avanzato per estrarre solo i log con unreadSpam maggiore di 0 e minore di 3 con un &lt;a href=&quot;https://cloud.google.com/logging/docs/view/advanced-filters&quot; target=&quot;_blank&quot;&gt;filtro avanzato&lt;/a&gt; come questo&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jsonPayload.unreadSpam&amp;gt;0 AND&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jsonPayload.unreadSpam&lt;3 font=&quot;&quot;&gt;&lt;/3&gt;&lt;/span&gt;&lt;br /&gt;
oppure consultare solo i warning e gli error con questo filtro avanzato&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;severity=&quot;WARNING&quot; OR&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;severity=&quot;ERROR&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ovviamente Stackdriver ha una quantità incredibile di funzionalità che ci permettono di consultare i log come può venirci più comodo ma adesso abbiamo il problema di come generarli in maniera costante. Per esempio sarebbe comodo se il nostro script potesse essere eseguito periodicamente, magari una volta ogni ora in modo da generare dei dati costanti da poter analizzare con calma.&lt;br /&gt;
&lt;h3&gt;
Trigger&lt;/h3&gt;
Il metodo più veloce è di creare un &lt;a href=&quot;https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually&quot; target=&quot;_blank&quot;&gt;trigger manuale&lt;/a&gt; dal menù &quot;Modifica&quot; selezionando la voce &quot;Trigger del progetto corrente&quot;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg323PRhDg2ZTF8pF4Eh9zeIqETOC_5y5zVr6hVYywe9KpCnK162Frj9QEI3uJjnGvpd8oP3Hmv1FDClxdpmLZLtElTQN5P86nX_J3XjUH5Bk6bS3u0faq231y7Stw7qvJZRrsvtYC_2NI/s1600/Schermata+2018-02-04+alle+18.24.15.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;456&quot; data-original-width=&quot;1600&quot; height=&quot;112&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg323PRhDg2ZTF8pF4Eh9zeIqETOC_5y5zVr6hVYywe9KpCnK162Frj9QEI3uJjnGvpd8oP3Hmv1FDClxdpmLZLtElTQN5P86nX_J3XjUH5Bk6bS3u0faq231y7Stw7qvJZRrsvtYC_2NI/s400/Schermata+2018-02-04+alle+18.24.15.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Nella modale che si apre aggiungere un trigger per la nostra funzione che venga eseguito ogni ora. Per sicurezza dal link &quot;notifiche&quot; andiamo a impostare che ci venga inviata una mail appena si presenta un errore con l&#39;esecuzione di questo trigger.&lt;br /&gt;
&lt;h3&gt;
Conclusione&lt;/h3&gt;
&lt;div&gt;
Oggi abbiamo fatto una panoramica sulla gestione dei log e sui trigger. Anche in questo caso si tratta di argomenti molto vasti che andranno ripresi più avanti per essere trattati in maniera adeguata. Questo ovviamente è ancora un articolo introduttivo e ritengo sarebbe prematuro buttarsi subito ad approfondire ogni singolo argomento prima ancora di aver dato la possibilità di capire se i Google Apps Script possano essere quello che fa al proprio caso.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://justalittlebitofgeekness.blogspot.com/feeds/1253343402247929821/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2380163896391897267/1253343402247929821' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/1253343402247929821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/1253343402247929821'/><link rel='alternate' type='text/html' href='http://justalittlebitofgeekness.blogspot.com/2018/02/esecuzione-automatica-di-un-google-apps.html' title='Esecuzione automatica di un Google Apps Script'/><author><name>Edo</name><uri>http://www.blogger.com/profile/07221020414805237106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg323PRhDg2ZTF8pF4Eh9zeIqETOC_5y5zVr6hVYywe9KpCnK162Frj9QEI3uJjnGvpd8oP3Hmv1FDClxdpmLZLtElTQN5P86nX_J3XjUH5Bk6bS3u0faq231y7Stw7qvJZRrsvtYC_2NI/s72-c/Schermata+2018-02-04+alle+18.24.15.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2380163896391897267.post-1199774881264223618</id><published>2018-02-04T16:52:00.004+01:00</published><updated>2018-02-04T16:52:53.997+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apps Script"/><title type='text'>Il nostro primo Google Apps Script</title><content type='html'>&lt;h2&gt;
Divertiamoci&lt;/h2&gt;
Spolverate le tastiere e regolate la luminosità dei monitor, oggi si inizia a giocare con i Google Apps Script (per brevità GAS).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimaKsigDEWPdSaDHa4OcJNqivWRJmoXegr2hlpx4NZ8jrYuB4yyakRaJuILbvzZEm3CSBWQ4iecD86F5TwTWTb3LJz3M0bRZyV1kLfSoxR2V2UTOau8GjstK-fxbG_AHQ9icssEWfvZmI/s1600/Schermata+2018-02-04+alle+13.43.20.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1324&quot; data-original-width=&quot;1312&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimaKsigDEWPdSaDHa4OcJNqivWRJmoXegr2hlpx4NZ8jrYuB4yyakRaJuILbvzZEm3CSBWQ4iecD86F5TwTWTb3LJz3M0bRZyV1kLfSoxR2V2UTOau8GjstK-fxbG_AHQ9icssEWfvZmI/s320/Schermata+2018-02-04+alle+13.43.20.png&quot; width=&quot;317&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Riprendiamo da dove abbiamo lasciato &lt;a href=&quot;https://justalittlebitofgeekness.blogspot.com/2018/02/impariamo-conoscere-i-google-apps-script.html&quot; target=&quot;_blank&quot;&gt;l&#39;ultima volta&lt;/a&gt; e creiamo un nuovo script standalone.&lt;br /&gt;
&lt;br /&gt;
Per prima cosa diamo subito un nome al progetto e facciamo si che sia qualcosa di significati, insomma qualcosa tipo &quot;test&quot; o &quot;foo bar&quot; andrà benissimo. Spostiamoci nella parte riservata all&#39;editor e iniziamo a scrivere del codice.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;function processInbox() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; var threads = GmailApp.getInboxThreads(0,5);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; threads.forEach(function(thread){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; var messages = thread.getMessages();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; messages.forEach(function(message){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Logger.log(message.getSubject());&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; });&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Non provate ad eseguirla subito perché cancella tutta la vostra inbox (scherzo ma aspettate ad eseguirla). La funzione recupera un array con i 5 più recenti thread nella vostra inbox, per ogni thread recupera i suoi messaggi, per ogni messaggio logga l&#39;oggetto di ognuno di questi messaggi.&lt;br /&gt;
&lt;h3&gt;
Autorizzazione&lt;/h3&gt;
Provando ad eseguirla noterete dei popup con richieste di autorizzazione (non è che si possa accedere a Gmail senza un esplicito permesso per motivi di sicurezza).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaQUo23e5qnaSlEUgNPcpGWFSXvocyDlRawmDnYXU9m5iTHE6LIPt-byzhk2GQ7KcH6qmK63HQ6UJC_ffAMNFAAhnFI7zAQnOzgXROpfv0lq_979o1NXOqpvsJIxF9zwQG8MEUyEX5uk/s1600/Schermata+2018-02-04+alle+13.45.02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;348&quot; data-original-width=&quot;848&quot; height=&quot;131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaQUo23e5qnaSlEUgNPcpGWFSXvocyDlRawmDnYXU9m5iTHE6LIPt-byzhk2GQ7KcH6qmK63HQ6UJC_ffAMNFAAhnFI7zAQnOzgXROpfv0lq_979o1NXOqpvsJIxF9zwQG8MEUyEX5uk/s320/Schermata+2018-02-04+alle+13.45.02.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Anche se lo script sarà solo a nostro uso e consumo Google non vuole certo lesinare sulla sicurezza e ci tiene a specificare quando qualcosa non è sicuro al 100%&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHRoentQh4huiQie5bmFS-Vd1r3hmsJ_4jgk2oh1UIPgEzuNWPBFSVGPjzTQ9pQbLGPjIuLsOCkjsiS7olEi7d_AlBiylB3Vg86oy5UctHdqUPufcz7N-n8bh6KNRLB5DPvaPr0Vm93Rk/s1600/Schermata+2018-02-04+alle+13.46.55.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;636&quot; data-original-width=&quot;1168&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHRoentQh4huiQie5bmFS-Vd1r3hmsJ_4jgk2oh1UIPgEzuNWPBFSVGPjzTQ9pQbLGPjIuLsOCkjsiS7olEi7d_AlBiylB3Vg86oy5UctHdqUPufcz7N-n8bh6KNRLB5DPvaPr0Vm93Rk/s320/Schermata+2018-02-04+alle+13.46.55.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
In un prossimo articolo tratterò la procedura di verifica ma per adesso vi basti sapere che dovete fare click su &quot;Avanzate&quot; e successivamente su &quot;Apri [nome progetto] (non sicura)&quot;, a questo punto è quasi finita l&#39;odissea e ci vengono presentate le autorizzazione richieste e dobbiamo acconsentire per poter finalmente usare lo script.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVEqGOqMvygaZ2-rQ-80pa3JP-NAAyXE0R1NrNnICrRpTTTjywO9KCM-rXxIl4HR6eMGndjuG0r5IE1nkrnTQMWa9yzplA30RELufFgF_S7Pd7_WgE8mgLbO0k-Cn2eg6tftkbkT738WA/s1600/Schermata+2018-02-04+alle+13.51.15.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;548&quot; data-original-width=&quot;1120&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVEqGOqMvygaZ2-rQ-80pa3JP-NAAyXE0R1NrNnICrRpTTTjywO9KCM-rXxIl4HR6eMGndjuG0r5IE1nkrnTQMWa9yzplA30RELufFgF_S7Pd7_WgE8mgLbO0k-Cn2eg6tftkbkT738WA/s320/Schermata+2018-02-04+alle+13.51.15.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Fortunatamente questa procedura ci verra riproposta solo nel caso in cui si vada a modificare lo script e siano necessarie altre autorizzazione (es. per calendar). Google invia anche una mail all&#39;account che ha autorizzato lo script e, in ogni momento, si può rimuovere l&#39;autorizzazione da &lt;a href=&quot;https://myaccount.google.com/permissions&quot; target=&quot;_blank&quot;&gt;qui&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;
Logging&lt;/h3&gt;
Fino a poco tempo fa avrei dovuto mettervi in guardia sul non usare assolutamente l&#39;oggetto &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;console&lt;/span&gt; per loggare ma Google ha integrato il suo strumento di log &lt;a href=&quot;https://cloud.google.com/stackdriver/&quot; target=&quot;_blank&quot;&gt;Stackdriver&lt;/a&gt;&amp;nbsp;rendendo possibile salvare gratuitamente i log degli ultimi 7 giorni (a pagamento il limite si estende a 30 giorni) tramite i classici comandi &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;console.log .info .error&lt;/span&gt; eccetera.&lt;br /&gt;
&lt;br /&gt;
La differenza tra le due modalità è che tramite Logger i log non persistono a lungo, sono la modalità storica di log per Apps Script e sono indicati principalmente durante la fase di sviluppo e dubug mentre Stackdriver è uno strumento molto più potente e versatile, permette la ricerca tra i log, la creazione di metriche e molto altro ma quando si sta sviluppando qualcosa di nuovo è molto più veloce e pratico limitarsi al sistema di logging nativo. Potete ovviamente sostituire Logger.log con console.log e avere subito un&#39;idea di quello che potete vedere in Stackdriver. Dal menù &quot;Visualizza&quot; potete scegliere se visualizzare il log nativo &quot;Log&quot; o &quot;Stackdriver Logging&quot; e noterete che potrete consultare anche gli errori salvati in &quot;Stackdriver Error Reporting&quot;.&lt;br /&gt;
&lt;h3&gt;
Conclusione&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
Con questo articolo abbiamo scritto la nostra prima funzione, ci siamo imbattuti nelle richieste di autorizzazione e abbiamo scoperto l&#39;esistenza dei diversi metodi di logging. Ovviamente tutti questi argomenti andranno trattati in maniera molto più approfondita meritandosi almeno un articolo a testa. Per il momento spero di aver iniziato a mettervi un po&#39; di curiosità e che vogliate iniziare a sperimentare in autonomia. Ci si vede al prossimo articolo con una panoramica su altri argomenti sperando di spingervi ad avvicinarvi sempre di più a questa incredibile tecnologia.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Come al solito se avete dubbi, curiosità o richieste non siate timidi e fate sentire la vostra voce.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://justalittlebitofgeekness.blogspot.com/feeds/1199774881264223618/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2380163896391897267/1199774881264223618' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/1199774881264223618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2380163896391897267/posts/default/1199774881264223618'/><link rel='alternate' type='text/html' href='http://justalittlebitofgeekness.blogspot.com/2018/02/il-nostro-primo-google-apps-script.html' title='Il nostro primo Google Apps Script'/><author><name>Edo</name><uri>http://www.blogger.com/profile/07221020414805237106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimaKsigDEWPdSaDHa4OcJNqivWRJmoXegr2hlpx4NZ8jrYuB4yyakRaJuILbvzZEm3CSBWQ4iecD86F5TwTWTb3LJz3M0bRZyV1kLfSoxR2V2UTOau8GjstK-fxbG_AHQ9icssEWfvZmI/s72-c/Schermata+2018-02-04+alle+13.43.20.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>