Skip to content

Instantly share code, notes, and snippets.

@pilla
Last active August 7, 2018 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pilla/8259f97dfb7295e8463f41992f4737c5 to your computer and use it in GitHub Desktop.
Save pilla/8259f97dfb7295e8463f41992f4737c5 to your computer and use it in GitHub Desktop.
Cria planilha CSV com notas do Cobalto UFPEL -- agora com exames
#!/usr/bin/env python3
# me likes python 3
import requests
import json
import sys
import csv
import re
import time
import getpass
from functools import reduce
if len(sys.argv)<3:
print ("Uso: parseNotasSF.py CPF numero_turma")
quit()
cpf = sys.argv[1]
turma = sys.argv[2]
print ("Digite sua senha")
senha = getpass.getpass()
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
s = requests.session()
r = s.post("https://cobalto.ufpel.edu.br/autenticacao/login/entrar", data={"txtEmail":cpf, "txtSenha":senha, "btnEntrar":"entrar","submit":"entrar"},headers=header)
rdict = eval(r.text)
if 'error' in rdict.keys():
print ("CPF ou senha incorretos.")
quit()
# Pega os alunos e suas notas
r = s.get("https://cobalto.ufpel.edu.br/academico/professores/avaliacao/listaAcompanhamentoNotas/%s" % turma, headers=header)
html = r.text
cut = re.sub('<.+>', '', html)
print (cut)
data=json.loads(cut)
#print (json.dumps(data))
# pega os alunos e avaliacoes
alunos = {}
aval = {}
notas_finais = {}
pesos = {}
nomes = {}
exame = {}
nome_exame = "NOPE"
for row in data["rows"]:
alunos[row["id"]] = row["nome"]
aval[row["avaliacao"]] = row["avaliacao"]
notas_finais[row["nome"]] = float(row["media_final"])
if row["flg_exame"] == 'N':
exame["avaliacao"] = False
pesos[row["avaliacao"]] = float(row["peso"])
else:
exame["avaliacao"] = True
nome_exame = row["avaliacao"]
nomes[row["nome"]] = row["id"]
# armazena por aluno
nota_geral = {}
# nome é chave
# depois avaliacoes em sequencia
for nome in nomes:
nota_geral[nome] = {}
for row in data["rows"]:
print(row)
nota_geral[row["nome"]][row["avaliacao"]] = row["nota"]
# ordena alunos
alunos_ordenados = sorted(nomes.items(), key=lambda x: x[0])
# ordena avaliacoes
aval_ordenadas = sorted(aval.keys())
# cria cabecalho com info sobre peso
aval_com_peso = []
for aval in aval_ordenadas:
if aval != nome_exame:
aval_com_peso.append(aval+" (" + str(pesos[aval]) + ")")
# colunas da tabela são NOME e depois as AVALIACOES, fechando com nota final
campos = ["nome"]
campos.extend(aval_com_peso)
campos.append("Nota final")
if nome_exame != "NOPE":
campos.append("Exame")
# exporta tudo pra csv
with open('aval_'+turma+'.csv', 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=campos)
writer.writeheader()
for aluno in [x[0] for x in alunos_ordenados]:
row = {}
row['nome'] = aluno
for aval in aval_ordenadas:
if aval != nome_exame:
aval_peso = aval+" (" + str(pesos[aval]) + ")"
row[aval_peso] = "{:.1f}".format(float(nota_geral[aluno][aval]))
row['Nota final'] = "{:.1f}".format(float(notas_finais[row["nome"]]))
if nome_exame != "NOPE":
if nota_geral[aluno][nome_exame] != None:
row['Exame'] = "{:.1f}".format(float(nota_geral[aluno][nome_exame]))
print(row)
writer.writerow(row)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment