Categorias
correios dicas dll web-service

Acompanhar rastreamento de pedido dos Correios com C#

Mais um artigo para quem trabalha com loja virtual… Essa funcionalidade ?? bem importante para visualizar o rastreamento de um determinado pedido. Ao inv??s de mandar apenas o link com o c??digo para seu cliente, porque n??o enviar logo a tabela com os dados? Pois bem, ?? isso que iremos fazer! O c??digo ?? bem simples, r??pido e pode-se alterar para uma “infinidades” de formas afim de o colocar do jeito que deseja.

Abaixo temos um resumo do processo:

  1. Enviamos uma requisi????o GET com o n??mero do rastreamento;
  2. Obtemos os dados de retorno (p??gina completa);
  3. Capturamos apenas a tabela com os dados de rastreamento;
  4. Exibimos na tela.
Para capturar a apenas a tabela com os dados, pode-se fazer de v??rias formas (Express??o Regular, etc), mas preferi usar um componente que captura n??s de um documento HTML, o HtmlAgilityPack. Baixe ele e o coloque na refer??ncia de seu projeto (Bin). Agora ?? f??cil – utilize o c??digo abaixo:
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HtmlAgilityPack;

protected void Page_Load(object sender, EventArgs e)
    {

        // Aplica campos de par??metros
        string codigo = “ES659170465BR”;
        string parametros = “?P_COD_UNI=” + codigo + “&P_LINGUA=001&P_TIPO=001”;
        // Cria o objeto de requisi????o
        WebRequest requisicao = WebRequest.Create(“http://websro.correios.com.br/sro_bin/txect01$.QueryList” + parametros);
        // Realiza a requisi????o
        HttpWebResponse retorno = (HttpWebResponse)requisicao.GetResponse();
        // L?? o objeto e faz a atribui????o ?? vari??vel
        StreamReader stream = new StreamReader(retorno.GetResponseStream(), Encoding.GetEncoding(“ISO-8859-1”));
        string dados = stream.ReadToEnd();
        // Transforma em um documento HTML – HtmlAgilityPack
        HtmlDocument html = new HtmlDocument();
        html.LoadHtml(dados);
        // Captura apenas a tabela contendo os dados do envio
        HtmlNode tabela = html.DocumentNode.SelectSingleNode(“//table”);
        if (tabela != null)
        {
            // Nesse caso voc?? pode capturar as colunas e linhas e trabalhar conforme desejar
            // Apenas fiz o loop para remover a formata????o inicial da tabela
            string htmlTable = “<table>”;
            // Extrai as linhas da tabela
            foreach (HtmlNode linha in tabela.SelectNodes(“//tr”))
                htmlTable += “<tr>” + linha.InnerHtml + “</tr>”;
            htmlTable += “</table>”;
            // Exibe a tabela de rastreamento
            Response.Write(“O hor??rio n??o indica quando a situa????o ocorreu, mas sim quando os dados foram recebidos pelo sistema, exceto no caso do <b>SEDEX 10 e do SEDEX Hoje, </b>em que ele  representa o hor??rio real da entrega.<br><br>” + htmlTable);
        }
        else
            Response.Write(“O nosso sistema n??o possui dados sobre o objeto informado. Se o objeto foi postado recentemente, ?? natural que seus rastros n??o tenham ingressado no sistema, nesse caso, por favor, tente novamente mais tarde. Adicionalmente, verifique se o c??digo digitado est?? correto: “ + codigo);
        // Finaliza objetos
        stream.Close();
        retorno.Close();

    }
No caso peguei o HTML da tabela contendo os dados e exibi de vez na tela. Poderia trat??-la de v??rias formas e uma delas poderia ser transformando-a em um DataTable ou DataSet para alguma manipula????o posterior. Veja nesse link aqui como fazer isso.
Os Correios n??o disp??e de Web-Service para esse tipo de consulta. Olhando na net, encontrei dois artigos: um de Manoel Campos e outro de Carlos Ferrari onde ambos disp??e de Web-Services (em PHP – mas pode ser consumido pelo ASP.NET) para esse tipo de consulta. Quem n??o quiser implementar e apenas consumir, podem us??-los que chega o mesmo objetivo.
Artigo bem f??cil e r??pido! Espero ter ajudado…

4 respostas em “Acompanhar rastreamento de pedido dos Correios com C#”

Deixe um comentário para Cabelinho Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *