Postmon - Consumindo uma API com Ruby
Publicado por Daniel Vinciguerra (última atualização em 20/09/2016)
[ Hits: 5.888 ]
Homepage: http://bivee.com.br
Aviso:
- Não utilize esta implementação em produção, ela vem apenas a ser uma implementação didática para mostrar uma das formas de se consumir APIs utilizando o Ruby.
- Caso sinta interesse e precise utilizar o Postmon em seu projeto, veja uma implementação mais madura no link: https://rubygems.org/gems/postmon_ruby
INTRODUÇÃO
Sabe quando você encontra uma API, e gostaria de consumir os dados dela para utilizar em seu projeto?
Aqui eu vou mostrar como você pode criar uma classe e consumir uma API de forma bem simples para utilizar no seu projeto.
Esta será uma implementação muito simples com um foco especial em mostrar como obter a informação, realizar um parse e exibir os dados retornados.
Vamos utilizar para este exemplo o Postmon que é um projeto open-source de uma API para obter dados de localização e endereçamento escrita em Python e MongoDB.
- Site oficial do Postmon: http://postmon.com.br
- Link para o github: https://github.com/PostmonAPI/postmon
*parabéns ao pessoal do projeto a propósito*
PRÉ-REQUISITOS
- ruby +2.2
- Módulo open-uri e nokoguiri instalados
REFERÊNCIAS
http://ruby-doc.org/stdlib-2.2.0/libdoc/open-uri/rdoc/OpenURI.html
https://rubygems.org/gems/nokogiri
EXECUTANDO
$ ruby postmon.rb
#!/usr/bin/env ruby
# 2016 (c) Daniel Vinciguerra
require 'json'
require 'open-uri'
require 'nokogiri'
module Postmon
# endereço base da api
BASE_URI = "http://api.postmon.com.br/v1"
# classe da api
class API
attr_accessor :entity
# obtém e retorna os dados do cep
def by_cep(value)
begin
open(uri_to("/cep/#{value}")) do |res|
entity = Postmon::API::Entity.new;
entity.parse(res.readlines.join)
end
rescue Exception => e
puts "Erro ao retornar os dados do CEP! (#{e.message})"
exit
end
end
private
# constroi a url
def uri_to(uri)
URI(URI::encode("#{BASE_URI}/#{uri}"))
end
end
# classe da entidade (retorno da API)
class API::Entity
attr_reader :bairro, :cidade, :cep, :logradouro, :estado, :estado_info, :cidade_info
# parseia as informações
def parse(json)
o = JSON::parse(json)
@cep = o["cep"]
@bairro = o["bairro"]
@cidade = o["cidade"]
@estado = o["estado"]
@logradouro = o["logradouro"]
@estado_info = o["estado_info"]
@cidade_info = o["cidade_info"]
self
end
end
end
# objeto do nosso client da API
postmon = Postmon::API.new
# obtendo os dados do cep
location = postmon.by_cep('13330000')
# imprimindo as informações do cep
puts "INFORMAÇÕES PARA O CEP #{location.cep}"
puts "=" * 60
puts "Rua : #{location.logradouro}" if location.logradouro
puts "Bairro: #{location.bairro}" if location.bairro
puts "Cidade: #{location.cidade}"
puts "Estado: #{location.estado}"
Web Crawler em Ruby com Open-URI e Nokogiri
Obtendo o IP público (Internet) usando o Ruby
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (1)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









