SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Google Apps Script
Aprenda na prática - Parte 2

Prof. Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Google Apps Script

Link para a primeira parte;
http://www.slideshare.net/skosta/google-apps-script-parte-1
Criando aplicação web

Ui Service

HTML Service

Like GWT (not all items)

Like HTML5 (not all benefits)

Some elements have been
deprecated (hyperlink,..)

HTML through compiler Caja
(HTML is limited :(

Fast to develop, difficult to maintain

Only jQuery as ext library

IMHO: It’s the past

IMHO: It’s the future!
Criando aplicação web
No google drive,
click em criar e
depois em script
Criando aplicação web

Escolha projeto
em branco
Criando aplicação web
Copie o código
abaixo no editor.

function doGet() {
var output = HtmlService.createHtmlOutput('');
output.append("<h1>JINF13 - Google Apps Script</h1>")
output.append("<p> Ola Mundo </p>")
return output;
}
Implantando aplicação web
Selecione
Publicar ->
Implantar como
aplicativo Web
Implantando aplicação web

Digite um nome
para a versão, e
click em salvar
nova versão.
Implantando aplicação web

Click em
implementar.
Implantando aplicação web
URL para a
ultima versão
implantada,
copie e cole em
um navegador
web
Implantando aplicação web
URL para a
ultima versão
implantada,
copie e cole em
um navegador
web
Gerenciando modificações
Após a implantação da primeira versão, o google
disponibiliza uma URL para a versão em
desenvolvimento. Para entender como funciona, edite
o código anterior adicionando o seu nome, como
abaixo:

function doGet() {
var output = HtmlService.createHtmlOutput('');
output.append("<h1>JINF13 - Google Apps Script</h1>")
output.append("<h2>Sérgio Souza Costa</h2>")
output.append("<p> Ola Mundo </p>")
return output;
}
Gerenciando modificações
Gerenciando modificações

URL para a versão em
desenvolvimento.
Click nela
Gerenciando modificações
Gerenciando modificações

O resultado saiu como esperado ?
Então pode criar uma nova versão,
como a seguir:
Gerenciando modificações
Gerenciando modificações
Gerenciando modificações
Gerenciando modificações
Gerenciando modificações

Escolha a versão
2, a última criada
Gerenciando modificações

Click em atualizar
Gerenciando modificações

Copie e cole
novamente a url
atual em um
navegador
Em arquivos separados
Em arquivos separados
Em arquivos separados

function doGet() {
return HtmlService.createHtmlOutputFromFile('index').
setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
Em arquivos separados

function doGet() {
return HtmlService.createHtmlOutputFromFile('index').
setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
Em arquivos separados

Acesse o projeto
neste link
https://script.google.com/d/16zsXAUUmQYCGyYIhDbMmr_CzrrAc9quNujMnFaGBPlJoh87K3eFRHbF/edit?usp=sharing

function doGet() {
return HtmlService.createHtmlOutputFromFile('index').
setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
Em arquivos separados
Usando JavaScript e JQuery
<div id="g1">
Google Apps Script
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" >
$(
function(){
$("#g1").animate({ "fontSize": "400%" }, 1000);
}
)
</script>

function doGet() {
return HtmlService.createHtmlOutputFromFile('index2').
setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
Em arquivos separados
Usando JavaScript e JQuery
<div id="g1">
Google Apps Script
</div>
No link abaixo tenho disponível
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
uma aula detalhada sobre JQuery:
<script type="text/javascript" >
$(
http://www.slideshare.
function(){
net/skosta/cliente-side$("#g1").animate({ "fontSize": "400%" }, javascriptpptx
1000);
}
)
</script>

function doGet() {
return HtmlService.createHtmlOutputFromFile('index2').
setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
Boas práticas
Separar os arquivos, HTML, JavaScript e CSS.
Mostrando dados de uma planilha
Considere uma planilha com nomes e três notas de
cada aluno, como no link a seguir:
https://docs.google.com/spreadsheet/ccc?
key=0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c&usp=
sharing

Este é o id da planilha
0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c

Id (ou
key)
Mostrando dados de uma planilha
Crie um novo projeto em branco, depois copie e
cole o código abaixo:
function doGet() {
var output = HtmlService.createHtmlOutput('');
output.append("<h1>Notas Alunos</h1>")
var sheet = SpreadsheetApp.openById(
"0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c")
var data = sheet.getDataRange().getValues()
output.append("<table>")
for (var i in data) {
output.append("<tr>")
for (var j in data[i]) {
output.append("<td>").append(data[i][j]).append("</td>")
}
output.append("</tr>")
}
output.append("<table>")
return output;
}

O id da
planilha
anterior,
alunos e
notas.
Mostrando dados de uma planilha
Como o aplicativo esta acessando uma planilha,
é necessário autorizá-lo antes de publicar:

Click em
executar,
Mostrando dados de uma planilha
Como o aplicativo esta acessando uma planilha,
é necessário autorizá-lo antes de publicar:

Depois em
continuar
Mostrando dados de uma planilha
Como o aplicativo esta acessando uma planilha,
é necessário autorizá-lo antes de publicar:

Depois em
aceitar.
Mostrando dados de uma planilha
Depois de implantado, podera ser acessado em
um navegador como abaixo:
Mostrando dados de uma planilha
index.html

Versão usando Scriptlets
Codigo.gs
function doGet() {
return HtmlService
.createTemplateFromFile('index')
.evaluate();
}

function getData() {
return SpreadsheetApp.openById(
'0Avv93GPSzr6FdDhGR3ZqbHpDTHJCMXotQUFWcEstcGc').
getDataRange().getValues();
}

<? var data = getData(); ?>
<table>
<? for (var i = 0; i < data.length; i++) { ?>
<tr>
<? for (var j = 0; j < data[i].length; j++) { ?>
<td><?= data[i][j] ?></td>
<? } ?>
</tr>
<? } ?>
</table>
Mostrando dados de uma planilha
para uma página no google sites
function atualizaPagina () {
var output = HtmlService.createHtmlOutput('');
output.append("<h1>Notas Alunos</h1>")
var sheet = SpreadsheetApp.getActiveSpreadsheet()
var data = sheet.getDataRange().getValues()
output.append("<table>")
for (var i in data) {
output.append("<tr>")
for (var j in data[i]) {
output.append("<td>").append(data[i][j]).append("</td>")
}
output.append("</tr>")
}
output.append("<table>")
var page SitesApp.getPageByUrl('URLDAPAGINA”');
page.setHtmlContent (output.getContent())
}

Esta função pode
ser criada em um
script da planilha.
Mostrando dados de uma planilha
para uma página no google sites
Crie uma cópia da planilha com as notas dos
alunos:
Mostrando dados de uma planilha
para uma página no google sites
Para manter a página atualizada, crie um acionador
(trigger) que será executado a cada hora.
Mostrando dados de uma planilha
para uma página no google sites
Para manter a página atualizada, crie um acionador
(trigger) que será executado a cada hora.
UI service
Os scripts podem usar um grande número de elementos de interfaces (widgets):
●

Push buttons

●

Radio buttons

●

Toggle buttons

●

Check boxes

●

Text fields

●

Labels

●

Titles

●

List boxes

●

Dialog boxes

●

Panels of many types
UI service
Exemplo de interface:
UI service
function criaApp () {
var myapp = UiApp.createApplication().setTitle('Aplicativo UI');
var mygrid = myapp.createGrid(3, 2);
mygrid.setWidget(0, 0, myapp.createLabel('Name:'));
mygrid.setWidget(0, 1, myapp.createTextBox());
mygrid.setWidget(1, 0, myapp.createLabel('Idade:'));
mygrid.setWidget(1, 1, myapp.createTextBox());
mygrid.setWidget(2, 0, myapp.createLabel('Cidade'));
mygrid.setWidget(2, 1, myapp.createTextBox());
var mybutton = myapp.createButton('Click');
var handler = myapp.createServerHandler('myClickHandler');
mybutton.addClickHandler(handler);
var mypanel = myapp.createVerticalPanel();
mypanel.add(mygrid);
mypanel.add(mybutton);
var label = myapp.createLabel('O botão foi clicado.')
.setId('statusLabel')
.setVisible(false);
mypanel.add(label);
myapp.add(mypanel);
return myapp;
}
UI service

function myClickHandler (e) {
var app = UiApp.getActiveApplication();
var label = app.getElementById('statusLabel');
label.setVisible(true);
app.close();
return app;
}
function doGet (e) {
return criaApp(e);
}
Custom Menus e Sidebar
Acessando serviços externos
Carregando vídeos do youtube, a partir dos dados do
XML.
var xml = UrlFetchApp.fetch(youtubeURL).getContentText();
var document = XmlService.parse(xml);

http://sergioscosta.blogspot.
com.
br/2013/09/incorporandovideos-do-youtube-no.html
Acessando serviços externos com
autenticação
Acesse https://dev.twitter.com/ e crie um novo
aplicativo:

https://script.google.com/macros
Acessando serviços externos com
autenticação
Acessando serviços externos com
autenticação
var consumerKey = 'XXXXX'; // Register your app with Twitter.
var consumerSecret = 'XXXXX'; // Register your app with Twitter.
var oauthConfig = UrlFetchApp.addOAuthService('twitter');
oauthConfig.setAccessTokenUrl(
'http://api.twitter.com/oauth/access_token');
https://developers.google.com/appsoauthConfig.setRequestTokenUrl(
script/guides/services/external
'http://api.twitter.com/oauth/request_token');
oauthConfig.setAuthorizationUrl(
'http://api.twitter.com/oauth/authorize');
oauthConfig.setConsumerKey(consumerKey);
oauthConfig.setConsumerSecret(consumerSecret);
var options = {
'oAuthServiceName' : 'twitter', 'oAuthUseToken' : 'always'
};
var url = 'http://api.twitter.com/1.1/statuses/user_timeline.json';
var response = UrlFetchApp.fetch(url, options);
var tweets = JSON.parse(response.getContentText());
Acessando serviços externos com
autenticação (twitter)
https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
Acessando serviços externos com
autenticação (twitter)

var result = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/user_timeline.
json?screen_name=profsergiocosta&count=5", options);
var o = Utilities.jsonParse(result.getContentText());
var output = HtmlService.createHtmlOutput('');
output.append("<h1>Oficina - GAS</h1>")
var index = 0;
for (var i in o) {
var post = o[i];
output.append("<p>").append(post.text).append ("</p>")
}
return output;
Acessando serviços externos com
autenticação (twitter)

var result = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/user_timeline.
json?screen_name=profsergiocosta&count=5", options);
var o = Utilities.jsonParse(result.getContentText());
var output = HtmlService.createHtmlOutput('');
output.append("<h1>Oficina - GAS</h1>")
var index = 0;
for (var i in o) {
var post = o[i];
output.append("<p>").append(post.text).append ("</p>")
}
return output;

Weitere ähnliche Inhalte

Was ist angesagt?

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Aula 01 - Revisão Algoritmo 1
Aula 01  - Revisão Algoritmo 1Aula 01  - Revisão Algoritmo 1
Aula 01 - Revisão Algoritmo 1Eder Samaniego
 
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoAlgoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoRodrigo Kiyoshi Saito
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequenciaItalo Costa
 
Trabalho OO clinica veterinária
Trabalho OO clinica veterináriaTrabalho OO clinica veterinária
Trabalho OO clinica veterináriaValdir Junior
 
Ergonomia apresentacao trabalho
Ergonomia apresentacao trabalho Ergonomia apresentacao trabalho
Ergonomia apresentacao trabalho Ailton Silva
 
Curso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosCurso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosTiago Antônio da Silva
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos João moreira
 
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.ppt
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.pptCLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.ppt
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.pptLourencianneCardoso
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao PythonMarcio Palheta
 
slide-farmacologia.pptx
slide-farmacologia.pptxslide-farmacologia.pptx
slide-farmacologia.pptxFernando Naize
 
Interações e efeito adverso galeno
Interações e efeito adverso galenoInterações e efeito adverso galeno
Interações e efeito adverso galenoLeonardo Souza
 
Modelo de especificação de caso de uso
Modelo de especificação de caso de usoModelo de especificação de caso de uso
Modelo de especificação de caso de usoLeandro Rodrigues
 

Was ist angesagt? (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Saúde do homem
Saúde do homemSaúde do homem
Saúde do homem
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Aula 01 - Revisão Algoritmo 1
Aula 01  - Revisão Algoritmo 1Aula 01  - Revisão Algoritmo 1
Aula 01 - Revisão Algoritmo 1
 
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoAlgoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
 
Trabalho OO clinica veterinária
Trabalho OO clinica veterináriaTrabalho OO clinica veterinária
Trabalho OO clinica veterinária
 
Ergonomia apresentacao trabalho
Ergonomia apresentacao trabalho Ergonomia apresentacao trabalho
Ergonomia apresentacao trabalho
 
Curso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicosCurso CSS 3 - Aula Introdutória com conceitos básicos
Curso CSS 3 - Aula Introdutória com conceitos básicos
 
Riscos químicos
Riscos químicos Riscos químicos
Riscos químicos
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos
 
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.ppt
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.pptCLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.ppt
CLASSIFICAÇÃO DAS FORMAS FARMACÊUTICAS.ppt
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Periculosidade em posto abastecimento
Periculosidade em posto abastecimentoPericulosidade em posto abastecimento
Periculosidade em posto abastecimento
 
slide-farmacologia.pptx
slide-farmacologia.pptxslide-farmacologia.pptx
slide-farmacologia.pptx
 
Interações e efeito adverso galeno
Interações e efeito adverso galenoInterações e efeito adverso galeno
Interações e efeito adverso galeno
 
PICs conceitos básicos
PICs conceitos básicosPICs conceitos básicos
PICs conceitos básicos
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Modelo de especificação de caso de uso
Modelo de especificação de caso de usoModelo de especificação de caso de uso
Modelo de especificação de caso de uso
 

Ähnlich wie Google Apps Script Aprenda na prática - Parte 2

Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Evandro Klimpel Balmant
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkPablo Garrido
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
Criando plugins jQuery
Criando plugins jQueryCriando plugins jQuery
Criando plugins jQueryRicardo Coelho
 
Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre JqueryIvo Calado
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IODouglas Lira
 
jQuery básico (parte 3)
jQuery básico (parte 3)jQuery básico (parte 3)
jQuery básico (parte 3)Luís Cobucci
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteJohann Vivot
 
Google Apps Script
Google Apps ScriptGoogle Apps Script
Google Apps ScriptCIJUN
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaJoselito Nascimento
 

Ähnlich wie Google Apps Script Aprenda na prática - Parte 2 (20)

Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao Framework
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Criando plugins jQuery
Criando plugins jQueryCriando plugins jQuery
Criando plugins jQuery
 
Hello vue
Hello vueHello vue
Hello vue
 
jQuery
jQueryjQuery
jQuery
 
jQuery
jQueryjQuery
jQuery
 
Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre Jquery
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IO
 
jQuery básico (parte 3)
jQuery básico (parte 3)jQuery básico (parte 3)
jQuery básico (parte 3)
 
Google Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonteGoogle Analytics Reporting API: Bebendo água direto da fonte
Google Analytics Reporting API: Bebendo água direto da fonte
 
Google Apps Script
Google Apps ScriptGoogle Apps Script
Google Apps Script
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 

Mehr von Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mehr von Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Google Apps Script Aprenda na prática - Parte 2

  • 1. Google Apps Script Aprenda na prática - Parte 2 Prof. Sérgio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3. Google Apps Script Link para a primeira parte; http://www.slideshare.net/skosta/google-apps-script-parte-1
  • 4. Criando aplicação web Ui Service HTML Service Like GWT (not all items) Like HTML5 (not all benefits) Some elements have been deprecated (hyperlink,..) HTML through compiler Caja (HTML is limited :( Fast to develop, difficult to maintain Only jQuery as ext library IMHO: It’s the past IMHO: It’s the future!
  • 5. Criando aplicação web No google drive, click em criar e depois em script
  • 7. Criando aplicação web Copie o código abaixo no editor. function doGet() { var output = HtmlService.createHtmlOutput(''); output.append("<h1>JINF13 - Google Apps Script</h1>") output.append("<p> Ola Mundo </p>") return output; }
  • 8. Implantando aplicação web Selecione Publicar -> Implantar como aplicativo Web
  • 9. Implantando aplicação web Digite um nome para a versão, e click em salvar nova versão.
  • 11. Implantando aplicação web URL para a ultima versão implantada, copie e cole em um navegador web
  • 12. Implantando aplicação web URL para a ultima versão implantada, copie e cole em um navegador web
  • 13. Gerenciando modificações Após a implantação da primeira versão, o google disponibiliza uma URL para a versão em desenvolvimento. Para entender como funciona, edite o código anterior adicionando o seu nome, como abaixo: function doGet() { var output = HtmlService.createHtmlOutput(''); output.append("<h1>JINF13 - Google Apps Script</h1>") output.append("<h2>Sérgio Souza Costa</h2>") output.append("<p> Ola Mundo </p>") return output; }
  • 15. Gerenciando modificações URL para a versão em desenvolvimento. Click nela
  • 17. Gerenciando modificações O resultado saiu como esperado ? Então pode criar uma nova versão, como a seguir:
  • 22. Gerenciando modificações Escolha a versão 2, a última criada
  • 24. Gerenciando modificações Copie e cole novamente a url atual em um navegador
  • 27. Em arquivos separados function doGet() { return HtmlService.createHtmlOutputFromFile('index'). setSandboxMode(HtmlService.SandboxMode.NATIVE); }
  • 28. Em arquivos separados function doGet() { return HtmlService.createHtmlOutputFromFile('index'). setSandboxMode(HtmlService.SandboxMode.NATIVE); }
  • 29. Em arquivos separados Acesse o projeto neste link https://script.google.com/d/16zsXAUUmQYCGyYIhDbMmr_CzrrAc9quNujMnFaGBPlJoh87K3eFRHbF/edit?usp=sharing function doGet() { return HtmlService.createHtmlOutputFromFile('index'). setSandboxMode(HtmlService.SandboxMode.NATIVE); }
  • 30. Em arquivos separados Usando JavaScript e JQuery <div id="g1"> Google Apps Script </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" > $( function(){ $("#g1").animate({ "fontSize": "400%" }, 1000); } ) </script> function doGet() { return HtmlService.createHtmlOutputFromFile('index2'). setSandboxMode(HtmlService.SandboxMode.NATIVE); }
  • 31. Em arquivos separados Usando JavaScript e JQuery <div id="g1"> Google Apps Script </div> No link abaixo tenho disponível <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> uma aula detalhada sobre JQuery: <script type="text/javascript" > $( http://www.slideshare. function(){ net/skosta/cliente-side$("#g1").animate({ "fontSize": "400%" }, javascriptpptx 1000); } ) </script> function doGet() { return HtmlService.createHtmlOutputFromFile('index2'). setSandboxMode(HtmlService.SandboxMode.NATIVE); }
  • 32. Boas práticas Separar os arquivos, HTML, JavaScript e CSS.
  • 33. Mostrando dados de uma planilha Considere uma planilha com nomes e três notas de cada aluno, como no link a seguir: https://docs.google.com/spreadsheet/ccc? key=0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c&usp= sharing Este é o id da planilha 0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c Id (ou key)
  • 34. Mostrando dados de uma planilha Crie um novo projeto em branco, depois copie e cole o código abaixo: function doGet() { var output = HtmlService.createHtmlOutput(''); output.append("<h1>Notas Alunos</h1>") var sheet = SpreadsheetApp.openById( "0Avv93GPSzr6FdDRiNWlCREZnLVkzQ1VnTmpJaDJJU2c") var data = sheet.getDataRange().getValues() output.append("<table>") for (var i in data) { output.append("<tr>") for (var j in data[i]) { output.append("<td>").append(data[i][j]).append("</td>") } output.append("</tr>") } output.append("<table>") return output; } O id da planilha anterior, alunos e notas.
  • 35. Mostrando dados de uma planilha Como o aplicativo esta acessando uma planilha, é necessário autorizá-lo antes de publicar: Click em executar,
  • 36. Mostrando dados de uma planilha Como o aplicativo esta acessando uma planilha, é necessário autorizá-lo antes de publicar: Depois em continuar
  • 37. Mostrando dados de uma planilha Como o aplicativo esta acessando uma planilha, é necessário autorizá-lo antes de publicar: Depois em aceitar.
  • 38. Mostrando dados de uma planilha Depois de implantado, podera ser acessado em um navegador como abaixo:
  • 39. Mostrando dados de uma planilha index.html Versão usando Scriptlets Codigo.gs function doGet() { return HtmlService .createTemplateFromFile('index') .evaluate(); } function getData() { return SpreadsheetApp.openById( '0Avv93GPSzr6FdDhGR3ZqbHpDTHJCMXotQUFWcEstcGc'). getDataRange().getValues(); } <? var data = getData(); ?> <table> <? for (var i = 0; i < data.length; i++) { ?> <tr> <? for (var j = 0; j < data[i].length; j++) { ?> <td><?= data[i][j] ?></td> <? } ?> </tr> <? } ?> </table>
  • 40. Mostrando dados de uma planilha para uma página no google sites function atualizaPagina () { var output = HtmlService.createHtmlOutput(''); output.append("<h1>Notas Alunos</h1>") var sheet = SpreadsheetApp.getActiveSpreadsheet() var data = sheet.getDataRange().getValues() output.append("<table>") for (var i in data) { output.append("<tr>") for (var j in data[i]) { output.append("<td>").append(data[i][j]).append("</td>") } output.append("</tr>") } output.append("<table>") var page SitesApp.getPageByUrl('URLDAPAGINA”'); page.setHtmlContent (output.getContent()) } Esta função pode ser criada em um script da planilha.
  • 41. Mostrando dados de uma planilha para uma página no google sites Crie uma cópia da planilha com as notas dos alunos:
  • 42. Mostrando dados de uma planilha para uma página no google sites Para manter a página atualizada, crie um acionador (trigger) que será executado a cada hora.
  • 43. Mostrando dados de uma planilha para uma página no google sites Para manter a página atualizada, crie um acionador (trigger) que será executado a cada hora.
  • 44. UI service Os scripts podem usar um grande número de elementos de interfaces (widgets): ● Push buttons ● Radio buttons ● Toggle buttons ● Check boxes ● Text fields ● Labels ● Titles ● List boxes ● Dialog boxes ● Panels of many types
  • 45. UI service Exemplo de interface:
  • 46. UI service function criaApp () { var myapp = UiApp.createApplication().setTitle('Aplicativo UI'); var mygrid = myapp.createGrid(3, 2); mygrid.setWidget(0, 0, myapp.createLabel('Name:')); mygrid.setWidget(0, 1, myapp.createTextBox()); mygrid.setWidget(1, 0, myapp.createLabel('Idade:')); mygrid.setWidget(1, 1, myapp.createTextBox()); mygrid.setWidget(2, 0, myapp.createLabel('Cidade')); mygrid.setWidget(2, 1, myapp.createTextBox()); var mybutton = myapp.createButton('Click'); var handler = myapp.createServerHandler('myClickHandler'); mybutton.addClickHandler(handler); var mypanel = myapp.createVerticalPanel(); mypanel.add(mygrid); mypanel.add(mybutton); var label = myapp.createLabel('O botão foi clicado.') .setId('statusLabel') .setVisible(false); mypanel.add(label); myapp.add(mypanel); return myapp; }
  • 47. UI service function myClickHandler (e) { var app = UiApp.getActiveApplication(); var label = app.getElementById('statusLabel'); label.setVisible(true); app.close(); return app; } function doGet (e) { return criaApp(e); }
  • 48. Custom Menus e Sidebar
  • 49. Acessando serviços externos Carregando vídeos do youtube, a partir dos dados do XML. var xml = UrlFetchApp.fetch(youtubeURL).getContentText(); var document = XmlService.parse(xml); http://sergioscosta.blogspot. com. br/2013/09/incorporandovideos-do-youtube-no.html
  • 50. Acessando serviços externos com autenticação Acesse https://dev.twitter.com/ e crie um novo aplicativo: https://script.google.com/macros
  • 51. Acessando serviços externos com autenticação
  • 52. Acessando serviços externos com autenticação var consumerKey = 'XXXXX'; // Register your app with Twitter. var consumerSecret = 'XXXXX'; // Register your app with Twitter. var oauthConfig = UrlFetchApp.addOAuthService('twitter'); oauthConfig.setAccessTokenUrl( 'http://api.twitter.com/oauth/access_token'); https://developers.google.com/appsoauthConfig.setRequestTokenUrl( script/guides/services/external 'http://api.twitter.com/oauth/request_token'); oauthConfig.setAuthorizationUrl( 'http://api.twitter.com/oauth/authorize'); oauthConfig.setConsumerKey(consumerKey); oauthConfig.setConsumerSecret(consumerSecret); var options = { 'oAuthServiceName' : 'twitter', 'oAuthUseToken' : 'always' }; var url = 'http://api.twitter.com/1.1/statuses/user_timeline.json'; var response = UrlFetchApp.fetch(url, options); var tweets = JSON.parse(response.getContentText());
  • 53. Acessando serviços externos com autenticação (twitter) https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
  • 54. Acessando serviços externos com autenticação (twitter) var result = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/user_timeline. json?screen_name=profsergiocosta&count=5", options); var o = Utilities.jsonParse(result.getContentText()); var output = HtmlService.createHtmlOutput(''); output.append("<h1>Oficina - GAS</h1>") var index = 0; for (var i in o) { var post = o[i]; output.append("<p>").append(post.text).append ("</p>") } return output;
  • 55. Acessando serviços externos com autenticação (twitter) var result = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/user_timeline. json?screen_name=profsergiocosta&count=5", options); var o = Utilities.jsonParse(result.getContentText()); var output = HtmlService.createHtmlOutput(''); output.append("<h1>Oficina - GAS</h1>") var index = 0; for (var i in o) { var post = o[i]; output.append("<p>").append(post.text).append ("</p>") } return output;