Arquivo

Arquivo de agosto, 2012

[IT Web - Ruby Fundamental] RailsConf 2012: vídeos disponíveis

31 de agosto de 2012

Track&Field Run Series 2012 - Shopping Cidade Jardim - 5 km

26 de agosto de 2012

No domingo de 19 de agosto de 2012 parcitipei dos 5 km da corrida Track&Field Run Series 2012 - Shopping Cidade Jardim.

A corrida foi disputada na Marginal Pinheiros e Ponte Estaiada, com largada e chegada em frente ao Shopping Cidade Jardim.

Dessa vez eu não pude correr direito, pois ainda estava me recuperando de um processo cirúrgico.

Foto de Ativo.com

Foto de Ativo.com

Foto de WebRun

Foto de WebRun

Foto de Olho no Atleta

Foto de Olho no Atleta

Foto de Ativo.com

Foto de Ativo.com

Foto de Foco Radical

Foto de Foco Radical

Esportes , , , , , ,

correios-sro-xml - Gem para rastreamento de objetos dos Correios

17 de agosto de 2012

O Sistema de Rastreamento de Objetos dos Correios (SRO) possibilita o acompanhamento dos objetos postados sob registro, incluindo portanto todas as encomendas SEDEX, e-SEDEX e PAC.

Os Correios disponibilizam um Web Service para consultar o progresso na entrega das mercadorias. O SRO XML permite a consulta de até 50 encomendas simultaneamente.

A gem correios-sro-xml utiliza o SRO XML dos Correios facilitando o uso desse recurso em aplicações Ruby.

Para usar o SRO XML em ambiente de produção, é necessário solicitar dados de acesso (usuário e senha) junto aos Correios, conforme descrito no blog dos Correios.

Para o ambiente de desenvolvimento, você pode usar os seguintes dados:

  • Usuário: ECT
  • Senha: SRO

Instalando

Gemfile:
gem 'correios-sro-xml'

Instalação direta:
$ gem install correios-sro-xml

Usando

require 'correios-sro-xml'

sro = Correios::SRO::Tracker.new(:user => "ECT", :password => "SRO")

Rastreamento de um objeto:

object = sro.get("SI047624825BR")
object.number                   # => "SI047624825BR"
object.events.first.date        # => "26/12/2011"
object.events.first.hour        # => "15:22"
object.events.first.place       # => "AC CENTRAL DE SAO PAULO"
object.events.first.description # => "Entregue"

Rastreamento de vários objetos:

objects = sro.get("SI047624825BR", "SX104110463BR")

objects["SI047624825BR"].number                   # => "SI047624825BR"
objects["SI047624825BR"].events.first.date        # => "26/12/2011"
objects["SI047624825BR"].events.first.hour        # => "15:22"
objects["SI047624825BR"].events.first.place       # => "AC CENTRAL DE SAO PAULO"
objects["SI047624825BR"].events.first.description # => "Entregue"

objects["SX104110463BR"].number                   # => "SX104110463BR"
objects["SX104110463BR"].events.first.date        # => "08/12/2011"
objects["SX104110463BR"].events.first.hour        # => "09:30"
objects["SX104110463BR"].events.first.place       # => "CEE JUNDIAI"
objects["SX104110463BR"].events.first.description # => "Entregue"
Modo de resultado (result mode)

Um objeto pode ter um ou mais eventos. Por padrão, o modo de resultado do rastreador irá retornar o último evento do objeto.

sro.result_mode # => :last

object = sro.get("SI047624825BR")
object.events.size # => 1

Você pode configurar para o retorno ser todos os eventos do objeto.

sro.result_mode = :all

object = sro.get("SI047624825BR")
object.events.size # => 5
Tipo de consulta (query type)

Existem duas maneiras para consultar objetos no rastreador:

Lista de objetos

Onde todos os números de objetos serão consultados (o padrão).

sro.query_type # => :list

objects = sro.get("PB996681660BR", "PB996681700BR")
objects.keys # => ["PB996681660BR", "PB996681700BR"]
Intervalo de objetos

No qual você fornece primeiro e último números de objetos de um intervalo.

sro.query_type = :range

objects = sro.get("PB996681660BR", "PB996681700BR")
objects.keys # => ["PB996681660BR", "PB996681673BR", "PB996681687BR", "PB996681695BR", "PB996681700BR"]

Configurações

Timeout

Por padrão, o tempo de espera de resposta (timeout) para uma requisição ao SRO XML é de 5 segundos. Após isso, se o SRO XML não responder, uma exceção do tipo Timeout::Error será lançada.

Você pode configurar esse tempo de espera usando o módulo Correios::SRO.

Correios::SRO.configure do |config|
  config.request_timeout = 3  # Configura o tempo de espera para 3 segundos
end
Log

Por padrão, cada chamada ao SRO XML é logada em STDOUT, com nível de log :info, usando a gem LogMe.

Exemplo de log:

I, [2012-08-17T00:55:10.531780 #22692]  INFO -- : Correios-SRO-XML Request:
POST http://websro.correios.com.br/sro_bin/sroii_xml.eventos
Usuario=ECT&Senha=SRO&Tipo=L&Resultado=U&Objetos=PB996681660BR

I, [2012-08-17T00:55:10.750308 #22692]  INFO -- : Correios-SRO-XML Response:
HTTP/1.1 200 OK
<?xml version="1.0" encoding="iso-8859-1" ?>
<sroxml>
   <versao>1.0</versao>
   <qtd>1</qtd>
   <TipoPesquisa>Lista de Objetos</TipoPesquisa>
   <TipoResultado>Último evento</TipoResultado>
     <objeto>
       <numero>PB996681660BR</numero>
       <evento>
          <tipo>BDE</tipo>
          <status>01</status>
          <data>05/07/2012</data>
          <hora>21:11</hora>
          <descricao>Entregue</descricao>
          <recebedor>                         </recebedor>
          <documento>                         </documento>
          <comentario>                         </comentario>
          <local>CDD VILA ANDRADE</local>
          <codigo>05724970</codigo>
          <cidade>SAO PAULO</cidade>
          <uf>SP</uf>
          <sto>72824000</sto>
      </evento>
     </objeto>
</sroxml>

Se você configurar o nível de log como :debug, serão logados também todos os cabeçalhos HTTP da requisição e da resposta:

D, [2012-08-17T00:58:56.226742 #22692] DEBUG -- : Correios-SRO-XML Request:
POST http://websro.correios.com.br/sro_bin/sroii_xml.eventos
accept: */*
user-agent: Ruby
content-type: application/x-www-form-urlencoded
Usuario=ECT&Senha=SRO&Tipo=L&Resultado=U&Objetos=PB996681660BR

D, [2012-08-17T00:58:56.495131 #22692] DEBUG -- : Correios-SRO-XML Response:
HTTP/1.1 200 OK
date: Fri, 17 Aug 2012 03:58:56 GMT
server: Oracle-Application-Server-10g/10.1.2.0.2 Oracle-HTTP-Server
content-length: 855
content-type: text/html; charset=ISO-8859-1
x-cache: MISS from 127.0.0.1
connection: close
<?xml version="1.0" encoding="iso-8859-1" ?>
<sroxml>
   <versao>1.0</versao>
   <qtd>1</qtd>
   <TipoPesquisa>Lista de Objetos</TipoPesquisa>
   <TipoResultado>?ltimo evento</TipoResultado>
     <objeto>
       <numero>PB996681660BR</numero>
       <evento>
          <tipo>BDE</tipo>
          <status>01</status>
          <data>05/07/2012</data>
          <hora>21:11</hora>
          <descricao>Entregue</descricao>
          <recebedor>                         </recebedor>
          <documento>                         </documento>
          <comentario>                         </comentario>
          <local>CDD VILA ANDRADE</local>
          <codigo>05724970</codigo>
          <cidade>SAO PAULO</cidade>
          <uf>SP</uf>
          <sto>72824000</sto>
      </evento>
     </objeto>
</sroxml>

Para desabilitar o log, mudar o nível do log ou configurar um outro mecanismo de log, use o módulo Correios::SRO.

Correios::SRO.configure do |config|
  config.log_enabled = false   # Desabilita o log
  config.log_level = :debug    # Altera o nível do log
  config.logger = Rails.logger # Usa o logger do Rails
end
Exemplo de configuração
Correios::SRO.configure do |config|
  config.log_level = :debug
  config.logger = Rails.logger
  config.request_timeout = 3
end
Código no Github

https://github.com/prodis/correios-sro-xml

Gem no RubyGems.org

https://rubygems.org/gems/correios-sro-xml

Ruby , , , ,