SOBRE RASTREAMENTO CORREIOS

JOAOBENEVIDES 05/11/2015 16:40:38
#453493
Ola Pessoal , eu peguei aqui no forum um sistema que esta vb.net para rastreamento de encomenda , porem como uso c# estou com dificuldades para usar ele se alguem puder me ajudar , eu ja traduzi maioria dele mais falta esta parte
Public Shared Sub executar(ByVal browser As WebBrowser)
Dim txtIdentificador As HtmlElement = browser.Document.GetElementById([Ô]P_COD_UNI[Ô]) [ô]TextBox do site onde se coloca o nº do objeto
Dim colecao As HtmlElementCollection = browser.Document.GetElementsByTagName([Ô]textarea[Ô])
Dim txtArea As HtmlElement = Nothing
Dim botao As HtmlElement = Nothing
Dim clique As mshtml.IHTMLElement
Dim temp As String [ô]Variáveis
Dim vetor(), Tags() As String [ô]Arrays
Dim Item As ListViewItem = Nothing
Dim local As String = String.Empty
Dim Erro As String = String.Empty
Dim HTML As New trabalhoWeb

With FrmResultado
.Panel1.BringToFront()
.Panel1.Dock = dockPanel1(.Panel1)
.ListView1.Items.Clear()

For Each coisa As HtmlElement In colecao
If coisa.Id = [Ô]objetos[Ô] Then
Console.WriteLine()
txtArea = coisa
Exit For
End If
Next

txtArea.InnerText = codigo [ô]Insere o nº de rastreamento no TexBox do site
classes.generico.esperar()
botao = browser.Document.GetElementById([Ô]btnPesq[Ô])
clique = botao.DomElement
clique.click()
classes.generico.esperar()
classes.generico.carregarBrowser(browser)
Erro = browser.Document.Body.InnerText
trabalhoWeb.iniciaHTML

Using traba As New trabalho
If Not Erro.Contains([Ô]O nosso sistema não possui dados[Ô]) Then
vetor = traba.pegaConteudoTabela(browser)

For A = 1 To UBound(vetor) [ô]Loop pelo Primeiro Array
Tags = Split(vetor(A), [Ô]<td[Ô]) [ô]Separa o conteudo de Vetor pela taga <TD>

For B = LBound(Tags) To UBound(Tags) [ô]Loop pelo 2º Array (Contém os dados que se quer retornar
If Not Tags(B) = vbCrLf Then [ô]Verifica se não é um Line Feed
If Not Tags(B) = vbLf Then
temp = traba.preparaItem(Tags(B))

If temp.Contains([Ô]:[Ô]) Then [ô]Se contiver [Ô]:[Ô]
traba.data = temp [ô]pega a data
traba.hora = temp [ô]pega o horário
traba.local = temp [ô]pega o local
Else
traba.situacao = temp [ô]pega a situação
End If
End If
End If
Next

traba.insereItemsListView(.ListView1)
trabalhoWeb.criaItem(traba.data, traba.hora, traba.local, traba.situacao, traba.observacoes)
Next
Else
exibeErro()
GoTo Erro
End If

classes.generico.navegar(.WebBrowser1)
End Using

trabalhoWeb.finalizaHTML()
trabalhoWeb.insereHTML()
.lblStatus.Text = [Ô]Concluído[Ô]
.Panel1.Dock = dockPanel1(.Panel1, False)
End With
Erro:
End Sub

se alguem tiver alguma outra ideia , estou usando windows forms

Obrigado

Joao
KURTGU 05/11/2015 17:17:30
#453496
para converter use aqui http://converter.telerik.com/

ou procure sobre sharpdeveloper mais precisamente a versao 3 ela tem um conversor de vb para c# e c# para vb....
ASHKATCHUP 05/11/2015 20:08:33
#453514
Tu precisa saber se foi entregue ou rastrear cada passo?

Se precisar confirmar a entrega, eu uso o código abaixo. é orientado a gambiarra mas funcional =)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;

namespace ConsultaCorreios
{
public class ValidaStatus
{

#region Propriedades

public string codigo { get; set; }
public string data { get; set; }
public string status { get; set; }

string urlfixa = @[Ô]http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&P_TIPO=001&P_COD_UNI=[Ô];

#endregion

#region Construtores

public ValidaStatus()
{

}

public ValidaStatus(string codigoEncomenda)
{
codigo = codigoEncomenda;
}

#endregion

public bool Validar()
{
string link = String.Concat(urlfixa, codigo);

Uri site = new Uri(link);

System.Net.HttpWebRequest req;
req = (HttpWebRequest)System.Net.HttpWebRequest.Create(site);

if (req.GetResponse().ContentLength > 0)
{
System.IO.StreamReader str = new StreamReader(req.GetResponse().GetResponseStream());

string texto = str.ReadToEnd();

if (texto.Length > 0)
{
if (texto.ToLower().Contains([Ô]entregue[Ô]) || texto.ToLower().Contains([Ô]entrega efetuada[Ô]))
{
string[] separador = new string[] { [Ô]<tr>[Ô] };

StringSplitOptions op = new StringSplitOptions();

string[] pagina = texto.Split(separador, op);

if (pagina.Length > 1)
{
string[] aux = pagina[2].Split([ô]>[ô]);

if (aux.Length > 2)
{
string[] fim = aux[1].Split([ô]<[ô]);

data = fim[0];
}
}

status = [Ô]entregue[Ô];

return true;
}
else
{
string[] separador = new string[] { [Ô]<tr>[Ô] };

StringSplitOptions op = new StringSplitOptions();

string[] pagina = texto.Split(separador, op);

if (pagina.Length > 2)
{
string[] aux = pagina[2].Split([ô]>[ô]);

if (aux.Length > 4)
{
string[] fim = aux[3].Split([ô]<[ô]);

status = fim[0];
}
}

}
}
}

return false;
}
}
}

JOAOBENEVIDES 06/11/2015 07:57:05
#453531
eu queria saber desde do inicio o que aconteceu com o objeto é possivel fazer isto com seu codigo
ASHKATCHUP 06/11/2015 10:05:48
#453547
Bom dia.

O meu código não faz isso mas é algo simples de ser implementado.

Como o meu código lê o HTML da página de rastreamento de objetos (http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&P_TIPO=001&P_COD_UNI=PI827857505BR), tu só precisaria analisar o código HTML e separá-lo.

  • Dando uma olhada rápida, percebi que todo histórico do objeto se encontra dentro de um <table></table>
  • Cada linha na tabela, ou seja, <tr></tr> representa uma movimentação do objeto
  • Cada coluna na tabela, ou seja, <td></td>, representa Data, Local e Situação
  • Se uma coluna (<TD>) possui a propriedade rowspan = 2 significa que ela idêntica na linha atual e na próxima linha

    Com essas informações tu vai ser capaz de quebrar o arquivo HTML, se quiser.

    Do contrário, tu pode utilizar uma API gratuita: http://developers.agenciaideias.com.br/correios/rastreamento

    Ela retorna os dados em formato XML ou JSON, prontinhos.
  • PEGUDO 06/11/2015 10:58:35
    #453554
    Resposta escolhida
    JOAOBENEVIDES
    Você pode clicar no link abaixo, baixar a ferramenta e converter o código VB.NET para C#:
    LANGUAGE CONVERTER

    Abraços.
    Tópico encerrado , respostas não são mais permitidas