Module: Uni
- Defined in:
- lib/uni.rb,
lib/uni/params.rb,
lib/uni/version.rb,
lib/uni/public_info.rb,
lib/uni/private_info.rb
Constant Summary collapse
- URL =
'http://www.orce.uni.edu.pe/'
- SITUACION =
[ 'SUSPENSION VOLUNTARIA', 'ALUMNO REGULAR', 'INACTIVO', 'EN REGULARIZACION DE CURSO(S)', 'EXPULSADO', 'INACTIVO', 'RETIRADO ', 'FALLECIDO', 'SUSPENSION ', 'PROYECTO ESPECIAL ALUMNOS UNI', 'TITULADO', 'BACHILLER', 'EGRESADO']
- FACULTADES =
{'INGENIERÍA INDUSTRIAL Y DE SISTEMAS' => 'I', 'ARQUITECTURA, URBANISMO Y ARTES' => 'A', 'CIENCIAS' => 'N', 'INGENIERÍA AMBIENTAL' => 'S', 'INGENIERÍA CIVIL' => 'C', 'INGENIERÍA ECONÓMICA Y CIENCIAS SOCIALES' => 'E', 'INGENIERÍA ELÉCTRICA Y ELECTRÓNICA' => 'L', 'INGENIERÍA GEOLÓGICA, MINERA Y METALÚRGICA' => 'G', 'INGENIERÍA MECÁNICA' => 'M', 'INGENIERÍA DE PETRÓLEO, GAS NATURAL Y PETROQUÍMICA' => 'P', 'INGENIERÍA QUÍMICA Y TEXTIL' => 'Q'}
- VERSION =
'0.1.0'
Class Method Summary collapse
-
.codigo_uni(n) ⇒ String
Obtiene letra de codigo.
-
.data(codigo) ⇒ Hash
Obtiene informacion publica de un alumno # facultad, especialidad, pic:url, ciclo_relativo, etc.
-
.fast_uni(n) ⇒ String
Obtiene la letra del codigo (mas rapido que la implementacion #codigo_uni).
-
.get_facultad(codigo) ⇒ Object
deberia ser codigo.valid?, de momento lo dejamos en Uni.valido? “20072531a” helpers.
-
.initialize ⇒ Object
Inicializa las constantes @x y @y, para el uso de #fast_uni.
-
.notas(codigo, password) ⇒ Array
Falta refactorizar, aplicar buenas practicas, tests, etc www.orce.uni.edu.pe/recordNotas.php?op=cursos&flag=notas www.orce.uni.edu.pe/recordNotas.php?op=notas&tipo=Teoria&codcur=GP102&facul=I&codsec=V www.orce.uni.edu.pe/recordNotas.php?op=notas&tipo=Practicas&codcur=GP102&facul=I&codsec=V Se muestran las tablas tal cual, para evitar problemas en # de practicas, monografias, laboratorios, etc Obtiene las notas de un alumno regular.
-
.obtener_notas_de(evaluacion, codigo, seccion, id, agent) ⇒ Array
Obtiene las notas de un curso por tipo de evaluacion (practicas, teoria).
-
.valid?(codigo) ⇒ Boolean
Valida que el codigo pertenezca a un alumno(existe).
Instance Method Summary collapse
-
#beep ⇒ Hash
Ejemplo de uso de #codigo_uni, #fast_uni y #data.
Class Method Details
.codigo_uni(n) ⇒ String
Obtiene letra de codigo
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/uni/public_info.rb', line 38 def self.codigo_uni n n = n.to_i codigo = n v, ans = 21234567, 0 8.times do ans += (n%10)*(v%10) v /= 10 n /= 10 end codigo.to_s + (65 + ans%11).chr end |
.data(codigo) ⇒ Hash
Obtiene informacion publica de un alumno # facultad, especialidad, pic:url, ciclo_relativo, etc
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/uni/public_info.rb', line 53 def self.data codigo return Hash.new unless 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 nombre = a[6].split('-').join(' ').strip return {} if nombre == '' info = { codigo: codigo, nombre: nombre } info[:facultad] = a[9] info[:especialidad] = a[12] info[:situacion] = a[15] 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 '' 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[:medida_disciplinaria] = a[20] end info end |
.fast_uni(n) ⇒ String
Obtiene la letra del codigo (mas rapido que la implementacion #codigo_uni)
31 32 33 |
# File 'lib/uni/public_info.rb', line 31 def self.fast_uni n n.to_s + (65 + (@x[n.to_i/10000] + @y[n.to_i%10000])%11).chr end |
.get_facultad(codigo) ⇒ Object
deberia ser codigo.valid?, de momento lo dejamos en Uni.valido? “20072531a” helpers
104 105 106 107 108 109 110 111 112 113 |
# File 'lib/uni/public_info.rb', line 104 def self.get_facultad codigo return '' unless 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 f = page.parser.css('tr td')[9] f.text end |
.initialize ⇒ Object
Inicializa las constantes @x y @y, para el uso de #fast_uni
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/uni/public_info.rb', line 6 def self.initialize (1900..2014).each do |n| tmp, v, ans = n, 2123, 0 4.times do ans += (tmp%10)*(v%10) v /= 10 tmp /= 10 end @x[n] = ans end (0..9999).each do |n| tmp, v, ans = n, 4567, 0 while tmp != 0 ans += (tmp%10)*(v%10) v /= 10 tmp /= 10 end @y[n] = ans end 'memoria inicializada' end |
.notas(codigo, password) ⇒ Array
Falta refactorizar, aplicar buenas practicas, tests, etc www.orce.uni.edu.pe/recordNotas.php?op=cursos&flag=notas www.orce.uni.edu.pe/recordNotas.php?op=notas&tipo=Teoria&codcur=GP102&facul=I&codsec=V www.orce.uni.edu.pe/recordNotas.php?op=notas&tipo=Practicas&codcur=GP102&facul=I&codsec=V Se muestran las tablas tal cual, para evitar problemas en # de practicas, monografias, laboratorios, etc Obtiene las notas de un alumno regular
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/uni/private_info.rb', line 11 def self.notas codigo, password cursos = [] agent = Mechanize.new params = {'txtusu' => codigo, 'txtcla' => password} agent.post( Uni::URL + 'logeo.php', params) agent.get Uni::URL + 'recordNotas.php?op=cursos&flag=notas' pag = agent.page a=[] pag.parser.css('tr.fila td').each do |f| a << f.text end school = Uni.get_facultad codigo id = Uni::FACULTADES[school] n = a.size/5 (1..n).each do |i| ans = { curso: '', codigo: '', seccion: '', notas: {} } ind = (i-1)*5 curso = a[ind.. ind+4] ans[:codigo] = curso[0] ans[:curso] = curso[1] ans[:seccion] = curso[2] practicas = obtener_notas_de 'Practicas', ans[:codigo], ans[:seccion], id, agent examenes = obtener_notas_de 'Teoria', ans[:codigo], ans[:seccion], id, agent ans[:notas] = { practicas: practicas, examenes: examenes} cursos << ans end cursos end |
.obtener_notas_de(evaluacion, codigo, seccion, id, agent) ⇒ Array
Obtiene las notas de un curso por tipo de evaluacion (practicas, teoria)
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/uni/private_info.rb', line 47 def self.obtener_notas_de evaluacion, codigo, seccion, id, agent agent.get Uni::URL+"recordNotas.php?op=notas&tipo=#{evaluacion}&codcur=#{codigo}&facul=#{id}&codsec=#{seccion}" pag_evaluacion = agent.page evaluacion=[] pag_evaluacion.parser.css('tr td').each_slice(4) do |f| ans = [] f.each do |c| ans << c.content.gsub(/\u00a0/, '') #  end evaluacion<<ans end evaluacion.delete_at(0) evaluacion end |
.valid?(codigo) ⇒ Boolean
Valida que el codigo pertenezca a un alumno(existe)
90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/uni/public_info.rb', line 90 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 |
Instance Method Details
#beep ⇒ Hash
Ejemplo de uso de #codigo_uni, #fast_uni y #data
12 13 14 15 16 17 18 |
# File 'lib/uni.rb', line 12 def beep puts Uni.codigo_uni 20072531 Uni.initialize codigo = Uni::fast_uni 20072531 data = Uni::data codigo puts data end |