Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 22nd, 2012  |  syntax: None  |  size: 2.36 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/ruby
  2.  
  3. # Licença: GNU GPLv2
  4. # Copyright: Renato Silva
  5.  
  6. require 'rubygems'
  7. require 'hpricot'
  8. require 'open-uri'
  9. require 'iconv'
  10.  
  11. UTF8Option = "--utf8"
  12. ProxyOption = "--proxy"
  13. URL = "http://www.trf2.jus.br/transparencia/concursos/Concursos/Servidores/Convoca%C3%A7%C3%A3o%20de%20Candidatos/2007/candidatos_rio_2007.aspx"
  14.  
  15. PROXY_REGEX = /\A#{ProxyOption}=([^:]+:\d+)\Z/
  16. ProxyArg = ARGV.find { |a| a =~ PROXY_REGEX }
  17. Proxy = ProxyArg && "http://" << ProxyArg[PROXY_REGEX, 1]
  18.  
  19. Analista = "tr[13]/td[%d]"
  20. Tecnico  = "tr[20]/td[%d]"
  21. Arquivo  = File.dirname($0) << '/trf.txt'
  22.  
  23. def say(arg)
  24.     msg = (arg.is_a? Exception)? "Erro#{" de conexão" if arg.is_a? SocketError}: " : arg.to_s
  25.     msg = Iconv.conv('cp850', 'utf-8', msg) unless ARGV.include? UTF8Option
  26.     msg << arg.message if arg.is_a? Exception
  27.     puts msg
  28. end
  29.  
  30. def finish(cause, delay=nil)
  31.     say cause
  32.     sleep delay rescue begin
  33.         print "\nPressione ENTER para fechar..."
  34.         STDIN.gets
  35.     end
  36.     exit
  37. end
  38.  
  39. def pegar(*itens)
  40.     resultado = ""
  41.     itens.each do |item|
  42.         prefixo = case item
  43.             when Analista: "Analista de"
  44.             when Tecnico: "Técnico de"
  45.             else "Algum cargo de"
  46.         end
  47.         begin
  48.             doc = Hpricot(open(URL, :proxy => Proxy))
  49.             qtde = doc.search(item % 3).first.inner_html
  50.             area = doc.search(item % 1).first.inner_html.sub(/ - .*/, '')
  51.             pnes = doc.search(item % 2).first.inner_html.gsub(/-/, '0').gsub(/\n+/, '').gsub(/\s+/, ' ')
  52.         rescue Exception => e
  53.             finish e
  54.         end
  55.         resultado << "#{prefixo} #{area}: #{qtde} nomeado, deficientes: #{pnes}\n"
  56.     end
  57.     resultado.chop!
  58. end
  59.  
  60. if ARGV.any? and not ARGV.all? { |a| a == UTF8Option or a =~ PROXY_REGEX }
  61.     finish "
  62.     Notificador do concurso do TRF, v2010.10.19\n
  63.     Modo de usar: #{File.basename($0)} [#{ProxyOption}=host:porta] [#{UTF8Option}]
  64.     ", 0
  65. end
  66.  
  67. say "Checando convocações no TRF...\n\n"
  68. say "Usando proxy #{Proxy}...\n\n" if Proxy
  69.  
  70. Atual = pegar(Analista, Tecnico)
  71. Anterior = IO.read(Arquivo) rescue "Não disponível"
  72. finish "Sem novas convocações.", 3 if Atual == Anterior
  73.  
  74. File.new(Arquivo, 'w').write(Atual)
  75. finish "ATENÇÃO: aparentemente houveram mais convocações no TRF:\n
  76. Verificação anterior:\n#{Anterior}\n
  77. Verificação atual:\n#{Atual}"