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.930 ]

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

Streams, lendo do teclado e escrevendo em arquivos com Java

Introdução ao Desenvolvimento Android

Portugol Online - Software livre para facilitar o estudo de algoritmos

Gerando logs em Java

Terasology: O Minecraft gratuito e com gráfico realista

  
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