From dab65ebe11e51c7d32a97086da6fec987892bd2d Mon Sep 17 00:00:00 2001
From: kirbylife <gabriel13m@gmail.com>
Date: Mon, 4 Nov 2019 22:29:44 -0600
Subject: [PATCH] added poetry estructure

---
 .gitignore            |   4 +
 README.md             |  10 +-
 libSIIAU.py           | 477 --------------------------------------
 lib_siiau/__init__.py |   1 +
 lib_siiau/libSIIAU.py | 524 ++++++++++++++++++++++++++++++++++++++++++
 pyproject.toml        |  15 ++
 6 files changed, 548 insertions(+), 483 deletions(-)
 delete mode 100644 libSIIAU.py
 create mode 100644 lib_siiau/__init__.py
 create mode 100644 lib_siiau/libSIIAU.py
 create mode 100644 pyproject.toml

diff --git a/.gitignore b/.gitignore
index 894a44c..7f94d2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,3 +102,7 @@ venv.bak/
 
 # mypy
 .mypy_cache/
+
+# Poetry Stuff
+poetry.lock
+*.egg-info/
diff --git a/README.md b/README.md
index d0e351e..961b68f 100644
--- a/README.md
+++ b/README.md
@@ -2,20 +2,19 @@
 
 ### Extrae información de alumnos y profesores de la Universidad de Guadalajara
 
-****
-* ##### __Dependencias__
+* #### __Dependencias__
     * python 2
     * requests
 
-* ##### __Método de uso__
+* #### __Método de uso__
 ```
-#extraer nombre
+# extraer nombre
 from libSIIAU import Alumno
 codigo = "123456789"
 alumno = Alumno(codigo, "uno2ytres")
 print "Nombre: %s" % alumno.nombre
 
-#Validar codigo y NIP
+# Validar codigo y NIP
 from libSIIAU import Alumno
 codigo = "123456789"
 alumno = Alumno(codigo, "nip_incorrecto")
@@ -24,4 +23,3 @@ if alumno.valido:
 else:
     print "Codigo o nip incorrectos"
 ```
-
diff --git a/libSIIAU.py b/libSIIAU.py
deleted file mode 100644
index f36d495..0000000
--- a/libSIIAU.py
+++ /dev/null
@@ -1,477 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-#  libSIIAU.py
-#  
-#  Copyright 2017 ImNotRoot <https://github.com/ImNotRoot>
-#  
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 3 of the License, or
-#  (at your option) any later version.
-#  
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#  
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-#  MA 02110-1301, USA.
-#
-#
-
-#from commands import getoutput, getstatusoutput
-from requests import get, post
-
-import sys, time, os
-
-class AuthenticationError(BaseException):
-    def __init__(self, message):
-        self.message = message
-        super(AuthenticationError, self).__init__(message)
-
-class Alumno:
-	__UA="User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36"
-	__URL="http://siiauescolar.siiau.udg.mx"
-	
-	__headers = {
-		'User-Agent': __UA,
-	}
-	
-	__COOKIES=""
-	__majrp=""
-	
-	codigo=""
-	nip=""
-	nombre=""
-	items=[]
-	carreras=[]
-	valido=True
-	
-	pidm=""
-	
-	def __getCarreras(self,url):
-		#cmd="curl -L -b cookies.txt -i -A '"+self.__UA+"' -X GET '"+self.__URL+""+url+"'"
-		r=get(self.__URL+""+url,headers=self.__headers,cookies=self.__COOKIES)
-		#out=getoutput(cmd)
-		out=r.text
-		if("OPTION" in out):
-			cab='<OPTION value="'
-			while(cab in out):
-				temp=""
-				val1=""
-				val2=""
-				out=out[out.find(cab)+len(cab):]
-				temp=out[:out.find('"')]
-				val1=temp[:temp.find("-")]
-				val2=temp[temp.find("-")+1:]
-				temp={"carrera":val1,"inicio":val2}
-				self.items.append(temp)
-		else:
-			self.items.append(None)
-		self.__getInfoBasica()
-	
-	def __getLink(self):
-		#cmd="curl -L -b cookies.txt -i -A '"+self.__UA+"' -X GET siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="+str(self.pidm)
-		r=get("http://siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="+str(self.pidm),headers=self.__headers,cookies=self.__COOKIES)
-		out=r.text
-		#out=getoutput(cmd)
-		grado=""
-		flag=True
-		cab='<img src="/ows-img/closed.gif" alt="'
-		cab2='<a href="'
-		while(cab in out and flag):
-			out=out[out.find(cab)+len(cab):]
-			grado=out[:out.find('"')]
-			out=out[out.find(cab2)+len(cab2):]
-			link=out[:out.find('"')]
-			#print link
-			if(" " not in link):
-				#print link
-				flag=False
-				self.__getCarreras(link)
-		if(flag):
-			self.items.append(None)
-			self.__getInfoBasica();
-			#print "Por el momento el API no soporta la extracción de datos para alumnos solamente con preparatoria"
-	
-	def __getPidm(self,text):
-		cab='p_bienvenida_c" VALUE="'
-		text=text[text.find(cab)+len(cab):]
-		text=text[:text.find('"')]
-		self.pidm=text
-		#print text
-	
-	def __getInfoBasica(self):
-		encuesta=False
-		for info in self.items:
-			if(info==None):
-				#cmd="curl -L -b cookies.txt -i -A '"+self.__UA+"' -X GET 'siiauescolar.siiau.udg.mx/wal/sgphist.ficha?pidmp="+self.pidm+"'"
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.promedio?pidmp="+self.pidm,headers=self.__headers,cookies=self.__COOKIES)
-			else:
-				#cmd="curl -L -b cookies.txt -i -A '"+self.__UA+"' -X GET 'siiauescolar.siiau.udg.mx/wal/sgphist.ficha?pidmp="+self.pidm+"&majrp="+info["carrera"]+"&cicloap="+info["inicio"]+"'"
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.promedio?pidmp="+self.pidm+"&majrp="+info["carrera"]+"&cicloap="+info["inicio"],headers=self.__headers,cookies=self.__COOKIES)
-			#out=getoutput(cmd)
-			out=r.text
-			if("Encuestas</b>" in out):
-				encuesta=True
-				#print("Favor de contestar todas las encuestas para poder continuar")
-			else:
-				#print out
-				out=out[out.find("Nombre:"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				self.nombre=out[:out.find("</FONT>")]
-				
-				out=out[out.find("Situaci"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				situacion=out[:out.find("</FONT>")]
-				
-				out=out[out.find("Carrera:"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				carrera=out[:out.find("</FONT>")]
-				
-				self.__majrp=carrera[carrera.find("(")+1:carrera.find(")")]
-				
-				out=out[out.find("Centro:"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				centro=out[:out.find("</FONT>")]
-				
-				out=out[out.find("Sede:"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				sede=out[:out.find("</FONT>")]
-				
-				out=out[out.find("PROMEDIO"):]
-				out=out[out.find("<FONT"):]
-				out=out[out.find(">")+1:]
-				promedio=out[:out.find("</FONT>")]
-				
-				self.carreras.append({"carrera":carrera,"centro":centro,"sede":sede,"situacion":situacion,"promedio":promedio})
-		#print self.carreras
-		if(not encuesta):
-			self.__getKardex()
-		
-	def __getKardex(self):
-		cont=0
-		encuesta=False
-		for info in self.items:
-			if(info == None):
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp="+self.pidm+"&majrp="+self.__majrp,headers=self.__headers,cookies=self.__COOKIES)
-			else:
-				#r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp=891060&majrp=INNI&cicloap=201420",cookies=self.__COOKIES)
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp="+self.pidm+"&majrp="+info["carrera"]+"&cicloap="+info["inicio"],headers=self.__headers,cookies=self.__COOKIES)
-			out=r.text
-			materias=[]
-			if("Encuestas</b>" in out):
-				encuesta=True
-				#print("Favor de contestar todas las encuestas para poder continuar")
-			else:
-				'''
-				cab="Calendario "
-				cab2="</FONT>"
-				'''
-				
-				cab='<TR bgcolor="#ffffff">'
-				cab2="<A HREF="
-				cab3="<FONT "
-				cab4='<TD COLSPAN="3"></TD>'
-				#print out
-				while(cab in out):
-					out=out[out.find(cab)+len(cab):]
-					aprobado=True
-					#print out.find(cab4)
-					if(out.find(cab4)!=1):
-						out=out[out.find(cab2)+len(cab2):]
-						out=out[out.find(">")+1:]
-						nrc=out[:out.find("</A>")]
-						
-						out=out[out.find(cab2)+len(cab2):]
-						out=out[out.find(">")+1:]
-						clave=out[:out.find("</A>")]
-						
-						out=out[out.find(cab3)+len(cab3):]
-						out=out[out.find(">")+1:]
-						materia=out[:out.find("</FONT>")]
-					
-					out=out[out.find(cab3)+len(cab3):]
-					if(out.find('COLOR="red"')==0):
-						aprobado=False
-						#print "reprobado"
-					out=out[out.find(">")+1:]
-					calificacion=out[:out.find("</FONT>")]
-					
-					out=out[out.find(cab3)+len(cab3):]
-					out=out[out.find(">")+1:]
-					tipo=out[:out.find("</FONT>")]
-					
-					out=out[out.find(cab3)+len(cab3):]
-					out=out[out.find(">")+1:]
-					nc=out[:out.find("</FONT>")]
-					
-					out=out[out.find(cab3)+len(cab3):]
-					out=out[out.find(">")+1:]
-					fecha=out[:out.find("</FONT>")]
-					
-					materias.append({"nrc":nrc,"clave":clave,"materia":materia,"calificacion":calificacion,"aprobado":aprobado,"tipo":tipo,"nc":nc,"fecha":fecha})
-					#print nrc,clave,materia,calificacion,tipo,nc,fecha
-					'''
-					out=out[out.find(cab):]
-					print out[:out.find(cab2)]
-					out=out[out.find(cab2)+len(cab2):]
-					'''
-			self.carreras[cont]["kardex"]=materias
-			cont=cont+1
-		if(not encuesta):
-			self.__getActuales()
-		#print self.carreras
-	
-	def __getActuales(self):
-		cont=0
-		encuesta=False
-		for info in self.items:
-			if(info == None):
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgpregi.horario?pidmp="+self.pidm+"&majrp="+self.__majrp,headers=self.__headers,cookies=self.__COOKIES)
-			else:
-				#r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp=891060&majrp=INNI&cicloap=201420",cookies=self.__COOKIES)
-				r=get("http://siiauescolar.siiau.udg.mx/wal/sgpregi.horario?pidmp="+self.pidm+"&majrp="+info["carrera"],headers=self.__headers,cookies=self.__COOKIES)
-			out=r.text
-			#print out
-			if("Encuestas</b>" in out):
-				encuesta=True
-				#print("Favor de contestar todas las encuestas para poder continuar")
-			else:
-				#print out
-				cab='<SELECT NAME="pCiclo"'
-				if(cab in out):
-					out=out[out.find(cab)+len(cab):]
-					cab=" value='"
-					out=out[out.find(cab)+len(cab):]
-					ciclo=out[:out.find("'")]
-					params={"pidmP":self.pidm,"cicloP":ciclo,"encaP":"0"}
-					if(info!=None):
-						params["majrP"]=info["carrera"]
-					else:
-						params["majrP"]=self.__majrp
-					#print ciclo
-					r=post("http://siiauescolar.siiau.udg.mx/wal/sfpcoal.horario",headers=self.__headers,data=params)
-					out=r.text
-					out=out[out.find("FECHA FIN"):]
-					
-					materias=[]
-					
-					cab='<TR bgcolor="#'
-					cab2='<TR bgcolor="#FFFFFF">'
-					cab3='<TR bgcolor="#e5e5e5">'
-					cab4='<TD COLSPAN="5">'
-					cab5='<TD>'
-					while(cab2 in out or cab3 in out):
-						out=out[out.find(cab):]
-						out=out[out.find(">")+1:]
-						if(out.find(cab4) != 1):
-							out=out[out.find(cab5)+len(cab5):]
-							nrc=out[:out.find("</TD>")]
-							
-							out=out[out.find(cab5)+len(cab5):]
-							clave=out[:out.find("</TD>")]
-							
-							out=out[out.find(cab5)+len(cab5):]
-							materia=out[:out.find("</TD>")]
-							
-							materias.append({"nrc":nrc,"clave":clave,"materia":materia})
-							#print nrc,clave,materia
-					self.carreras[cont]["materias_actuales"]=materias
-				else:
-					self.carreras[cont]["materias_actuales"]=[]
-				cont=cont+1
-		if(not encuesta):
-			self.valido=True
-						
-			'''
-			materias=[]
-			cab='<TR bgcolor="'
-			cab2="<FONT "
-			print "Si entre aqui"
-			print out
-			while(cab in out):
-				out=out[out.find(cab)+len(cab):]
-				
-				out=out[out.find(cab2)+len(cab2):]
-				out=out[out.find(">")+1:]
-				nrc=out[:out.find("</FONT>")]
-				
-				out=out[out.find(cab2)+len(cab2):]
-				out=out[out.find(">")+1:]
-				clave=out[:out.find("</FONT>")]
-				
-				out=out[out.find(cab2)+len(cab2):]
-				out=out[out.find(">")+1:]
-				materia=out[:out.find("</FONT>")]
-				
-				out=out[out.find(cab2)+len(cab2):]
-				out=out[out.find(">")+1:]
-				creditos=out[:out.find("</FONT>")]
-				
-				materias.append({"nrc":nrc,"clave":clave,"materia":materia,"creditos":creditos})
-				print nrc,clave,materia,creditos
-		self.carreras[cont]["materias_actuales"]=materias
-		print self.carreras[cont]["materias_actuales"]
-		cont=cont+1
-		self.valido=True
-		#print self.carreras[cont]
-		#print "\n\n=====================================================\n\n"'''
-	
-	def __init__(self,codigo,nip):
-		#print "Creando el objeto"
-		self.codigo=""
-		self.nip=""
-		self.nombre=""
-		self.items=[]
-		self.carreras=[]
-		valido=False
-		#print "ehrkjerjkergjergjk"
-		pidm=""
-		self.codigo=codigo
-		self.nip=nip
-		#cmd="curl -c cookies.txt -i -A '"+self.__UA+"' -X POST -d 'p_codigo_c="+str(codigo)+"&p_clave_c="+str(nip)+"' siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio"
-		params={"p_codigo_c":str(codigo),"p_clave_c":str(nip)}
-		r=post("http://siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio",headers=self.__headers,data=params)
-		out=r.text
-		#out=getoutput(cmd)
-		if('class="error"' not in out):
-			#print "la clave y el nip son correctos"
-			self.__COOKIES=r.cookies
-			self.__getPidm(out)
-			self.__getLink()
-			#print self.carreras
-			#getoutput("rm cookies.txt")
-		else:
-			self.valido=False
-			#print "Los datos ingresados no son correctos"
-			
-class Profesor():
-	
-	__COOKIES=""
-	
-	__headers = {
-		'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36',
-	}
-	
-	pidm=""
-	codigo=""
-	nip=""
-	nombre=""
-	materias=[]
-	
-	valido=True
-	
-	def __getLink(self):
-		#cmd="curl -L -b cookies.txt -i -A '"+self.__UA+"' -X GET siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="+str(self.pidm)
-		r=get("http://siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="+str(self.pidm),headers=self.__headers,cookies=self.__COOKIES)
-		out=r.text
-		#out=getoutput(cmd)
-		grado=""
-		flag=True
-		cab='<img src="/ows-img/closed.gif" alt="'
-		cab2='<a href="'
-		while(cab in out and flag):
-			out=out[out.find(cab)+len(cab):]
-			grado=out[:out.find('"')]
-			out=out[out.find(cab2)+len(cab2):]
-			link=out[:out.find('"')]
-			#print link
-			if(" " not in link):
-				#print link
-				flag=False
-				self.__getCarreras(link)
-		if(flag):
-			self.items.append(None)
-			self.__getInfoBasica();
-	
-	def __getPidm(self,text):
-		cab='p_bienvenida_c" VALUE="'
-		text=text[text.find(cab)+len(cab):]
-		text=text[:text.find('"')]
-		self.pidm=text
-		#print text
-		
-	def __getInfoBasica(self):
-		#print "aqui"
-		r=get("http://siiauescolar.siiau.udg.mx/wpr/sipprac.lista_prof?pidmp="+self.pidm,headers=self.__headers,cookies=self.__COOKIES)
-		out=r.text
-		
-		cab="<FONT "
-		
-		out=out[out.find("Nombre :"):]
-		out=out[out.find(cab)+len(cab):]
-		out=out[out.find(">")+1:]
-		self.nombre=out[:out.find("</FONT>")]
-		
-		cab='<FONT COLOR="navy" FACE="arial" SIZE="2">'
-		
-		while(cab in out):
-			out=out[out.find(cab)+len(cab):]
-			ciclo=out[:out.find("</FONT>")]
-			
-			out=out[out.find(cab)+len(cab):]
-			nrc=out[:out.find("</FONT>")]
-			
-			out=out[out.find(cab)+len(cab):]
-			clave=out[:out.find("</FONT>")]
-			
-			out=out[out.find(cab)+len(cab):]
-			nombre=out[:out.find("</FONT>")]
-			
-			self.materias.append({"ciclo":ciclo,"nrc":nrc,"clave":clave,"nombre":nombre})
-		r=get("http://siiauescolar.siiau.udg.mx/wpr/silprac.asistencias_profesor",headers=self.__headers,cookies=self.__COOKIES)
-		out=r.text
-		cab='<TD style="font-family:arial;font-size:12;background-color:#ffffff;">'
-		cab2='<A HREF='
-		while(cab in out):
-			out=out[out.find(cab)+len(cab):]
-			ciclo=out[:out.find("</TD>")]
-			
-			out=out[out.find(cab)+len(cab):]
-			nrc=out[:out.find("</TD>")]
-			
-			out=out[out.find(cab2)+len(cab2):]
-			out=out[out.find(">")+1:]
-			clave=out[:out.find("</A>")]
-			
-			out=out[out.find(cab)+len(cab):]
-			nombre=out[:out.find("</TD>")]
-			
-			out=out[out.find("<TR>"):]
-			
-			self.materias.append({"ciclo":ciclo,"nrc":nrc,"clave":clave,"nombre":nombre})
-			
-		self.valido=True
-		#print self.materias
-		
-	def __init__(self,codigo,nip):
-		self.pidm=""
-		self.nombre=""
-		self.materias=[]
-		#print "Creando el objeto"
-		self.codigo=codigo
-		self.nip=nip
-		#cmd="curl -c cookies.txt -i -A '"+self.__UA+"' -X POST -d 'p_codigo_c="+str(codigo)+"&p_clave_c="+str(nip)+"' siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio"
-		params={"p_codigo_c":str(codigo),"p_clave_c":str(nip)}
-		r=post("http://siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio",headers=self.__headers,data=params)
-		out=r.text
-		#out=getoutput(cmd)
-		if('class="error"' not in out):
-			#print "la clave y el nip son correctos"
-			self.__COOKIES=r.cookies
-			self.__getPidm(out)
-			self.__getInfoBasica()
-			#print self.carreras
-			#getoutput("rm cookies.txt")
-		else:
-			self.valido=False
-			#print "Los datos ingresados no son correctos"
diff --git a/lib_siiau/__init__.py b/lib_siiau/__init__.py
new file mode 100644
index 0000000..7bba1be
--- /dev/null
+++ b/lib_siiau/__init__.py
@@ -0,0 +1 @@
+from lib_siiau.libSIIAU import *
diff --git a/lib_siiau/libSIIAU.py b/lib_siiau/libSIIAU.py
new file mode 100644
index 0000000..c7a893f
--- /dev/null
+++ b/lib_siiau/libSIIAU.py
@@ -0,0 +1,524 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+#  libSIIAU.py
+#
+#  Copyright 2019 ImNotRoot <https://github.com/kirbylife>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 3 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+#  MA 02110-1301, USA.
+#
+#
+
+import os
+import sys
+import time
+
+from requests import get, post
+
+
+class AuthenticationError(BaseException):
+    def __init__(self, message):
+        self.message = message
+        super(AuthenticationError, self).__init__(message)
+
+
+class Alumno:
+    __UA = "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36"
+    __URL = "http://siiauescolar.siiau.udg.mx"
+
+    __headers = {
+        'User-Agent': __UA,
+    }
+
+    __COOKIES = ""
+    __majrp = ""
+
+    codigo = ""
+    nip = ""
+    nombre = ""
+    items = []
+    carreras = []
+    valido = True
+
+    pidm = ""
+
+    def __getCarreras(self, url):
+        r = get(self.__URL + "" + url,
+                headers=self.__headers,
+                cookies=self.__COOKIES)
+        out = r.text
+        if ("OPTION" in out):
+            cab = '<OPTION value="'
+            while (cab in out):
+                temp = ""
+                val1 = ""
+                val2 = ""
+                out = out[out.find(cab) + len(cab):]
+                temp = out[:out.find('"')]
+                val1 = temp[:temp.find("-")]
+                val2 = temp[temp.find("-") + 1:]
+                temp = {"carrera": val1, "inicio": val2}
+                self.items.append(temp)
+        else:
+            self.items.append(None)
+        self.__getInfoBasica()
+
+    def __getLink(self):
+        r = get(
+            "http://siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="
+            + str(self.pidm),
+            headers=self.__headers,
+            cookies=self.__COOKIES)
+        out = r.text
+        grado = ""
+        flag = True
+        cab = '<img src="/ows-img/closed.gif" alt="'
+        cab2 = '<a href="'
+        while (cab in out and flag):
+            out = out[out.find(cab) + len(cab):]
+            grado = out[:out.find('"')]
+            out = out[out.find(cab2) + len(cab2):]
+            link = out[:out.find('"')]
+            if (" " not in link):
+                flag = False
+                self.__getCarreras(link)
+        if (flag):
+            self.items.append(None)
+            self.__getInfoBasica()
+
+    def __getPidm(self, text):
+        cab = 'p_bienvenida_c" VALUE="'
+        text = text[text.find(cab) + len(cab):]
+        text = text[:text.find('"')]
+        self.pidm = text
+
+    def __getInfoBasica(self):
+        encuesta = False
+        for info in self.items:
+            if (info == None):
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgphist.promedio?pidmp="
+                    + self.pidm,
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            else:
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgphist.promedio?pidmp="
+                    + self.pidm + "&majrp=" + info["carrera"] + "&cicloap=" +
+                    info["inicio"],
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            out = r.text
+            if ("Encuestas</b>" in out):
+                encuesta = True
+            else:
+                out = out[out.find("Nombre:"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                self.nombre = out[:out.find("</FONT>")]
+
+                out = out[out.find("Situaci"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                situacion = out[:out.find("</FONT>")]
+
+                out = out[out.find("Carrera:"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                carrera = out[:out.find("</FONT>")]
+
+                self.__majrp = carrera[carrera.find("(") + 1:carrera.find(")")]
+
+                out = out[out.find("Centro:"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                centro = out[:out.find("</FONT>")]
+
+                out = out[out.find("Sede:"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                sede = out[:out.find("</FONT>")]
+
+                out = out[out.find("PROMEDIO"):]
+                out = out[out.find("<FONT"):]
+                out = out[out.find(">") + 1:]
+                promedio = out[:out.find("</FONT>")]
+
+                self.carreras.append({
+                    "carrera": carrera,
+                    "centro": centro,
+                    "sede": sede,
+                    "situacion": situacion,
+                    "promedio": promedio
+                })
+        if (not encuesta):
+            self.__getKardex()
+
+    def __getKardex(self):
+        cont = 0
+        encuesta = False
+        for info in self.items:
+            if (info == None):
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp="
+                    + self.pidm + "&majrp=" + self.__majrp,
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            else:
+                #r=get("http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp=891060&majrp=INNI&cicloap=201420",cookies=self.__COOKIES)
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgphist.kardex?pidmp="
+                    + self.pidm + "&majrp=" + info["carrera"] + "&cicloap=" +
+                    info["inicio"],
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            out = r.text
+            materias = []
+            if ("Encuestas</b>" in out):
+                encuesta = True
+            else:
+                '''
+				cab="Calendario "
+				cab2="</FONT>"
+				'''
+
+                cab = '<TR bgcolor="#ffffff">'
+                cab2 = "<A HREF="
+                cab3 = "<FONT "
+                cab4 = '<TD COLSPAN="3"></TD>'
+                while (cab in out):
+                    out = out[out.find(cab) + len(cab):]
+                    aprobado = True
+                    if (out.find(cab4) != 1):
+                        out = out[out.find(cab2) + len(cab2):]
+                        out = out[out.find(">") + 1:]
+                        nrc = out[:out.find("</A>")]
+
+                        out = out[out.find(cab2) + len(cab2):]
+                        out = out[out.find(">") + 1:]
+                        clave = out[:out.find("</A>")]
+
+                        out = out[out.find(cab3) + len(cab3):]
+                        out = out[out.find(">") + 1:]
+                        materia = out[:out.find("</FONT>")]
+
+                    out = out[out.find(cab3) + len(cab3):]
+                    if (out.find('COLOR="red"') == 0):
+                        aprobado = False
+                    out = out[out.find(">") + 1:]
+                    calificacion = out[:out.find("</FONT>")]
+
+                    out = out[out.find(cab3) + len(cab3):]
+                    out = out[out.find(">") + 1:]
+                    tipo = out[:out.find("</FONT>")]
+
+                    out = out[out.find(cab3) + len(cab3):]
+                    out = out[out.find(">") + 1:]
+                    nc = out[:out.find("</FONT>")]
+
+                    out = out[out.find(cab3) + len(cab3):]
+                    out = out[out.find(">") + 1:]
+                    fecha = out[:out.find("</FONT>")]
+
+                    materias.append({
+                        "nrc": nrc,
+                        "clave": clave,
+                        "materia": materia,
+                        "calificacion": calificacion,
+                        "aprobado": aprobado,
+                        "tipo": tipo,
+                        "nc": nc,
+                        "fecha": fecha
+                    })
+                    '''
+					out=out[out.find(cab):]
+					print out[:out.find(cab2)]
+					out=out[out.find(cab2)+len(cab2):]
+					'''
+            self.carreras[cont]["kardex"] = materias
+            cont = cont + 1
+        if (not encuesta):
+            self.__getActuales()
+
+    def __getActuales(self):
+        cont = 0
+        encuesta = False
+        for info in self.items:
+            if (info == None):
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgpregi.horario?pidmp="
+                    + self.pidm + "&majrp=" + self.__majrp,
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            else:
+                r = get(
+                    "http://siiauescolar.siiau.udg.mx/wal/sgpregi.horario?pidmp="
+                    + self.pidm + "&majrp=" + info["carrera"],
+                    headers=self.__headers,
+                    cookies=self.__COOKIES)
+            out = r.text
+            if ("Encuestas</b>" in out):
+                encuesta = True
+            else:
+                cab = '<SELECT NAME="pCiclo"'
+                if (cab in out):
+                    out = out[out.find(cab) + len(cab):]
+                    cab = " value='"
+                    out = out[out.find(cab) + len(cab):]
+                    ciclo = out[:out.find("'")]
+                    params = {
+                        "pidmP": self.pidm,
+                        "cicloP": ciclo,
+                        "encaP": "0"
+                    }
+                    if (info != None):
+                        params["majrP"] = info["carrera"]
+                    else:
+                        params["majrP"] = self.__majrp
+                    r = post(
+                        "http://siiauescolar.siiau.udg.mx/wal/sfpcoal.horario",
+                        headers=self.__headers,
+                        data=params)
+                    out = r.text
+                    out = out[out.find("FECHA FIN"):]
+
+                    materias = []
+
+                    cab = '<TR bgcolor="#'
+                    cab2 = '<TR bgcolor="#FFFFFF">'
+                    cab3 = '<TR bgcolor="#e5e5e5">'
+                    cab4 = '<TD COLSPAN="5">'
+                    cab5 = '<TD>'
+                    while (cab2 in out or cab3 in out):
+                        out = out[out.find(cab):]
+                        out = out[out.find(">") + 1:]
+                        if (out.find(cab4) != 1):
+                            out = out[out.find(cab5) + len(cab5):]
+                            nrc = out[:out.find("</TD>")]
+
+                            out = out[out.find(cab5) + len(cab5):]
+                            clave = out[:out.find("</TD>")]
+
+                            out = out[out.find(cab5) + len(cab5):]
+                            materia = out[:out.find("</TD>")]
+
+                            materias.append({
+                                "nrc": nrc,
+                                "clave": clave,
+                                "materia": materia
+                            })
+                    self.carreras[cont]["materias_actuales"] = materias
+                else:
+                    self.carreras[cont]["materias_actuales"] = []
+                cont = cont + 1
+        if (not encuesta):
+            self.valido = True
+            '''
+			materias=[]
+			cab='<TR bgcolor="'
+			cab2="<FONT "
+			print "Si entre aqui"
+			print out
+			while(cab in out):
+				out=out[out.find(cab)+len(cab):]
+
+				out=out[out.find(cab2)+len(cab2):]
+				out=out[out.find(">")+1:]
+				nrc=out[:out.find("</FONT>")]
+
+				out=out[out.find(cab2)+len(cab2):]
+				out=out[out.find(">")+1:]
+				clave=out[:out.find("</FONT>")]
+
+				out=out[out.find(cab2)+len(cab2):]
+				out=out[out.find(">")+1:]
+				materia=out[:out.find("</FONT>")]
+
+				out=out[out.find(cab2)+len(cab2):]
+				out=out[out.find(">")+1:]
+				creditos=out[:out.find("</FONT>")]
+
+				materias.append({"nrc":nrc,"clave":clave,"materia":materia,"creditos":creditos})
+				print nrc,clave,materia,creditos
+		self.carreras[cont]["materias_actuales"]=materias
+		print self.carreras[cont]["materias_actuales"]
+		cont=cont+1
+		self.valido=True
+		#print self.carreras[cont]
+		#print "\n\n=====================================================\n\n"'''
+
+    def __init__(self, codigo, nip):
+        self.codigo = ""
+        self.nip = ""
+        self.nombre = ""
+        self.items = []
+        self.carreras = []
+        valido = False
+        pidm = ""
+        self.codigo = codigo
+        self.nip = nip
+        params = {"p_codigo_c": str(codigo), "p_clave_c": str(nip)}
+        r = post(
+            "http://siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio",
+            headers=self.__headers,
+            data=params)
+        out = r.text
+        if ('class="error"' not in out):
+            self.__COOKIES = r.cookies
+            self.__getPidm(out)
+            self.__getLink()
+        else:
+            self.valido = False
+
+
+class Profesor():
+    __COOKIES = ""
+
+    __headers = {
+        'User-Agent':
+        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36',
+    }
+
+    pidm = ""
+    codigo = ""
+    nip = ""
+    nombre = ""
+    materias = []
+
+    valido = True
+
+    def __getLink(self):
+        r = get(
+            "http://siiauescolar.siiau.udg.mx/wus/gupmenug.menu_sistema?p_pidm_n="
+            + str(self.pidm),
+            headers=self.__headers,
+            cookies=self.__COOKIES)
+        out = r.text
+        grado = ""
+        flag = True
+        cab = '<img src="/ows-img/closed.gif" alt="'
+        cab2 = '<a href="'
+        while (cab in out and flag):
+            out = out[out.find(cab) + len(cab):]
+            grado = out[:out.find('"')]
+            out = out[out.find(cab2) + len(cab2):]
+            link = out[:out.find('"')]
+            if (" " not in link):
+                flag = False
+                self.__getCarreras(link)
+        if (flag):
+            self.items.append(None)
+            self.__getInfoBasica()
+
+    def __getPidm(self, text):
+        cab = 'p_bienvenida_c" VALUE="'
+        text = text[text.find(cab) + len(cab):]
+        text = text[:text.find('"')]
+        self.pidm = text
+
+    def __getInfoBasica(self):
+        r = get(
+            "http://siiauescolar.siiau.udg.mx/wpr/sipprac.lista_prof?pidmp=" +
+            self.pidm,
+            headers=self.__headers,
+            cookies=self.__COOKIES)
+        out = r.text
+
+        cab = "<FONT "
+
+        out = out[out.find("Nombre :"):]
+        out = out[out.find(cab) + len(cab):]
+        out = out[out.find(">") + 1:]
+        self.nombre = out[:out.find("</FONT>")]
+
+        cab = '<FONT COLOR="navy" FACE="arial" SIZE="2">'
+
+        while (cab in out):
+            out = out[out.find(cab) + len(cab):]
+            ciclo = out[:out.find("</FONT>")]
+
+            out = out[out.find(cab) + len(cab):]
+            nrc = out[:out.find("</FONT>")]
+
+            out = out[out.find(cab) + len(cab):]
+            clave = out[:out.find("</FONT>")]
+
+            out = out[out.find(cab) + len(cab):]
+            nombre = out[:out.find("</FONT>")]
+
+            self.materias.append({
+                "ciclo": ciclo,
+                "nrc": nrc,
+                "clave": clave,
+                "nombre": nombre
+            })
+        r = get(
+            "http://siiauescolar.siiau.udg.mx/wpr/silprac.asistencias_profesor",
+            headers=self.__headers,
+            cookies=self.__COOKIES)
+        out = r.text
+        cab = '<TD style="font-family:arial;font-size:12;background-color:#ffffff;">'
+        cab2 = '<A HREF='
+        while (cab in out):
+            out = out[out.find(cab) + len(cab):]
+            ciclo = out[:out.find("</TD>")]
+
+            out = out[out.find(cab) + len(cab):]
+            nrc = out[:out.find("</TD>")]
+
+            out = out[out.find(cab2) + len(cab2):]
+            out = out[out.find(">") + 1:]
+            clave = out[:out.find("</A>")]
+
+            out = out[out.find(cab) + len(cab):]
+            nombre = out[:out.find("</TD>")]
+
+            out = out[out.find("<TR>"):]
+
+            self.materias.append({
+                "ciclo": ciclo,
+                "nrc": nrc,
+                "clave": clave,
+                "nombre": nombre
+            })
+
+        self.valido = True
+
+    def __init__(self, codigo, nip):
+        self.pidm = ""
+        self.nombre = ""
+        self.materias = []
+        self.codigo = codigo
+        self.nip = nip
+        params = {"p_codigo_c": str(codigo), "p_clave_c": str(nip)}
+        r = post(
+            "http://siiauescolar.siiau.udg.mx/wus/gupprincipal.valida_inicio",
+            headers=self.__headers,
+            data=params)
+        out = r.text
+        if ('class="error"' not in out):
+            self.__COOKIES = r.cookies
+            self.__getPidm(out)
+            self.__getInfoBasica()
+        else:
+            self.valido = False
+
+
+if __name__ == "__main__":
+    codigo = input("Ingresa tu código:\n> ")
+    nip = input("Ingresa tu NIP:\n> ")
+    alumno = Alumno(codigo, nip)
+    print(alumno.nombre)
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..092de2f
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,15 @@
+[tool.poetry]
+name = "lib_siiau"
+version = "0.1.0"
+description = "Extrae información de alumnos y profesores de la Universidad de Guadalajara"
+authors = ["kirbylife <gabriel13m@gmail.com>"]
+
+[tool.poetry.dependencies]
+python = "^3.6"
+requests = "^2.22"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"