domingo, 18 de junho de 2017

Lendo o código fonte HTML de uma página web com Apex - Salesforce

Quem nunca precisou fazer um request em uma URL para pegar o HTML de uma página, visando buscar e tratar algum conteúdo dessa página?
Me lembro da época de faculdade que um professor solicitou que acessássemos o site do INPE (Instituto de Pesquisas Espaciais), usando C++, para buscar dados históricos de meteorologia e armazená-las em uma tabela de banco de dados. Foi uma desafio bem legal na época... Esses dias lembrei dessa situação e pensei: Seria possível acessar o HTML de uma página após uma requisição, no Apex do Salesforce? Sim. É possível! Veja:

Nesse exemplo, resolvi buscar a previsão do tempo atual no site Clima Tempo. Para inciar, é necessário registrar o site do clima tempo, como site seguro no Salesforce. Para tal, é necessário configurar o site do Clima Tempo na Configurações de site remoto:



E adicionar o site:



Após isso, podemos criar nossa classe para fazer o request no site do Clima Tempo:

public class PrevisaoTempoController {
    
    public String temperatura { get; set; }
    
    public PrevisaoTempoController(){
        
        String url = 'https://www.climatempo.com.br/previsao-do-tempo/aeroporto/258/belohorizonte-mg';
        
        Http h = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint(url);
        request.setMethod('GET');
        
        HttpResponse response = h.send(request);
        String htmlRetorno = response.getBody().replaceAll('\\n', ' ');
        
        //Tratando conteúdo
        integer indice = htmlRetorno.indexOf('id="momento-temperatura">');
        this.temperatura = htmlRetorno.substring(25 + indice, 27 + indice);
    }
}


Veja que faço uma requisição com o HttpRequest na URL que tem a previsão do tempo de Belo Horizonte. Com o método getBody() do response, consigo o HTML de retorno. As linhas finais são apenas para pegar a informação específica dentro do HTML. É importante ressaltar que esse tratamento da informação pode parar de funcionar, caso o Clima Tempo altere seu site.

Por fim, um Visualforce simples para exibir as informações de temperatura:

<apex:page controller="PrevisaoTempoController">
    
    Temperatura em Belo Horizonte: {!temperatura}°
    
</apex:page>


Veja o resultado final renderizado, de nossa página Visualforce:



Por hoje é isso! Até mais...


* Precisa de um suporte ou consultoria nos desenvolvimentos Apex sua Org Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/ - Somos parceiros gerenciado Salesforce.



Nenhum comentário: