De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Airton Carrara
Data de Publicação: 01 de julho de 2009
Data de Publicação: 01 de July de 2009
Para uso em um sistema de cálculo de diárias, precisávamos da distância de nossa cidade (Taubaté-SP) para as demais cidades brasileiras.
O Google Maps fornece a distância, além da rota e o mapa.
A idéia foi programar um "robô" para fazer as milhares de pesquisas, obter o resultado e manipulá-lo para extrair somente a informção necessária.
Partimos de um arquivo previamente montado com as url's, o urls.txt. Algumas linhas deste arquivo como exemplo:
O arquivo acima foi montado a partir de uma base de dados dos Correios, com as cidades e seus estados.
Após processado pelo "robô", o arquivo resultante (distancias_de_taubate.txt) apresenta:
Acrelândia AC 3.500 Brasiléia AC 3.779 Capixaba AC 3.634
de fácil utilização em bancos de dados ou planilhas.
O "robô" é um programa em Java. Os arquivos acima estão(rão) no diretório C:\. Altere como desejar...
Em nossas instalações, obtivemos os dados em 5 horas de processamento.
_INICIO DO PROGRAMA Distancias.java_ /** * Distancias.java * * @version 1.0 - 06/05/2009 * * Obtém as distâncias, em km, de Taubaté às demais cidades do Brasil. * Fonte: http://maps.google.com * * Entrada: c://urls.txt - arquivos com as urls das cidades - 1 por linha * Saída: c://distancias_de_taubate.txt * */ package br.unitau; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JOptionPane; /** * * @author Airton Carrara * */ public class Distancias extends JFrame{ private static final long serialVersionUID = 1L; String status = "Montando a lista..."; /** * * @throws MalformedURLException */ public Distancias() throws MalformedURLException { super("Descobrindo distâncias de Taubaté"); setLocationRelativeTo(null); setSize(400,200); setVisible(true); ArrayList< String> urlArray = new ArrayList< String>(); System.out.print("Montando a lista de cidades... "); long inicio = System.currentTimeMillis(); try { BufferedReader brArrayList = new BufferedReader(new FileReader("c://urls.txt")); String str; while((str = brArrayList.readLine()) != null){ urlArray.add(str); } brArrayList.close(); } catch (IOException e){ JOptionPane.showMessageDialog(null, e.toString(),"Erro!",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); return; } System.out.println("ok em " + String.valueOf(System.currentTimeMillis()-inicio) + " ms.\n"); URL url = null; long start = System.currentTimeMillis(); for (int i=0; i < urlArray.size(); i++){ url = new URL(urlArray.get(i)); String cidade0 = url.toString().substring(71); String cidade = cidade0.substring(0, cidade0.indexOf("+-")); cidade = cidade.replace("+", " "); String uf0 = url.toString().substring(url.toString().length()-11); String uf = uf0.substring(0, 2); obtemConteudo(url, i+1, urlArray.size(), cidade, uf); } long elapsedTimeMillis = System.currentTimeMillis()-start; System.out.println("Tempo em ms decorrido: " + elapsedTimeMillis); System.exit(DISPOSE_ON_CLOSE); } public void paint (Graphics g){ super.paint(g); g.setFont(new Font("SansSerif", Font.BOLD, 16)); g.setColor(Color.blue); g.drawString(status, 50, 100); } /** * Método para obtenção e tratamento do conteúdo da url, * a ser gravado em arquivo. * * @param url * @param i * @param total * @param cidade * @param uf */ private void obtemConteudo(URL url, int i, int total, String cidade, String uf){ try { StringBuffer sb = new StringBuffer(); BufferedReader brURL = new BufferedReader(new InputStreamReader(url.openStream())); String str; while ((str = brURL.readLine()) != null) { sb.append(str); } brURL.close(); int onde = sb.indexOf("< div class=dditd id=dditd>< div>< b>"); String str_onde = ""; String km = ""; if (onde > 0){ str_onde = sb.substring(onde+34, onde+34+15); int finao = str_onde.indexOf("&#"); km = str_onde.substring(0, finao); } System.out.println(i + " de " + total + " ::: " + cidade + " - " + uf + " - " + km + " km"); status = i + " de " + total + " ::: " + cidade + " - " + uf + " - " + km + " km"; repaint(); grava(cidade, uf, km); sb.setLength(0); } catch (MalformedURLException e) { JOptionPane.showMessageDialog(null, e.toString(),"Erro!",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } catch (IOException e) { JOptionPane.showMessageDialog(null, e.toString(),"Erro!",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } /** * Método para gravação no arquivo de saída c://distancias_de_taubate.txt * * @param cidade * @param uf * @param str_final */ private void grava(String cidade, String uf, String str_final){ try { File saida = new File("c://distancias_de_taubate.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(saida, true)); bw.write(cidade+"\t"+uf+"\t"+str_final); bw.write("\n"); bw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * Método principal * * @param args * @throws MalformedURLException */ public static void main(String[] args) throws MalformedURLException { Distancias dist = new Distancias(); dist.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } _FINAL DO PROGRAMA Distancias.java_
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários