ivmelo / suap-api-php
用于SUAP API的PHP包装器。
Requires
- guzzlehttp/guzzle: ~6.0
This package is not auto-updated.
Last update: 2024-09-14 19:31:14 UTC
README
这是一个用于IFRN的SUAP(Sistema Unificado de Administração Publica,统一公共管理系统)API的PHP包装器。该软件包允许您在PHP应用程序中访问SUAP数据。
它是SUAP Bot的主要组件。
目前提供成绩单(成绩,出勤率)信息、课程、时间表、上课地点和学生数据。
此软件包已更新,现在通过SUAP官方API访问数据,而不是通过web scraping。如果您需要使用进行web scraping的版本,请查看标签 0.2.0
。
安装
建议使用Composer来安装。
将以下依赖项添加到您的composer.json中,并执行composer update
。
"require": { "ivmelo/suap-api-php": "1.0.*" }
或者,您可以直接通过命令行安装
$ composer require "ivmelo/suap-api-php": "1.0.*"
使用
您可以使用访问令牌实例化一个客户端,或者使用空构造函数。
$suap = SUAP('token'); // ou $suap = SUAP(); $suap->setToken('token');
身份验证
为了进行身份验证,只需调用方法autenticar($usuario, $chave)
。
$suap = SUAP();
$data = $suap->autenticar('20121014040000', 'senhaouchave');
该方法将返回一个包含访问令牌($data['token']
)的数组。
Array
(
[token] => eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJ1c2VybmFtZSI6IjIwMTIxMDE0MDQwMDgzIiwib3JpZ19pYXQiOjE0OTQwMjcyMDksInVzZXJfaWQiOjEwODQyLCJlbWFpbCI6Iml2YW5pbHNvbi5tZWxvQGFjYWRlbWljby5pZnJuLmVkdS5iciIsImV4cCI6MTQ5NDExMzYwOX0
)
令牌将保存在对象中,以便在后续请求中重复使用。如果您不想保存令牌,只需将构造函数的第四个参数设置为false:autenticar($matricula, $senha, true, false)
。
您还可以使用负责人访问令牌进行登录。为此,只需将方法autenticar($matricula, $chave, true)
的第三个参数传递为true。
$suap = SUAP();
$suap->autenticar('20121014040000', 'chave', true);
要获取访问令牌,请登录SUAP,然后在“我的数据”>“个人信息”>“一般数据”中查找“访问令牌”。它应该是5位数,类似于4d5f9
。
学生数据
要获取学生数据,请调用方法getMeusDados()
。
$meusDados = $suap->getMeusDados();
输出将是一个包含学生和课程基本信息的数组。
Array
(
[id] => 123456
[matricula] => 20121014040000
[nome_usual] => Nome Sobrenome
[email] => nome.sobrenome@academico.ifrn.edu.br
[url_foto_75x100] => /media/alunos/000000.jpg
[tipo_vinculo] => Aluno
[vinculo] => Array
(
[matricula] => 20121014040000
[nome] => Nome Completo Do Estudante
[curso] => Tecnologia em Análise e Desenvolvimento de Sistemas
[campus] => CNAT
[situacao] => Matriculado
[cota_sistec] =>
[cota_mec] =>
[situacao_sistemica] => Migrado do Q-Acadêmico para o SUAP
)
)
学年度
要获取学生的学年度,请使用方法getMeusPeriodosLetivos()
。
$meusDados = $suap->getMeusPeriodosLetivos();
输出将是一个包含学生学年度列表的数组。
Array
(
[0] => Array
(
[ano_letivo] => 2012
[periodo_letivo] => 1
)
[1] => Array
(
[ano_letivo] => 2012
[periodo_letivo] => 2
)
...
[10] => Array
(
[ano_letivo] => 2017
[periodo_letivo] => 1
)
)
成绩单
要获取学生的成绩单数据,请实例化一个客户端并调用方法getMeuBoletim($anoLetivo, $periodoLetivo)
。
$boletim = $suap->getMeuBoletim(2017, 1);
输出将是一个包含学生成绩单中找到的科目信息的数组。
只有高等教育学生将获得第1阶段和第2阶段的成绩。
Array
(
[0] => Array
(
[codigo_diario] => 15360
[disciplina] => TEC.0028 - Desenvolvimento de Sistemas Coorporativos
[segundo_semestre] =>
[carga_horaria] => 80
[carga_horaria_cumprida] => 76
[numero_faltas] => 8
[percentual_carga_horaria_frequentada] => 90
[situacao] => Aprovado
[quantidade_avaliacoes] => 2
[nota_etapa_1] => Array
(
[nota] => 92
[faltas] => 0
)
[nota_etapa_2] => Array
(
[nota] => 50
[faltas] => 8
)
[nota_etapa_3] => Array
(
[nota] =>
[faltas] => 0
)
[nota_etapa_4] => Array
(
[nota] =>
[faltas] => 0
)
[media_disciplina] => 67
[nota_avaliacao_final] => Array
(
[nota] =>
[faltas] => 0
)
[media_final_disciplina] => 67
)
[1] => Array
(
[codigo_diario] => 15359
[disciplina] => TEC.0010 - Empreendedorismo
[segundo_semestre] =>
[carga_horaria] => 40
[carga_horaria_cumprida] => 40
[numero_faltas] => 6
[percentual_carga_horaria_frequentada] => 85
[situacao] => Aprovado
[quantidade_avaliacoes] => 2
[nota_etapa_1] => Array
(
[nota] => 80
[faltas] => 2
)
[nota_etapa_2] => Array
(
[nota] => 100
[faltas] => 4
)
[nota_etapa_3] => Array
(
[nota] =>
[faltas] => 0
)
[nota_etapa_4] => Array
(
[nota] =>
[faltas] => 0
)
[media_disciplina] => 92
[nota_avaliacao_final] => Array
(
[nota] =>
[faltas] => 0
)
[media_final_disciplina] => 92
)
...
[5] => Array
(
[codigo_diario] => 15363
[disciplina] => TEC.0030 - Teste de Software
[segundo_semestre] =>
[carga_horaria] => 80
[carga_horaria_cumprida] => 72
[numero_faltas] => 24
[percentual_carga_horaria_frequentada] => 67
[situacao] => Aprovado
[quantidade_avaliacoes] => 2
[nota_etapa_1] => Array
(
[nota] => 47
[faltas] => 20
)
[nota_etapa_2] => Array
(
[nota] => 73
[faltas] => 4
)
[nota_etapa_3] => Array
(
[nota] =>
[faltas] => 0
)
[nota_etapa_4] => Array
(
[nota] =>
[faltas] => 0
)
[media_disciplina] => 63
[nota_avaliacao_final] => Array
(
[nota] =>
[faltas] => 0
)
[media_final_disciplina] => 63
)
)
虚拟班级列表
要查看虚拟班级列表(包括id、时间表和上课地点),请使用方法getTurmasVirtuais($anoLetivo, $periodoLetivo)
。
$turmasVirtuais = $suap->getTurmasVirtuais(2017, 1);
该方法将返回一个包含当前学期科目列表和其他相关信息的数组。
Array
(
[0] => Array
(
[id] => 20118
[sigla] => TEC.0011
[descricao] => Gestão de Tecnologia da Informação
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 03 - DIATINF - Prédio Anexo - 1º Andar (CNAT)
)
[horarios_de_aula] => 2V34 / 3V56
)
[1] => Array
(
[id] => 20119
[sigla] => TEC.0012
[descricao] => Computador e Sociedade
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 03 - DIATINF - Prédio Anexo - 1º Andar (CNAT)
)
[horarios_de_aula] => 3V34
)
[2] => Array
(
[id] => 20120
[sigla] => TEC.0036
[descricao] => Seminário de Orientação para Trabalho de Conclusão de Curso
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 03 - DIATINF - Prédio Anexo - 1º Andar (CNAT)
)
[horarios_de_aula] => 4V34
)
[3] => Array
(
[id] => 20102
[sigla] => TEC.0004
[descricao] => Epistemologia da Ciência
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 02 - DIATINF - Informática (CNAT)
)
[horarios_de_aula] => 3M56
)
[4] => Array
(
[id] => 23115
[sigla] => TEC.0075
[descricao] => Aplicações com Interfaces Ricas
[observacao] =>
[locais_de_aula] => Array
(
[0] => Laboratório 06 - DIATINF - Informática (CNAT)
)
[horarios_de_aula] => 2M56 / 4M56
)
)
虚拟班级详情
要查看虚拟班级的详细信息,请使用方法getTurmaVirtual($idDaTurma)
。
$course = $suap->getTurmaVirtual(23115);
返回将是一个包含班级详细信息(包括参与者、课程、教学材料、教师等)的数组。
Array
(
[id] => 23115
[ano_letivo] => 2017
[periodo_letivo] => 1
[componente_curricular] => TEC.0075 - Aplicações com Interfaces Ricas (NCT) - Graduação [60 h/80 Aulas] - Curso 404
[professores] => Array
(
[0] => Array
(
[matricula] => 123456
[foto] => /media/fotos/75x100/ABCEDF000000.jpg
[email] => email.professor@ifrn.edu.br
[nome] => Nome do Professor
)
)
[locais_de_aula] => Array
(
[0] => Laboratório 06 - DIATINF - Informática (CNAT)
)
[data_inicio] => 2017-03-21
[data_fim] => 2017-08-01
[participantes] => Array
(
[0] => Array
(
[matricula] => 20121000000000
[foto] => /media/alunos/75x100/000000.jpg
[email] => email.do.aluno@academico.ifrn.edu.br
[nome] => Nome do Aluno
)
[1] => Array
(
[matricula] => 20121000000000
[foto] => /media/alunos/75x100/000000.jpg
[email] => email.do.aluno@academico.ifrn.edu.br
[nome] => Nome do Aluno
)
[2] => Array
(
[matricula] => 20121000000000
[foto] => /media/alunos/75x100/000000.jpg
[email] => email.do.aluno@academico.ifrn.edu.br
[nome] => Nome do Aluno
)
[3] => Array
(
[matricula] => 20121000000000
[foto] => /media/alunos/75x100/000000.jpg
[email] => email.do.aluno@academico.ifrn.edu.br
[nome] => Nome do Aluno
)
)
[aulas] => Array
(
[0] => Array
(
[etapa] => 1
[professor] => Nome do Professor
[quantidade] => 2
[faltas] => 0
[conteudo] => Isolated Storage.
[data] => 2017-05-03
)
[1] => Array
(
[etapa] => 1
[professor] => Nome do Professor
[quantidade] => 2
[faltas] => 2
[conteudo] => Treinamento em Python.
[data] => 2017-04-26
)
[2] => Array
(
[etapa] => 1
[professor] => Nome do Professor
[quantidade] => 2
[faltas] => 0
[conteudo] => Introdução ao Python.
[data] => 2017-04-24
)
)
[materiais_de_aula] => Array
(
[0] => Array
(
[url] => /media/edu/material_aula/material_de_aula.pdf
[data_vinculacao] => 2017-04-18
[descricao] => Exemplo Silverlight (DataGrid)
)
[1] => Array
(
[url] => /media/edu/material_aula/material_de_aula.pdf
[data_vinculacao] => 2017-04-07
[descricao] => Estilos no Silverlight (Exemplos)
)
[2] => Array
(
[url] => /media/edu/material_aula/material_de_aula.pdf
[data_vinculacao] => 2017-04-05
[descricao] => Silverlight Exemplos01
)
)
)
上课时间表
要获取上课时间表(以数组形式),请使用方法getHorarios($anoLetivo, $periodoLetivo)
。
$horarios = $suap->getHorarios(2017, 1);
这将返回一个关联数组,使用星期几作为键(1:星期日,2:星期一,3:星期二...),学期作为子键(M:上午,V:下午,N:晚上)和课程时段作为第二个子键(1-6)。
例如,获取周二下午的第四节课
print_r($schedule[3]['V'][4]);
方法返回的结果如下(省略了一些部分,使用 ...
表示)。
Array
(
[1] => Array
(
[M] => Array
(
...
)
[V] => Array
(
...
)
[N] => Array
(
...
)
)
[2] => Array
(
[M] => Array
(
[1] => Array
(
[time] => 07:00 - 07:45
)
...
[5] => Array
(
[time] => 10:30 - 11:15
[aula] => Array
(
[id] => 23115
[sigla] => TEC.0075
[descricao] => Aplicações com Interfaces Ricas
[observacao] =>
[locais_de_aula] => Array
(
[0] => Laboratório 06 - DIATINF - Informática (CNAT)
)
[horarios_de_aula] => 2M56 / 4M56
)
)
[6] => Array
(
[time] => 11:15 - 12:00
[aula] => Array
(
[id] => 23115
[sigla] => TEC.0075
[descricao] => Aplicações com Interfaces Ricas
[observacao] =>
[locais_de_aula] => Array
(
[0] => Laboratório 06 - DIATINF - Informática (CNAT)
)
[horarios_de_aula] => 2M56 / 4M56
)
)
)
[V] => Array
(
[1] => Array
(
[time] => 13:00 - 13:45
)
[2] => Array
(
[time] => 13:45 - 14:30
)
[3] => Array
(
[time] => 14:40 - 15:25
[aula] => Array
(
[id] => 20118
[sigla] => TEC.0011
[descricao] => Gestão de Tecnologia da Informação
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 03 - DIATINF - Prédio Anexo - 1º Andar (CNAT)
)
[horarios_de_aula] => 2V34 / 3V56
)
)
[4] => Array
(
[time] => 15:25 - 16:10
[aula] => Array
(
[id] => 20118
[sigla] => TEC.0011
[descricao] => Gestão de Tecnologia da Informação
[observacao] =>
[locais_de_aula] => Array
(
[0] => Audio de Visual 03 - DIATINF - Prédio Anexo - 1º Andar (CNAT)
)
[horarios_de_aula] => 2V34 / 3V56
)
)
[5] => Array
(
[time] => 16:30 - 17:15
)
[6] => Array
(
[time] => 17:15 - 18:00
)
)
[N] => Array
(
[1] => Array
(
[time] => 19:00 - 19:45
)
...
[4] => Array
(
[time] => 21:25 - 22:10
)
)
)
[3] => Array
(
...
)
...
[7] => Array
(
...
)
)
如果在请求过程中发生错误怎么办?
如果在请求过程中发生错误,HTTP 客户端将抛出异常。这包括登录失败、404、500 等...
您应该在每次使用 API 方法时使用 try-catch 块来处理应用程序中可能发生的错误。
开发(如何贡献)
为了帮助开发,请克隆仓库,安装依赖项,并使用位于 tests 文件夹中的 test.php 文件。
$ git clone git@github.com:ivmelo/suap-api-php.git $ cd suap-api-php $ composer install $ cd tests $ php test.php <matricula> <chave>
根据您的喜好修改 test.php 文件,但除非您为库添加了新功能,否则请避免提交更改。
最新开发代码位于分支 master
。
待办事项
查看 问题 部分,了解还有哪些工作要做或是否有需要关注的错误。
早期版本
要查看库的早期版本(包括进行网络爬取的版本),请查看项目的标签。
许可证
MIT 许可证 (MIT)
版权所有 © 2016 Ivanilson Melo
特此授予任何人免费获得此软件及其相关文档文件(“软件”)副本的权限,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供副本的个人执行上述操作,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯他人权利的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,不论此类责任是否因软件或软件的使用或其他方式而产生。