Recuperando cotação do dólar

Este artigo tem o objetivo de descrever uma aplicação que utiliza expressões regulares para extrair um determinado conteúdo em um site na Web. No nosso estudo de caso, vamos extrair a cotação do dólar que está no site do Banco Central.

[ Hits: 20.834 ]

Por: Javier Zambrano Ferreira em 19/05/2008


Classe Cotação



Com o nosso Bean criado, podemos criar a nossa classe que fará o acesso ao Site do Banco Central e depois irá extrair os dados da cotação.

O nome da Classe será Cotacao. O que iremos mostrar abaixo é a classe e na próxima página iremos comentar cada trecho do código.

import java.net.*;
import java.io.*;
import java.util.regex.*;

/**
*Class Cotacao
* Created by Javier Zambrano Ferreria
* Date: 03/03/2008
* Purpose: acessar a página do banco central que contém a cotação do último dia,
* remover os dados de interesse (data e taxa de venda) e acrescentar na tabela do
* DCR.
* @author javierzf
*/

public class Cotacao {

private final String  fonte= "http://www5.bcb.gov.br/pec/taxas/batch/taxas.asp?id=txdolar";

//A constante fonte é uma string que contém a url onde a cotação é divulgada no site do banco central;

    private CotacaoBean cotacao;//classe bean para a cotação
    
   //método construtor
    public Cotacao() {
        cotacao = new CotacaoBean();
    }

    /**
     * Responsável em extrair as informações: data e taxa de venda.
     * @param texto
     */

    private void Extrai(String texto) {
  
        String data = new String();
        String taxavenda = new String();
        String textocota= new String();
                
        /**
         * Removendo texto que interessa com expressões regulares
         */

        
        Pattern tabelacota = Pattern.compile("<table cellspacing=\"1\" summary=\"Cotação de fechamento do Dólar americano\">(.*?)</table>");
        Matcher m = tabelacota.matcher(texto);
        if(m.find()) {
            //System.out.println(m.group());
            textocota = m.group();
        }
        
        Pattern datacota = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)");
        Matcher datam = datacota.matcher(textocota);
        
        if(datam.find()) {
            data = datam.group();
        }
        
        Pattern taxacota = Pattern.compile("(\\d),(\\d+)</td></tr>");
        Matcher taxacotam = taxacota.matcher(textocota);
        
        if(taxacotam.find()) {
            taxavenda = taxacotam.group().replaceAll("</td></tr>", "");
            taxavenda = taxavenda.replace(",", ".");
        }
        
        //System.out.println("Data: " + data);
        //System.out.println("Taxa venda: " + taxavenda);
          
        this.cotacao.setData(data);
        this.cotacao.setTaxavenda(Float.parseFloat(taxavenda));
        
    }

/**
     * Método acessa a página com o conteúdo relevante e salva em uma string
     * o conteúdo.
     */

    public void getPage() {
        try {
            
            //Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.180.0.15", 3128) );

            URL url = new URL(fonte);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);
            //HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Request-Method", "GET");
            connection.setDoInput(true);
            connection.setDoOutput(false);
            connection.connect();
            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuffer newData = new StringBuffer(10000);
            String s = "";
            while (null != ((s = br.readLine()))) {
                newData.append(s+"\n");
                
            }
            br.close();
            //System.out.println(newData.toString());
            //Chamada do método para extrair as informações da página
            this.Extrai(newData.toString());
            
            //PrintWriter out = new PrintWriter(System.out, true);
            //out.println(new String(newData));

        } catch (MalformedURLException e) {
            System.err.println("Erro na URL");
            e.getMessage();
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("Erro de I/O");
            e.getMessage();
            e.printStackTrace();
        } catch (Exception e) {
            System.err.println("Erro geral");
            e.printStackTrace();
            e.getMessage();
        }
    }

//Imprime as informações da classe CotacaoBean
    public void ImprimeCotacaobean() {
        System.out.println("Cotação do Dólar");
        System.out.println("Data: " + this.cotacao.getData());
        System.out.println("Taxa de venda: " + this.cotacao.getTaxavenda());
    }
    
    public static void main(String[] args) {
        Cotacao cotacao = new Cotacao();        
        cotacao.getPage();
       cotacao.ImprimeCotacaobean();
    }

Página anterior     Próxima página

Páginas do artigo
   1. Introdução e definição de expressões regulares
   2. Nosso Bean
   3. Classe Cotação
   4. Comentário da Classe Cotacao
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Testes unitários em Java com JUnit

Montando um ambiente JAVA básico (Eclipse traduzido + JDK 1.5)

Gerando arquivos PDF com Java e iText

Gerando Números Aleatórios

Transforme seu celular em terminal sem fio SSH/Telnet

  
Comentários
[1] Comentário enviado por stremer em 20/05/2008 - 09:42h

Excelente! Muito bem explicado!

[2] Comentário enviado por raoniferreira em 20/05/2008 - 10:51h

parabens ai jzferreira!
belo artigo :P

[3] Comentário enviado por engos em 21/05/2008 - 08:47h

Muito bem detalhado, mas deveria ter dito que faria isso em Java, já na descrição.

Foi interessante o artigo, mas isso em PHP daria apenas 20% do trabalho, apesar de ser especialista em C, devo reconhecer que nesse tipo de caso a linguagem ideal é PHP.

[]s.

[4] Comentário enviado por jzferreira em 21/05/2008 - 09:41h

Caro engos,

Eu não coloquei que era em Java, pois o artigo está na seção Java - Expressões Regulares. Como é o meu primeiro artigo, fica anotado a sua sugestão de colocar em que linguagem. A respeito do PHP, eu programo também em PHP e realmente ficaria interessante, porém depende do tipo de projeto que você queira fazer. Acho que com o Java em um sistema robusto é melhor do

[5] Comentário enviado por jzferreira em 21/05/2008 - 09:41h

Caro engos,

Eu não coloquei que era em Java, pois o artigo está na seção Java - Expressões Regulares. Como é o meu primeiro artigo, fica anotado a sua sugestão de colocar em que linguagem. A respeito do PHP, eu programo também em PHP e realmente ficaria interessante, porém depende do tipo de projeto que você queira fazer. Acho que com o Java em um sistema robusto é melhor do que PHP, mas seria interessante ver essa recuperação de cotação do dólar em PHP também.

Valeu pelas dicas..

[]s

[6] Comentário enviado por jose4469 em 03/02/2014 - 22:02h

Olá, estou tendo problemas para criar o objeto Proxy para fazer a conexão.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts