Postmon - Consumindo uma API com Ruby

Publicado por Daniel Vinciguerra (última atualização em 20/09/2016)

[ Hits: 5.382 ]

Homepage: http://bivee.com.br

Download postmon.rb




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

  



Esconder código-fonte

#!/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}"

Scripts recomendados

Exemplos de comentários e operadores de impressão na tela

Scan Port Interno

Inversor de links com Shoes

Crivo de Eratóstenes Simples em Ruby

Tabuada de um número


  

Comentários
[1] Comentário enviado por mconrado em 20/09/2016 - 09:10h

Cara não conhecia esse postmon. Muito bom o artigo obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts