none
Webservice de cotação da bolsa e dolar... RRS feed

  • Pergunta

  • Pessoal,

    Pesquisando pelo fórum vejo muitas pessoas perguntando se existe algum webservice já feito pra só ser consumido e tudo mais...

     

    A minha dúvida é como criar um webservice desse...

    Como fazer para pegar os dados e retornar pelo webservice...

     

    Se alguem puder ajudar...fico grato!

    quinta-feira, 25 de novembro de 2010 16:14

Respostas

  • Em tempo real vc so vai ter acesso pagando para o bovespa....

    mas tem uma forma de acessar esses dados da bolsa a cada 15 min... eu tava fazendo isso pro Android esses dias.. ta em java mais so pra dar uma ideia:

    public final class Bovespa {
    	private final static String URL_EMPRESAS = "http://www.bmfbovespa.com.br/pregao-online/ExecutaAcaoCotRapXSL.asp?intIdiomaXsl=3";
    	private final static String URL_COTACAO = "http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoCarregarDadosPapeis.asp?CodDado=";
    	
    	public static CotacaoAdapter carregarDadosPapeis(String codDado) {
    		CotacaoAdapter result = new CotacaoAdapter(Program.getCurrent());
    		try {
    			URLConnection connection = new URL(URL_COTACAO + codDado).openConnection();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			
    			String buffer = reader.readLine();		
    			String[] info = buffer.split("&");
    			String values = info[1].substring(2).replace('|', '&');
    			for (String cotacao : values.split("&")) {
    				result.add(new Cotacao(codDado, info[0].substring(2), cotacao));
    			}
    		} catch (Exception e) {
    			Log.e("carregarDadosPapeis", e.getLocalizedMessage());
    		}
    		return result;
    	}
    
    	public static AtivoAdapter cotRapXSL() {
    		AtivoAdapter result = new AtivoAdapter(Program.getCurrent());
    		try {
    			URLConnection connection = new URL(URL_EMPRESAS).openConnection();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			
    			int tables = 0;
    			List<String> source = new ArrayList<String>();
    			String buffer = null;
    			while ((buffer = reader.readLine()) != null) {
    				if (buffer.startsWith("<table")) tables++;
    				if (tables == 3) {
    					if (buffer.startsWith("<font face=\"verdana\"")) source.add(buffer);
    					if (buffer.startsWith("<td") && buffer.length() > 66) source.add(buffer);
    					if (buffer.startsWith("</table>")) break;
    				}
    			}
    			
    			for (int i = 0; i < source.size(); i = i + 2) {
    				String empresa = source.get(i).substring(37, source.get(i).length() - 7);
    				String codigo = source.get(i + 1).substring(72, source.get(i + 1).indexOf("&"));
    				if (codigo == null || empresa == null) continue;
    				result.add(new Ativo(codigo, empresa));
    			}					
    		} catch (Exception e) {
    			Log.e("carregarDadosPapeis", e.getLocalizedMessage());
    		}
    		return result;
    	}
    }
    

     


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    quinta-feira, 25 de novembro de 2010 22:23
    Moderador
  • Maxelmetal,

    O que você pode fazer é criar um serviço que irá de tempos em tempos buscar as cotações no site da bovespa conforme o Rui mostrou no seu post e armazer estes dados em um banco de dados local.

    A partir dai você cria um WebService para a consulta das cotações baseados no seu banco de dados local.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 26 de novembro de 2010 12:43

Todas as Respostas

  • O que exatamente você está querendo fazer?

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 25 de novembro de 2010 22:06
  • Em tempo real vc so vai ter acesso pagando para o bovespa....

    mas tem uma forma de acessar esses dados da bolsa a cada 15 min... eu tava fazendo isso pro Android esses dias.. ta em java mais so pra dar uma ideia:

    public final class Bovespa {
    	private final static String URL_EMPRESAS = "http://www.bmfbovespa.com.br/pregao-online/ExecutaAcaoCotRapXSL.asp?intIdiomaXsl=3";
    	private final static String URL_COTACAO = "http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoCarregarDadosPapeis.asp?CodDado=";
    	
    	public static CotacaoAdapter carregarDadosPapeis(String codDado) {
    		CotacaoAdapter result = new CotacaoAdapter(Program.getCurrent());
    		try {
    			URLConnection connection = new URL(URL_COTACAO + codDado).openConnection();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			
    			String buffer = reader.readLine();		
    			String[] info = buffer.split("&");
    			String values = info[1].substring(2).replace('|', '&');
    			for (String cotacao : values.split("&")) {
    				result.add(new Cotacao(codDado, info[0].substring(2), cotacao));
    			}
    		} catch (Exception e) {
    			Log.e("carregarDadosPapeis", e.getLocalizedMessage());
    		}
    		return result;
    	}
    
    	public static AtivoAdapter cotRapXSL() {
    		AtivoAdapter result = new AtivoAdapter(Program.getCurrent());
    		try {
    			URLConnection connection = new URL(URL_EMPRESAS).openConnection();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			
    			int tables = 0;
    			List<String> source = new ArrayList<String>();
    			String buffer = null;
    			while ((buffer = reader.readLine()) != null) {
    				if (buffer.startsWith("<table")) tables++;
    				if (tables == 3) {
    					if (buffer.startsWith("<font face=\"verdana\"")) source.add(buffer);
    					if (buffer.startsWith("<td") && buffer.length() > 66) source.add(buffer);
    					if (buffer.startsWith("</table>")) break;
    				}
    			}
    			
    			for (int i = 0; i < source.size(); i = i + 2) {
    				String empresa = source.get(i).substring(37, source.get(i).length() - 7);
    				String codigo = source.get(i + 1).substring(72, source.get(i + 1).indexOf("&"));
    				if (codigo == null || empresa == null) continue;
    				result.add(new Ativo(codigo, empresa));
    			}					
    		} catch (Exception e) {
    			Log.e("carregarDadosPapeis", e.getLocalizedMessage());
    		}
    		return result;
    	}
    }
    

     


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    quinta-feira, 25 de novembro de 2010 22:23
    Moderador
  • O que exatamente você está querendo fazer?

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)

    O que quero fazer é justamente fazer um webservice para pegar esses dados da bovespa...não precisa ser em tempo real, mas a cada 5, 10 minutos...

     

    Quero colocar esses dados em alguns sites de clientes, mas não posso depender de terceiros para gerar esses dados, tenh que dar garantia de que sempre estarão disponiveis, por isso que queria construir o webservice...

    sexta-feira, 26 de novembro de 2010 11:19
  • Maxelmetal,

    O que você pode fazer é criar um serviço que irá de tempos em tempos buscar as cotações no site da bovespa conforme o Rui mostrou no seu post e armazer estes dados em um banco de dados local.

    A partir dai você cria um WebService para a consulta das cotações baseados no seu banco de dados local.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 26 de novembro de 2010 12:43