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:
- Enviamos uma requisi????o GET com o n??mero do rastreamento;
- Obtemos os dados de retorno (p??gina completa);
- Capturamos apenas a tabela com os dados de rastreamento;
- 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#”
Muito bom, ajudou muito.. Estava precisando dessa informa????o. Obrigado.
Os Correios tem sim um webservice que retorna os dados em XML. D?? uma olhada nas especifica????es do SRO XML no blog dos Correios.
como inserir dentro de um outro elemento html da minha pagina?
Ola, como implementar isso no visual studio em um software offline sem ser uma pagina web ? A minha duvida e como configurar tabela para exibir as informacoes ?