ivmelo / suapclient
Requires
- guzzlehttp/guzzle: ~6.0
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)
版权所有(c)2016 Ivanilson Melo
特此授予任何获得本软件及其相关文档副本(“软件”)的个人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向提供软件的个人再授予上述权利,前提是必须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,无论此类责任是否源于、因之而发生或与此类软件或其使用或其他交易有关。