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"