ivmelo/suapclient

此包已被废弃,不再维护。作者建议使用 ivmelo/suap-api-php 包。

用于SUAP API的PHP包装器。

v1.0.2 2017-05-07 22:36 UTC

README

SensioLabsInsight StyleCI Latest Stable Version Total Downloads License

这是一个用于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

特此授予任何获得本软件及其相关文档副本(“软件”)的个人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向提供软件的个人再授予上述权利,前提是必须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,无论此类责任是否源于、因之而发生或与此类软件或其使用或其他交易有关。