Professional Documents
Culture Documents
DesenvolvendoaplicaesWeb comJavaeGoogle
RafaelSantos
LaboratrioAssociadodeComputaoeMatemticaAplicada InstitutoNacionaldePesquisasEspaciais
Todosconhecemasinterfacesbsicasdeacesso(WWW)...
...massabiamquepodemosdesenvolvercdigousandofunesdo Google?
http://www.lac.inpe.br/~rafael.santos 2
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
Dezembro/2006
Sobreapalestra
ProgramandocomaGoogleSOAPSearchAPI
Exemploscomcdigo,semdescriodedesign.
Working code attracts people who want to code. Design documents attract people who want to talk about coding -- Charles Miller.
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 3
ODKcontmtambmdocumentao!
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
Partetcnica:setup
Partetcnica:setup
VocprecisadeumacontanoGoogle(quaseautomtico paraquemtemcontanoGmail).
Umalicenaserenviadaparaseuemail. Alicenapermite1000acessosdiriosparausonocomercial.
Ambienterecomendado:Eclipse(www.eclipse.org). Passos:
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
DesenvolvendoaplicaessimplescomGSA
DesenvolvendoaplicaessimplescomGSA(1)
import java.io.*; import com.google.soap.search.*; public class BuscaSimples { public static void main(String[] args) { String googleKey = readKey(); GoogleSearch s = new GoogleSearch(); try { s.setKey(googleKey); s.setQueryString("aplicaes cientficas em Java"); GoogleSearchResult resultado = s.doSearch(); GoogleSearchResultElement[] elementos = resultado.getResultElements(); for (GoogleSearchResultElement elemento:elementos) { System.out.println(elemento.getTitle()+": "+elemento.getURL()); } } catch (GoogleSearchFault f) { System.out.println("Erro na busca:"+f.toString()); } }
7 Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 8
AgorasusaraAPI!
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
DesenvolvendoaplicaessimplescomGSA(1)
private static String readKey() { String key = null; try { BufferedReader br = new BufferedReader(new FileReader("google.key")); key = br.readLine(); br.close(); } catch(IOException ioe) { } return key; } }
LCP - Projetos: http://www.lcp.coppe.ufrj.br/projetos.html LA-Web/WebMedia 2004: http://www.icmc.usp.br/laweb/webmedia/shortcourses.php MIT - Introduo Soluo de Problemas de Computao e Engenharia <b>...</b>: http://www.universiabrasil.net/mit/curso.jsp?codcurso=30 in Latin America | Bem vindo ao site do TCSC em Amrica Latina: http://tcsc.ic.uff.br/node?page=2 EXEHDA: http://www.inf.ufrgs.br/~exehda/index.php?arquivo=atividades Introduo Internet: http://mesonpi.cat.cbpf.br/escola99/II.html Introduo Internet: http://mesonpi.cat.cbpf.br/verao98/Nilton.html ...
DesenvolvendoaplicaessimplescomGSA(2)
import java.util.ArrayList; import javax.swing.table.AbstractTableModel; public class TabelaBuscaMelhorada extends AbstractTableModel { private String[] colunas = {"Ttulo","URL","Contexto"}; private ArrayList<ArrayList<String>> entradas; public TabelaBuscaMelhorada() { super(); entradas = new ArrayList<ArrayList<String>>(); } public void adicionaLinha(ArrayList<String> linha) { entradas.add(linha); } public String getColumnName(int column) { return colunas[column]; }
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
10
DesenvolvendoaplicaessimplescomGSA(2)
public int getColumnCount() { return colunas.length; } public int getRowCount() { return entradas.size(); } public Object getValueAt(int rowIndex, int columnIndex) { if ((rowIndex >= 0) && (rowIndex < entradas.size())) { ArrayList<String> entrada = entradas.get(rowIndex); if ((columnIndex >= 0) && (columnIndex < entrada.size())) return entrada.get(columnIndex); } return null; } } import import import import
DesenvolvendoaplicaessimplescomGSA(2)
java.io.*; java.util.ArrayList; javax.swing.*; com.google.soap.search.*;
public class BuscaMelhorada extends JFrame { private TabelaBuscaMelhorada tabelaDados; private int numResultados; public BuscaMelhorada(String busca) { tabelaDados = new TabelaBuscaMelhorada(); String googleKey = readKey(); GoogleSearch s = new GoogleSearch(); try { s.setKey(googleKey); s.setQueryString(busca); s.setSafeSearch(true); s.setLanguageRestricts("lang_br"); GoogleSearchResult resultado = s.doSearch(); numResultados = resultado.getEstimatedTotalResultsCount(); GoogleSearchResultElement[] elementos = resultado.getResultElements();
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
11
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
12
DesenvolvendoaplicaessimplescomGSA(2)
for (GoogleSearchResultElement elemento:elementos) { ArrayList<String> linha = new ArrayList<String>(); linha.add(elemento.getTitle()); linha.add(elemento.getURL()); linha.add(elemento.getSnippet()); tabelaDados.adicionaLinha(linha); } } catch (GoogleSearchFault f) { System.out.println("Erro na busca:"+f.toString()); } // Comeamos a montar a GUI setTitle("Busca por ["+busca+"] (aprox. "+1+" resultados)"); getContentPane().add(new JScrollPane(new JTable(tabelaDados))); pack(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new BuscaMelhorada("Google Java API"); }
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 13
DesenvolvendoaplicaessimplescomGSA(2)
Divertido,masnotanto...
Potencialenormeparacustomizao(selimitesforem removidos).
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 14
ProgramandocomaGoogleDataAPI
Partetcnica:setup
AdicionamosaoEclipseosgdataclient1.0.jaregdata calendar1.0.jar.
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
15
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
16
Partetcnica:setup
Partetcnica:setup
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
17
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
18
Partetcnica:setup
import import import import import import import
DesenvolvendoaplicaessimplescomGDA(1)
java.io.IOException; java.net.URL; java.util.List; com.google.gdata.client.calendar.*; com.google.gdata.data.*; com.google.gdata.data.extensions.*; com.google.gdata.util.*;
public class LeAgenda { public static void main(String[] args) throws IOException { URL urlCalendrio = new URL("http://www.google.com/calendar/feeds/default/private/full"); CalendarQuery consultaCalendrio = new CalendarQuery(urlCalendrio); consultaCalendrio.setMinimumStartTime( DateTime.parseDateTime("2006-12-11T00:00:00+11:00")); consultaCalendrio.setMaximumStartTime( DateTime.parseDateTime("2006-12-15T23:59:59+11:00")); CalendarService servioCalendrio = new CalendarService("ExemploApp");
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
19
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
20
DesenvolvendoaplicaessimplescomGDA(1)
try { servioCalendrio.setUserCredentials("rafaeldcsantos@gmail.com",P.senhaGmail); Feed resultado = servioCalendrio.query(consultaCalendrio, Feed.class); List<Entry> entradas = resultado.getEntries(); for(Entry e:entradas) { EventEntry ce = new EventEntry(e); String ttulo = ce.getTitle().getPlainText(); String contedo = ""; if (ce.getContent().getType() == Content.Type.TEXT) { TextContent tc = (TextContent)ce.getContent(); contedo = tc.getContent().getPlainText(); } List<When> quando = ce.getTimes(); System.out.println("Quando:"); for(When w:quando) { DateTime incio = w.getStartTime(); incio.setTzShift(-11*60); DateTime fim = w.getEndTime(); fim.setTzShift(-11*60); System.out.println(incio.toUiString()+" a "+fim.toUiString()); }
DesenvolvendoaplicaessimplescomGDA(1)
System.out.println("O que:"); System.out.println(ttulo); if (contedo.length() > 0) { System.out.println("Detalhes:"); System.out.println(contedo); } DateTime publicado = ce.getPublished(); publicado.setTzShift(-11*60); System.out.println("Publicado em "+publicado.toUiString()); System.out.println("--------------------------------------------------"); } } catch (AuthenticationException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } } }
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
21
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
22
DesenvolvendoaplicaessimplescomGDA(1)
Quando: 2006-12-12 14:00 a 2006-12-12 15:00 2006-12-11 14:00 a 2006-12-11 15:00 2006-12-14 14:00 a 2006-12-14 15:00 2006-12-10 14:00 a 2006-12-10 15:00 2006-12-13 14:00 a 2006-12-13 15:00 O que: Treinamento XP Detalhes: Treinamento em metodologia XP (introduo) Publicado em 2006-12-06 06:41 -------------------------------------------------Quando: 2006-12-14 17:00 a 2006-12-14 18:00 O que: Dentista Detalhes: Lembrar de pegar oramento! Publicado em 2006-12-06 06:27 -------------------------------------------------Quando: 2006-12-12 16:00 a 2006-12-12 20:00 O que: Curso de Aplicaes Cientficas Detalhes: Curso sobre desenvolvimento de aplicaes cientficas Publicado em 2006-12-06 06:26 -------------------------------------------------Quando: 2006-12-10 19:00 a 2006-12-10 20:00 O que: Palestra Java e Google Publicado em 2006-12-06 05:59 --------------------------------------------------
DesenvolvendoaplicaessimplescomGDA(2)
import import import import import import java.io.IOException; java.net.URL; com.google.gdata.client.calendar.CalendarService; com.google.gdata.data.*; com.google.gdata.data.extensions.*; com.google.gdata.util.*;
public class ModificaAgenda { public static void main(String[] args) throws IOException { URL urlCalendrio = new URL("http://www.google.com/calendar/feeds/default/private/full"); EventEntry entrada = new EventEntry(); entrada.setTitle(new PlainTextConstruct("Curso de Java ELAC")); entrada.setContent(new PlainTextConstruct("Mini-curso na escola de+ vero do LAC")); Person autor = new Person("Rafael Santos", null, "rafaeldcsantos@gmail.com"); entrada.getAuthors().add(autor); DateTime incio = DateTime.parseDateTime("2007-01-30T14:00:00+11:00"); DateTime fim = DateTime.parseDateTime("2007-01-30T17:15:00+11:00"); When horrioEvento = new When(); horrioEvento.setStartTime(incio); horrioEvento.setEndTime(fim);
23 Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 24
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
DesenvolvendoaplicaessimplescomGDA(2)
entrada.addTime(horrioEvento); CalendarService servio = new CalendarService("ExemploApp"); try { servio.setUserCredentials("rafaeldcsantos@gmail.com",Personal.senhaGmail); EventEntry entradaModificada = servio.insert(urlCalendrio,entrada); System.out.println(entradaModificada.getId()); System.out.println(entradaModificada.getPublished()); } catch (AuthenticationException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } } }
DesenvolvendoaplicaessimplescomGDA(2)
http://www.google.com/calendar/feeds/default/private/full/96s67icco3qtvc84gg9cdp0kcc 2006-12-06T23:06:39.000Z
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
25
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
26
ProgramandocomaGoogleMapsAPI
Partetcnica:setup
Limitesbemgenerososparaaplicaessimples! InteratividadetodaemJavaScript,mas...
necessrioseregistrarseparadamenteparaobteracessoAPI.
Testesdevemserfeitosnomesmoservidordedeployment!
...podemosusarJSP/Servletsparaadicionar(mais)lgica!
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
27
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
28
DesenvolvendoaplicaessimplescomGMA(1)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Exemplo com Google Maps</title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA4pOlVHnW5h0rxGx-M9fBBSehV83twcaz1QuVwko5BmHT1khXxTdvk1AFVxM8aXmz0epCmP2xsF3bA" type="text/javascript"></script> <script type="text/javascript"> function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(-23.227465,-45.838394),12); } } </script> </head> <body onload="load()" onunload="GUnload()"> <h3>Mapa de So Jos dos Campos</h3> <div id="map" style="width: 1040px; height: 450px"></div> </body> </html>
DesenvolvendoaplicaessimplescomGMA(1)
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
29
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
30
DesenvolvendoaplicaessimplescomGMA(2)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Exemplo com Google Maps</title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA4pOlVHnW5h0rxGx-M9fBBSehV83twcaz1QuVwko5BmHT1khXxTdvk1AFVxM8aXmz0epCmP2xsF3bA" type="text/javascript"></script> <script type="text/javascript"> function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(-23.227465,-45.838394),12); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.setMapType(G_SATELLITE_TYPE); addPoints(map); } }
DesenvolvendoaplicaessimplescomGMA(2)
function addPoints(map) { var icon = new GIcon(); icon.image = "http://www.google.com/mapfiles/marker.png"; icon.shadow = "http://www.google.com/mapfiles/shadow50.png"; icon.iconSize = new GSize(20, 34); icon.shadowSize = new GSize(37, 34); icon.iconAnchor = new GPoint(9, 34); icon.infoWindowAnchor = new GPoint(9, 2); icon.infoShadowAnchor = new GPoint(18, 25); var newpoints = new Array(); newpoints[0] = new Array(-23.207824014188837, -45.86015224456787, icon, 'INPE', 'Aqui fica o Instituto Nacional de Pesquisas Espaciais'); newpoints[1] = new Array(-23.19934356453084, -45.91113567352295, icon, 'IBTA', 'A palestra foi aqui!'); for(var i = 0; i < newpoints.length; i++) { var point = new GPoint(newpoints[i][1],newpoints[i][0]); var popuphtml = newpoints[i][4] ; var marker = createMarker(point,newpoints[i][2],popuphtml); map.addOverlay(marker); } }
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
31
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
32
DesenvolvendoaplicaessimplescomGMA(2)
function createMarker(point, icon, popuphtml) { var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>"; var marker = new GMarker(point, icon); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(popuphtml); }); return marker; } </script> </head> <body onload="load()" onunload="GUnload()"> <h3>Mapa de So Jos dos Campos</h3> <div id="map" style="width: 1040px; height: 450px"></div> </body> </html>
DesenvolvendoaplicaessimplescomGMA(2)
Ajudainestimveldehttp://mapmaker.donkeymagic.co.uk/
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 33 Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 34
DesenvolvendoaplicaessimplescomGMA(3)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Exemplo com Google Maps</title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA4pOlVHnW5h0rxGx-M9fBBSehV83twcaz1QuVwko5BmHT1khXxTdvk1AFVxM8aXmz0epCmP2xsF3bA" type="text/javascript"></script> </head> <body> <h3>Mapa de So Jos dos Campos</h3> <div id="map" style="width: 1040px; height: 450px"></div> <script type="text/javascript"> var map; map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(-23.207587357776266,-45.889549255371094),14); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.setMapType(G_HYBRID_TYPE);
DesenvolvendoaplicaessimplescomGMA(3)
var x_array = new Array(0); var y_array = new Array(0); x_array.push(-23.21504183342577); y_array.push(-45.90961217880249); x_array.push(-23.213917772458363); y_array.push(-45.90989112854004); x_array.push(-23.20900728996491); y_array.push(-45.908989906311035); ... ... x_array.push(-23.206778778537803); y_array.push(-45.86124658584595); map.clearOverlays(); var points = []; for (i = 0; i < x_array.length; i++) { var point = new GPoint(y_array[i], x_array[i]); points.push(point); } map.addOverlay(new GPolyline(points)); </script> </body> </html>
Ajudainestimvelde http://www.mappinghacks.com/projects/gmaps/
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 36
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
35
DesenvolvendoaplicaessimplescomGMA(3)
Comentriosfinais AlgumasAPIssoumtantoquantocomplexas...
UtilidadedoGoogleSOAPAPI?
Maiorproblema:continuidade/maturaodasAPIs.
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
37
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
38
Comentriosfinais
Comentriosfinais
FuturodestasAPIs
Mashing,Web2.0:Muitaspossibilidades,masmuitohype.
Existempossibilidadescomerciaisoubenefciosindiretos?
Algunsserviospossivelmentesobreviveromelhorsemais ferramentasforemdisponibilizadas.
Dezembro/2006 http://www.lac.inpe.br/~rafael.santos 39
Referncias:
Perguntas?
Dezembro/2006
http://www.lac.inpe.br/~rafael.santos
40