lib/uni/public_info.rb in uni-0.0.7 vs lib/uni/public_info.rb in uni-0.0.8
- old
+ new
@@ -1,11 +1,7 @@
# encoding: utf-8
-SITUACIONX = [ "SUSPENSION VOLUNTARIA", "ALUMNO REGULAR", "INACTIVO", "EN REGULARIZACION DE CURSO(S)", "EXPULSADO", "INACTIVO", "RETIRADO ", "FALLECIDO", "SUSPENSION ", "PROYECTO ESPECIAL ALUMNOS UNI"]
-SITUACIONY = [ "TITULADO", "BACHILLER", "EGRESADO"]
-
module Uni
- SITUACION = SITUACIONX + SITUACIONY
@x, @y = {}, {}
@base = Mechanize.new
# Inicializa las constantes @x y @y, para el uso de #fast_uni
def self.initialize
(1900..2014).each do |n|
@@ -17,72 +13,90 @@
end
@x[n] = ans
end
(0..9999).each do |n|
tmp, v, ans = n, 4567, 0
- while( tmp != 0)
+ while tmp != 0
ans += (tmp%10)*(v%10)
v /= 10
tmp /= 10
end
@y[n] = ans
- "Ahora puedes usar #fast_uni"
end
+ 'memoria inicializada'
end
# Obtiene la letra del codigo (mas rapido que la implementacion #codigo_uni)
# @see #codigo_uni
# @param n [Fixnum] Un objeto Fixnum # 20072531
# @return [String] El codigo con su respectiva letra # 20072531G
def self.fast_uni n
- n.to_s + (65 + (@x[n/10000] + @y[n%10000])%11).chr
+ n.to_s + (65 + (@x[n.to_i/10000] + @y[n.to_i%10000])%11).chr
end
# Obtiene letra de codigo
# @see #fast_uni
# @param n [Fixnum] Un objeto Fixnum # 20072531
# @return [String] El codigo con su respectiva letra # 20072531G
def self.codigo_uni n
- codigo = n.to_s
+ n = n.to_i
+ codigo = n
v, ans = 21234567, 0
- 8.times do
+ 8.times do
ans += (n%10)*(v%10)
v /= 10
n /= 10
end
- codigo + (65 + ans%11).chr
+ codigo.to_s + (65 + ans%11).chr
end
- # Obtiene informacion publica de un alumno # faculta, especialidad, pic:url, ciclo_relativo, etc
- # @param codigo [String] Un objeto String, que representa el codigo de un estudiante # 20072531G
+ # Obtiene informacion publica de un alumno # facultad, especialidad, pic:url, ciclo_relativo, etc
+ # @param codigo [String] Un objeto String, que representa el codigo de un estudiante # 20072531G, 20072531
# @return [Hash] Informacion publica obtenida de la Orce
- def self.data codigo
+ def self.data codigo
+ codigo = codigo_uni codigo if codigo.is_a? Fixnum
agent = @base
- cod = codigo.upcase
- url = "http://www.orce.uni.edu.pe/detaalu.php?id=#{cod}&op=detalu"
+ cod = codigo.upcase
+ url = Uni::URL + "detaalu.php?id=#{cod}&op=detalu"
page = agent.get url
a = []
- page.parser.css("tr td").each do |f|
+ page.parser.css('tr td').each do |f|
a << f.text
end
- nombre = a[6].split("-").join(" ")
- return {} if nombre == ""
+ nombre = a[6].split('-').join(' ')
+ return {} if nombre == ''
info = { codigo: codigo, nombre: nombre }
info[:facultad] = a[9]
info[:especialidad] = a[12]
info[:situacion] = a[15]
- info[:pic] = "http://www.orce.uni.edu.pe/" + page.parser.css("img")[3]['src']
- info[:pic] = "NO TIENE FOTO" if /nose/ =~ info[:pic]
+ info[:pic] = Uni::URL + page.parser.css('img')[3]['src']
+ info[:pic] = 'NO TIENE FOTO' if /nose/ =~ info[:pic]
- info[:ciclo_relativo] = page.parser.xpath('//td[@bgcolor!="#ffffff"]').last.text.gsub(/[.]/, '').to_i rescue " "
+ info[:ciclo_relativo] = page.parser.xpath('//td[@bgcolor!="#ffffff"]').last.text.gsub(/[.]/, '').to_i rescue ' '
- if SITUACIONX.include? info[:situacion]
- info[:egreso] = ""
+ if Uni::SITUACION[0..9].include? info[:situacion]
+ info[:egreso] = ''
info[:medida_disciplinaria] = a[18]
else
- info[:egreso] = a[17].length == 3 ? "" : a[17]
+ info[:egreso] = a[17].length == 3 ? '' : a[17]
info[:medida_disciplinaria] = a[20]
end
info
end
+ # Valida que el codigo pertenezca a un alumno(existe)
+ # @param codigo [String] Un objeto String, que representa el codigo de un estudiante # 20072531G, 20072531
+ # @return [Boolean] es valido?
+ def self.valid? codigo
+ codigo = codigo_uni codigo if codigo.is_a? Fixnum
+ agent = @base
+ cod = codigo.upcase
+ url = Uni::URL + "detaalu.php?id=#{cod}&op=detalu"
+ page = agent.get url
+ a = []
+ page.parser.css('tr td').each do |f|
+ a << f.text
+ end
+ a[6].split('-').join(' ') == '' ? false:true
+ end
+ # deberia ser codigo.valid?, de momento lo dejamos en Uni.valido? "20072531a"
end
\ No newline at end of file