Postmon - Consumindo uma API com Ruby
Publicado por Daniel Vinciguerra (última atualização em 20/09/2016)
[ Hits: 5.678 ]
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}"
Obtendo o IP público (Internet) usando o Ruby
Crivo de Eratóstenes Simples em Ruby
IA local no bolso, novo visual no Raspberry Pi OS e mais destaques do software livre
Kernel turbinado, compatibilidade em alta e debate sobre sustentabilidade: o dia no mundo Linux
Kernel turbinado e GNOME 49 dominam o giro do dia no mundo Linux
Novidades Linux: Kernel 6.17, distros em ebulição e segurança em foco
Kernel ganha novos linters Rust e distros avançam com recursos de IA
Adicionando o repositório backports no Debian 13 Trixie
Como definir um IP estático no Linux Debian
SAMBA parou de compartilhar [RESOLVIDO] (3)
Orientação para instalar o Warsaw - módulo de proteção do Banco do Bra... (8)
systemd-resol... precisa ser reiniciado periodicamente (5)
Alguém que utilize o Warsaw do BB no Ubuntu 24.04 [RESOLVIDO] (6)
Fedora não reconhece James Donkey 102 Wireless Gaming Mouse (2)