module PoliticosBR

Constants

DEPS_ESTADUAIS

Hash containing the list of URLs to get the lists of state representatives in Brazilian states

DEPUTADOS_URL

URL to get the spreadesheet with the list of federal representatives

SENADORES_URL

URL to get the list the senators in Brazilian congress

Public Class Methods

deputados() click to toggle source
# File lib/politicosbr.rb, line 13
def self.deputados
  deputados = Array.new

  source = HTTParty.get(PoliticosBR::DEPUTADOS_URL)

  tempfile = Tempfile.new('deputados.xls').tap do |f|
    f.write(source.to_s.force_encoding('UTF-8'))
  end

  spreadsheet = Roo::Excel.new(tempfile.path, file_warning: :ignore)

  (2..spreadsheet.last_row).each do |i|
    row = spreadsheet.row(i)

    politico = OpenStruct.new
    politico.tipo = 'deputado'
    politico.nome = row[0].upcase
    politico.partido = row[1]
    politico.estado = row[2]
    politico.mandato = ''
    politico.fones = "(61) #{row[11]} | (61) #{row[12]}"
    politico.email = row[13]

    deputados.push(politico)
  end

  deputados
end
deputados_estaduais(estado) click to toggle source
# File lib/politicosbr.rb, line 70
def self.deputados_estaduais(estado)
  method_name = "deputados_estaduais_#{estado}"
  method(method_name).call
end
deputados_estaduais_pr() click to toggle source

Paraná

# File lib/politicosbr/estaduais.rb, line 6
def self.deputados_estaduais_pr
  deputados = Array.new
  url = PoliticosBR::DEPS_ESTADUAIS[:pr]
  doc = Nokogiri::HTML(open(url))
  rows = doc.xpath('//ul/li')
  rows.each do |row|
    nome = row.at_xpath('span/a/text()').to_s.strip.upcase
    if (!nome.empty?) then
      politico = OpenStruct.new
      politico.tipo = 'deputado'
      politico.estado = 'PR'
      politico.nome = nome
      politico.url = row.at_xpath('span/a/@href').to_s.strip
      politico.partido = row.at_xpath('span/text()[normalize-space()]').to_s.strip

      docdetails = Nokogiri::HTML(open(politico.url))
      politico.fones = docdetails.xpath('//div[contains(@class, "redes")]/p[3]/text()[normalize-space()]').to_s.strip
      politico.email = Rot13.rotate(docdetails.xpath('//div[contains(@class, "redes")]/p[4]/a/text()[normalize-space()]').to_s.strip)
      
      deputados.push(politico)
    end
  end
  deputados
end
deputados_estaduais_rj() click to toggle source

Rio de Janeiro

# File lib/politicosbr/estaduais.rb, line 32
def self.deputados_estaduais_rj
  deputados = Array.new
  url = PoliticosBR::DEPS_ESTADUAIS[:rj]
  url_split = url.split('/')
  base_url = "#{url_split[0]}//#{url_split[2]}"    
  doc = Nokogiri::HTML(open(url))
  rows = doc.xpath('//div[contains(@class, "controle_deputado")]')
  rows.each do |row|
    politico = OpenStruct.new
    politico.tipo = 'deputado'
    politico.estado = 'RJ'
    politico.nome = row.at_xpath('div[2]/div[2]/a/text()').to_s.strip
    url_relativa_split = row.at_xpath('div[2]/div[2]/a/@href').to_s.strip.split('/')
    url_relativa = "/#{url_relativa_split[2]}/#{url_relativa_split[3]}/#{url_relativa_split[4]}"
    politico.partido = row.at_xpath('div[2]/div/text()').to_s.strip
    politico.url = "#{base_url}#{url_relativa}"
    
    docdetails = Nokogiri::HTML(open(politico.url))
    basedocdetails = docdetails.xpath('//div[contains(@class, "descricao")]')
    politico.fones = basedocdetails.at_xpath('p[3]/text()').to_s.strip
    politico.email = basedocdetails.xpath('p[4]/text()').to_s.strip
      
    deputados.push(politico)
  end
  deputados
end
deputados_estaduais_rs() click to toggle source

Rio Grande do Sul

# File lib/politicosbr/estaduais.rb, line 60
def self.deputados_estaduais_rs
  deputados = Array.new
  url = PoliticosBR::DEPS_ESTADUAIS[:rs]
  doc = Nokogiri::HTML(open(url))
  rows = doc.xpath('//div[contains(@id, "dnn_ctr657_ModuleContent")]/div')
  rows.each do |row|
    politico = OpenStruct.new
    politico.tipo = 'deputado'
    politico.estado = 'RS'
    politico.nome = row.at_xpath('a/text()').to_s.strip.upcase
    politico.partido = row.at_xpath('span[1]/text()').to_s.strip
    politico.email = row.at_xpath('span[2]/text()').to_s.strip
    politico.fones = row.at_xpath('span[3]/text()').to_s.strip
    deputados.push(politico)
  end
  deputados
end
deputados_estaduais_sc() click to toggle source

Santa Catarina

# File lib/politicosbr/estaduais.rb, line 79
def self.deputados_estaduais_sc
  deputados = Array.new
  url = PoliticosBR::DEPS_ESTADUAIS[:sc]
  doc = Nokogiri::HTML(open(url))
  rows = doc.xpath('//table/tbody/tr')
  rows.each do |row|
    politico = OpenStruct.new
    politico.tipo = 'deputado'
    politico.estado = 'SC'
    politico.nome = row.at_xpath('td[1]/span/a/text()').to_s.strip.upcase
    politico.partido = row.at_xpath('td[2]/text()').to_s.strip
    politico.email = row.at_xpath('td[3]/div/ul/li/p/a/text()').to_s.strip
    politico.fones = row.at_xpath('td[5]/ul/li/p/text()').to_s.strip
    deputados.push(politico)
  end
  deputados    
end
deputados_estaduais_sp() click to toggle source

São Paulo

# File lib/politicosbr/estaduais.rb, line 98
def self.deputados_estaduais_sp
  deputados = Array.new
  url = PoliticosBR::DEPS_ESTADUAIS[:sp]
  url_split = url.split('/')
  base_url = "#{url_split[0]}//#{url_split[2]}"
  doc = Nokogiri::HTML(open(url))
  rows = doc.xpath('//table/tbody/tr')
  rows.each do |row|
    politico = OpenStruct.new
    politico.tipo = 'deputado'
    politico.estado = 'SP'
    politico.nome = row.at_xpath('td[1]/a/text()').to_s.strip
    politico.url = "#{base_url}#{row.at_xpath('td[1]/a/@href').to_s.strip}"
    politico.partido = row.at_xpath('td[4]/text()').to_s.strip

    docdetails = Nokogiri::HTML(open(politico.url))
    politico.fones = docdetails.xpath('//div[contains(@id, "infoGeral")]/p[12]/text()').to_s.strip
    politico.email = docdetails.xpath('//div[contains(@id, "infoGeral")]/p[17]/text()').to_s.strip
      
    deputados.push(politico)
  end
  deputados
end
senadores() click to toggle source
# File lib/politicosbr.rb, line 42
def self.senadores
  senadores = Array.new

  doc = Nokogiri::HTML(open(PoliticosBR::SENADORES_URL))
  rows = doc.xpath('//table[@id="senadoresemexercicio-tabela-senadores"]/tbody/tr')

  rows.each do |row|
    politico = OpenStruct.new
    politico.tipo = 'senador'
    politico.nome = row.at_xpath('td[1]/a/text()').to_s.strip.upcase
    politico.partido = row.at_xpath('td[2]/text()').to_s.strip
    politico.estado = row.at_xpath('td[3]/text()').to_s.strip
    politico.mandato = row.at_xpath('td[4]/text()').to_s.strip
    politico.fones = row.at_xpath('td[5]/text()').to_s.strip
    politico.email = row.at_xpath('td[6]/text()').to_s.strip

    senadores.push(politico)
  end

  senadores
end
todos() click to toggle source
# File lib/politicosbr.rb, line 64
def self.todos
  all = deputados
  all.push(*senadores)
  all
end