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

Instance Method Summary collapse

Class Method Details

.codigo_uni(n) ⇒ String

Obtiene letra de codigo

Parameters:

  • n (Fixnum)

    Un objeto Fixnum # 20072531

Returns:

  • (String)

    El codigo con su respectiva letra # 20072531G

See Also:

  • #fast_uni


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

Parameters:

  • codigo (String)

    Un objeto String, que representa el codigo de un estudiante # 20072531G, 20072531

Returns:

  • (Hash)

    Informacion publica obtenida de la Orce



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)

Parameters:

  • n (Fixnum)

    Un objeto Fixnum # 20072531

Returns:

  • (String)

    El codigo con su respectiva letra # 20072531G

See Also:

  • #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

.initializeObject

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

Parameters:

  • codigo (String)

    Codigo del alumno # “20152015G”

  • password (String)

    password de orce # “12345”

Returns:

  • (Array)

    Notas del ciclo



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)

Returns:

  • (Array)

    Nota del curso



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/, '') #&nbsp
    end
    evaluacion<<ans
  end
  evaluacion.delete_at(0)
  evaluacion
end

.valid?(codigo) ⇒ Boolean

Valida que el codigo pertenezca a un alumno(existe)

Parameters:

  • codigo (String)

    Un objeto String, que representa el codigo de un estudiante # 20072531G, 20072531

Returns:

  • (Boolean)

    es valido?



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

#beepHash

Ejemplo de uso de #codigo_uni, #fast_uni y #data

Returns:

  • (Hash)

    informacion publica del alumno



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