Classe, WebService e RSS para rastreamento de encomendas nos Correios em PHP

abril 10th, 2010 por caferrari Leave a reply »

Olá, depois de meses sem escrever estou voltando com uma classe muito útil e simples que nunca vi em lugar nenhum. É uma classe para rastrear encomendas nos correios que eu escrevi em PHP, que retorna um vetor com cada modificação de status lá.

Vamos direto ao ponto, confira o exemplo:

http://ferrari.eti.br/correios/samples/class.php

E para deixar a brincadeira mais divertida, fiz também um webservice com suporte a Json (padrão), phpserialize, XML e um modo dump, para visualização:

http://ferrari.eti.br/correios/webservice/?q=PB151832535BR
http://ferrari.eti.br/correios/webservice/?q=PB151832535BR&f=dump
http://ferrari.eti.br/correios/webservice/?q=PB151832535BR&f=serial
http://ferrari.eti.br/correios/webservice/?q=PB151832535BR&f=xml
e claro, para quem usa Ajax:
http://ferrari.eti.br/correios/webservice/?q=PB151832535BR&callback=minhaFuncJs

Disponibilizei tanto a classe quanto o código do webservice (que tem suporte a caching!) “de grátis” e com licença BSD no github:

http://github.com/caferrari/correios/

*UPDATE* Adicionado um gerador de RSS, assim é possível usar o proprio agregador para fazer o tracking!

http://ferrari.eti.br/correios/rss/?PB151832535BR

e em homenagem aos atendentes de telemarketing: Estarei esperando forks e colaborações para a classe, além de comentários!.

Até a próxima.

11 comments

  1. dgmike disse:

    Já vejo muitas possibilidades para este novo serviço do Ferrari. Já tuitei e recomendei para o pessoal. Parabéns!

  2. Ferrari, mais um golão de placa seu, hein? Procurando pelo assunto, descobri um pessoal que vende scripts prontos, não sei se você os conhece: http://aminhaloja.com.br/loja/sedex-sedex-p-42.html

    Ainda estou nos primeiros contatos com esse pessoal, porém, acredito que pelo que descrevem na página, o sistema deles é um javascript que usa o formulário do site para fazer a consulta de frete e, em caso de falha, usa uma base offline para concluir o cálculo.

    Pergunto, você está a par de alguma forma confiável de realizar esse procedimento? Atualmente, utilizo a API do Pagseuro que está me dando tanta dor de cabeça quanto a dos Correios, que usávamos antes.

    Na sua experiência, do que acha que se trata todos esses problemas com as APIs? muita demanda? falta de maquinário? Programação mal feita? Ou é descaso mesmo, como no caso do governo de São Paulo que tinha uma máquina inferior para fazer o trabalho com os sites públicos?

  3. caferrari disse:

    O problema da API deles e, provavelmente, da minha também, é que elas dependem do SRO dos correios e este serviço lá é muito instável.

    Meu palpite para essa instabilidade dos correios é: Sistema desenvolvido com o Oracle Application Server 10g, em JAVA, hardware fraco, Antigo e sem manutenção. Deve ter um cara lá só para reiniciar o tomcat de tempos em tempos =/

    []’s

  4. Para nós, então, a única solução para fazer o cálculo confiável de frete seria ter uma base local de dados espelhada periodicamente na base dos Correios, não é? Muito embora essa solução não seria útil para o acompanhamento do frete por motivos óbvios.

  5. Diego disse:

    @Rogério Madureira

    O problema é fazer esse espelhamento.
    São muitas variáveis envolvidas para calcular o valor do frete. Não vejo um meio viável para “salvar” os calculos já efetuados em uma base e consultá-los quando for necessário, ou seja, quando (por uma grande coincidência) existir uma transação/requisição com todos os dados iguais.

  6. Adriano Hedler disse:

    Colega, esta classe você puxa os dados pelos correios, mas no caso, a movimentação dos dados é feita totalmente através do seu webservice correto? Por exemplo, esta idéia se aplicaria da mesma forma para um webservice de uma aplicação minha em um servidor por exemplo, digo em questão de código. Não quero copiar, rs, quero montar um webservice mas estou bastante sem rumo, onde os usuários passariam os dados via post (http)… você poderia dar uma dica? E seguração, seria seguro algo assim? Uma autenticação enviada e executando um serviço.. dando base para uma API…?

  7. Patrik disse:

    Olá meu amigo, primeiramente, gostaria de parabenizá-lo pelo excelente desenvolvimento… ficou mto fácil utilizá-lo… Parabéns! Vc sabe informar pq a última linha do COD DE RASTREAMENTO RB332464839HK não aparece??? o seu sistema só mostra a linha “saiu para entrega”

    Abs,
    Patrik

  8. To querendo fazer um cronjob que de 2 em duas horas ele verifica o status se ele tiver mudado envia um email para avisar

    tu podia fazer so a logica ai para a galera seria muito útil =)

  9. Excelente! O rss era exatamente o que eu procurava! Mas de vez em quando ele gera uma warning PHP que quebra o parsing de XML dos leitores de feed. Exemplo:

    
    $ curl 'http://ferrari.eti.br/correios/rss/?RB205633265HK'
    
    Notice: Undefined variable: tmp in /var/www/ferrari.eti.br/correios/correio.php on line 88
    
                    Rastreando encomenda: RB205633265HK
                    http://ferrari.eti.br
    [...]
    

    Mesmo assim, instalei o código no meu próprio site e funciona direitinho! Talvez porque seja outra versão ou porque o meu servidor não mostra as warnings PHP. :)

Deixe uma resposta