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

abril 10th, 2010 by 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.

Advertisement

44 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. :)

  10. Jonatas disse:

    Amigão, estou tendo um probleminha. Independente do número de rastreamento que eu coloque sempre retorna o erro de que o objeto ainda não foi adicioinado no sistema.

  11. Ciro disse:

    Também estou com o mesmo problema do Jonatas. Porém isso só acontece na hospedagem, no localhost funciona normalmete. Sabe dizer o que poderia ser?

  12. Ciro disse:

    Opa, consegui descobrir o erro. O problema ta no servidor, olha o erro:

    Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in ….

    Enfim, problema no servidor, ja to vendo como arrumar isso. Valeu aí

  13. Will disse:

    Oi amigo, uso sua classe já faz tempinho muito boa! Agora uma dúvida estou com problema de um servidor só roda php 4 sabe me dizer como posso fazer essa classe funcionar em php4 ? Grande abraço

  14. Mael disse:

    Olá, gostaria de saber como faço para limitar o acesso da classe à pagina dos correios por uma porta somente, pois no log de acesso, sempre quando faço o rastreamento, ele nunca acessa a mesma porta. Preciso disso, pois o firewall bloqueia todas as portas e o administrador da rede vai liberando conforme a necessidade do usuário.

  15. Mozack disse:

    Olá,

    Antes de mais obrigado por esse código, 5*. Estive a analisar e reparei que o script guarda a busca em cache, será que não pode guardar dentro da pasta correios? Talvez numa chamada cache? Onde podemos fazer essa alteração?

    Obrigado

  16. Alex disse:

    O código está desatualizado.

    Vejam por exemplo: RA094982693CN

    O script não detecta o último e mais importante evento, da entrega, pois ele contém uma linha inesperada “A MESMA”.

  17. Alex disse:

    Para corrigir o código, substitua a linha:

    if (preg_match(“@(.*)(.*)(.*)@”, $item[0], $d)){

    Por:

    if (preg_match(“@(.*)(.*)(.*)@”, $item[0], $d)){

  18. Alex disse:

    Xi, o wp removeu todo meu código…

    Vamos lá de novo hehe, substitua:

    [12] por [1-9]

  19. Alex disse:

    Pessoal, o script ta com um bugzinho, depois que o Correio fez uma mudanca no rastreamento deles.

    O Correio acrescentou uma terceira linha.

    Vejam esse rastreio e tente rastrear pelo site Correio e pelo script:

    RA129951756CN

  20. Alex disse:

    Pra corrigir o bug, substitua no codigo:

    [12]

    Por:

    [1-9]

  21. Jess disse:

    Webmaster do you want unlimited content for your blog?
    Serarch in google:
    Stottai’s Rewriter

  22. Daniel disse:

    Tenho essa programação já faz um tempo e agora não está mais me retornando nada no rastreio.

  23. André Xori disse:

    A alteração deve ser feita na linha:

    if (preg_match(“@(.*)(.*)(.*)@”, $item[0], $d)){

    Para

    if (preg_match(“@(.*)(.*)(.*)@”, $item[1], $d)){

  24. Galera preciso de uma força de vocês, vejam o meu também parou e não sei nem por onde começar, o que pode ser? http://eloipresentes.com.br/rastro/

  25. Just desire to say your article is as astounding. The clarity for your submit is just excellent and that i could think you’re knowledgeable
    in this subject. Fine along with your permission allow me to seize your feed to keep up to date with forthcoming post.
    Thank you a million and please continue the gratifying work.

  26. I go to see each day a few websites and information sites
    to read content, but this blog presents quality based content.

  27. pinterest.com disse:

    The blog is too “salesy,” or even too much about the company.
    When a gguy wants to write in your blog, ought to charge him with
    a really good price. Searching forr a vanity material is simple.

  28. Once all wanting to offer done, a person ready for business.
    This floor is easy to install as a do-it-yourself project aas the booards
    come pre-finished. Could you possibly ask for thhe more valuawble piece of
    data?

  29. Juliann disse:

    Create a speaker page on expense with videos that will
    encourage more best speaking gigs. This means added opportunities for book promotion, personal branding, andd more speeches coupd be multi-purposed.

  30. Chang disse:

    The locals love take pleasure in an ice cream, lunch or just
    read in this beautiful retreat. Often enough, delegates have end
    up being flown in from different places. Oily fish annd eggs
    are excellent sources of vitamin H.

  31. Bill disse:

    But what iif your list is larger than your hours?
    Your underlying energy and confidence significantly impacts the attraction factor.

    Most people’s website content doesn’t tell me what your
    next steps are.

  32. It in order to be most preferable if he place iis nearer to the city center.
    Get deliver a far higher return on investment. But
    men and women who hops into Internet marketing makes it big.

  33. Timmy disse:

    Make monery online the best way with all really training
    offer in the field. Next, the your autoresponder account become linked as part of your own cash
    machine web page landing page.

  34. Eusebia disse:

    Well, it’s been good as far as giving young artists an prospect to geet out
    and also. It isn’t hard too fihd resources online to in order to
    the beest rap songs around.

  35. Chester disse:

    When you return in your beat CD, make sure you know who’s awareness of address
    independently tend to be to. Updated information over the internet will direct you
    to which venues may need an age limit!

  36. Milla disse:

    It is your utmost responsibility to care for the health of youngster you have at asset.
    Use warm water, mmoment has come a much beneficial foor
    your special body. On Crasigslist yoou will
    fid people offering .

  37. Janell disse:

    Why Ought I Pick An Eco-Friendly Web Provider?

  38. Angeline disse:

    He represents Distric 22, Palm Beach and Broward Areas.
    A feew special twists ftting the occasion are cited down further.
    For morre information call, 651-653-7371 or
    651-459-4400. You’ll find out how this weekend and youu might glad!

  39. Hello friends, how is the whole thing, and what you would like to say on the topic of
    this post, in my view its truly amazing in support of me.

Deixe uma resposta