Hey Guys!
Tudo bem ?
Neste post de hoje vou trazer algo muito legal, que é uma stored procedure Transact-SQL onde é possível consultar e rastrear as informações de encomendas e objetos utilizando dados do próprio site dos Correios no SQL Server. Para isso, vou utilizar o objeto MSXML2.ServerXMLHTTP e procedures OLE Automation para uma solução e o CLR para uma outra alternativa.
Isso é bem útil para empresas de e-Commerce que podem utilizar essa SP para integrar o rastreamento dos Correios a seus sistemas e exibir na tela o andamento da entrega de seus produtos.
Eu já havia mostrado uma solução bem parecida com essa no artigo Consultando o rastreamento de objetos dos Correios pelo SQL Server, mas essa solução parou de funcionar no dia 10/06, quando o Correios resolveu desativar o endereço que era executado no link http://websro.correios.com.br…, utilizado por vários sistemas de e-Commerce para fazer o rastreamento de objetos e no meu post anterior.
Com isso, precisei pensar em outra solução para fazer o rastreamento de objetos. Através de algumas buscas na internet, encontrei o serviço http://www.linkcorreios.com.br/, que permite fazer o rastreamento de forma bem precisa. Vamos ver como ele vai nos permitir rastrear objetos.
Como rastrear objetos utilizando OLE Automation
Uma forma bem simples e rápida de se fazer requisições HTTP Request pelo SQL Server é utilizando o recurso OLE Automation, que invoca bibliotecas e DLL’s externas para realizar vários tarefas pelo banco de dados. Veja neste link alguns outros posts sobre OLE Automation.
Antes de iniciarmos, vejamos alguns pré-requisitos para utilizar essa procedure:
– Habilitar o recurso OLE Automation no seu servidor SQL Server (veja como neste post)
– Função fncRemove_HTML para remover tags HTML de uma string varchar (veja mais neste post)
– Função fncSplitTexto para quebrar uma string em substrings utilizando um delimitador (veja mais neste post)
Um detalhe importante que observei no desenvolvimento dessa SP, é que se a quantidade de caracteres do XML de retornado pela procedure sp_OAGetProperty for superior a 4000 caracteres, o retorno da SP será NULL, uma vez que a procedure sp_OAGetProperty possui essa limitação de 4000 caracteres. Para contornar esse problema, ao invés de usar uma variável de OUTPUT para capturar os dados, eu os insiro em uma tabela temporária e depois trabalho com os dados. 🙂
Visualizar código-fonte da SP
Clique aqui para expandirComo rastrear objetos utilizando CLR
Uma outra forma de conseguir realizar requisições HTTP pelo SQL Server, é utilizando o CLR, uma poderosa ferramenta que a Microsoft disponibiliza e que permite criar programas escritos em C# ou VB, utilizando todos os recursos do Microsoft .NET Framework e executá-los pelo banco de dados. Caso você ainda não conheça o CLR, dê uma lida in this link here e acompanhe todos os meus artigos utilizando o CLR neste link.
Pré-requisitos para utilizar essa procedure:
– Função fncRemove_HTML para remover tags HTML de uma string varchar (veja mais neste post)
– Função fncSplit_Texto para quebrar o HTML em linhas (veja mais neste post)
– Stored Procedure stpWs_Requisicao para realizar as requisições HTTP (veja mais neste post)
Visualizar código-fonte da SP
Clique aqui para expandirResultado das SP’s
Ambas as Stored Procedures tem exatamente o mesmo retorno. Apenas o codificação das duas é que se difere. Uma vez que você escolher qual das duas abordagens quer seguir, o resultado da SP será assim:
And that's it, folks!
Espero que tenham gostado desse post e deixem o seu comentário.
sql server tsql transact sql query rastreamento encomendas objetos correios
sql server tsql transact sql query rastreamento encomendas objetos correios
Boa noite Dirceu. Ótimo trabalho, rodei no servidor mas está retornando valor zero. Saberia me dar uma dica se estou fazendo algo errado no SQL server
Excelente, não conhecia nada pro SQL Server. muito bom. Já uso Link Correios alguns anos para enviar aos clientes da loja da minha esposa, eles também deixam colocar logo da loja para quem possui e-commerce. São realmente muito bons. Esses outros sites são lentos e caem. o LinkCorreios.com.br é incrível pois todo mundo cai e eles não. Será que poderias ensinar algo similar usando o http://www.supertrack.com.br para rastrear Fedex e JadLog?
Estou adicionando à minha lista de postagens. Obrigado pela dica 🙂
Oi Dirceu,
Gostei muito do seu artigo, eu já tinha feito algo parecido usando a api do site Link & Track (www.linketrack.com), eles devolvem a resposta em JSON, CSV OU XML o que facilita bastante a manipulação da resposta, ao invés de fazer scrapping de HTML.
Boa dica, hein Paulo! Vou dar uma olhada e faço em artigo em breve sobre isso 😉
Valeu!!