nathnat/pronote-php

PHP API 封装 PRONOTE 学生管理系统。

v1.0 2023-03-21 17:06 UTC

This package is auto-updated.

Last update: 2024-09-21 20:25:55 UTC


README

介绍

一个 PHP 库,用于从学生账户访问 PRONOTE 的数据。该库使用 PHP 利用 Pronote 的内部 API。

可获取的数据

  • Pronote、学校和用户信息
  • 课程表
  • 作业
  • 成绩
  • 缺席/惩罚/迟到

安装

该库可以通过 Composer 安装,并在 Packagist 上提供 nathnat/pronote-php

$ composer require nathnat/pronote-php

使用方法

首先,使用 Composer 在代码开头包含库

require 'vendor/autoload.php';

use Pronote\Pronote;

该库的使用非常简单直观,用于连接、获取成绩、课程表等。

示例

如果您想直接开始,以下是一个简单的使用示例

<?php

require 'vendor/autoload.php';

use Pronote\Pronote;

// Initialise le client
$client = new Pronote('https://demo.index-education.net/pronote/eleve.html', 'demonstration', 'pronotevs', /*, cas*/);

// Connecte le client à Pronote
$client->login();

echo "Connecté en tant que {$client->user->name}\n";

$today = new DateTime();
$timetable = $client->timetable($today); // Récupére l'emploi du temps du jour

foreach ($client->periods as $period) {
    $grades = $period->grades();
    foreach ($grades as $grade) { // Parcourt toutes les notes
        echo "{$grade['value']}/{$grade['scale']}\n"; // Affiche la note dans ce style : 15/20
    }
}

以下是一个文档,介绍了大多数主要功能。

初始化客户端

客户端对应于 Pronote 类的一个实例。客户端一次只能连接到一个 Pronote 会话。

// Initialise le client
$client = new Pronote('https://demo.index-education.net/pronote/eleve.html', 'demonstration', 'pronotevs' /*, cas*/);

// Connecte le client à Pronote
$client->login();

支持的地区账户

仅在你无法直接通过 Pronote 连接,但必须通过特殊地区界面时。

如果您可以直接在 Pronote 界面登录,该 API 应该适用于任何学院。

目前支持的地区账户很少。

以下是目前支持的学院列表

案例列表

在初始化客户端时必须提供案例。所有案例都可以通过 PronoteCas 类访问。

// On inclut la classe
use Pronote\PronoteCas;

// Initialise le client avec ici l'interface de l'Ile de France
$client = new Pronote(
    'https://demo.index-education.net/pronote/eleve.html',
    'demonstration',
    'pronotevs',
    PronoteCas::ILE_DE_FRANCE
);

获取课程表

timetable() 函数返回学生在两个日期之间的课程,按时间顺序排序。如果未提供第二个日期,则仅返回第一个日期的课程。

注意:日期必须是 PHP 原生类的实例 DateTime

$today = new DateTime();
$timetable = $client->timetable($today); // Récupére l'emploi du temps du jour

// Récupère les cours entre le 25 février 2023 et le 5 mars 2023
$timetable = $client->timetable(
    DateTime::createFromFormat('d/m/Y', '25/02/2023'),
    DateTime::createFromFormat('d/m/Y', '5/03/2023'),
);

该函数返回一个具有此形状的表格

Array
(
    [0] => Array
        (
            [start] => 27/02/2023 09:00:00 // L'heure de début du cours
            [end] => 27/02/2023 10:00:00   // L'heure de fin du cours
            [color] => #2338BB             // La couleur de la case du cours sur Pronote
            [status] => 'Cours annulé'     // Le statut du cours (Cours annulé, Prof. absent, etc.)
            [subject] => FRANCAIS          // La matière étudiée
            [teacher] => GALLET B.         // Le nom du professeur
            [room] => 105                  // La classe où a lieu le cours
        )
    ...

获取作业

->timetable() 函数类似,允许获取作业的 ->homework() 函数返回两个日期之间的作业。

$today = new DateTime();
$timetable = $client->homework($today); // Récupére les devoirs du jour

// Récupère les devoirs entre le 25 février 2023 et le 5 mars 2023
$timetable = $client->homework(
    DateTime::createFromFormat('d/m/Y', '25/02/2023'),
    DateTime::createFromFormat('d/m/Y', '5/03/2023'),
);

该函数返回一个具有此形状的表格

Array
(
    [0] => Array
        (
            [subject] => FRANCAIS                            // La matière du devoir
            [description] => <div>Exercice 36 page 132</div> // La description du devoir
            [backgroundColor] => #FEA7FC                     // La couleur de fond du devoir
            [isDone] => false                                // Si le devoir est fait
            [date] => 15/03/2023                             // La date de rendu du devoir
        )
    ...

周期

周期是学校提供的学年周期(第一学期、第二学期、白卷考试等)。周期存储在 $client->periods 表格中。每个周期允许访问相关的数据,如成绩、缺席和迟到。

获取学生的成绩

成绩可以通过周期获取。

存在三个函数

  • $period->grades() 允许获取以下形式的笔记表格

    Array
    (
        [0] => Array
            (
                [title] => DS1 Civilisations     // La description de la note
                [value] => 13                    // La note de l'élève
                [scale] => 20                    // Le barème
                [subject] => HISTOIRE-GEOGRAPHIE // La matière de la note
                [average] => 11,89               // La moyenne de la classe
                [max] => 15                      // La note la plus basse dans la classe
                [min] => 10                      // La note la plus haute dans la classe
                [coefficient] => 2
                [date] => 26/09/2022             // La date de la note
                [isBonus] => false               // Si la note est bonus : seul les points au dessus de 10 comptent
                [isOptionnal] => false           // Si la note est optionnel : elle compte seulement si elle augmente la moyenne
                [isScaledTo20] => false          // Si la note est ramené sur 20
            )
        ...
  • $period->gradesBySubject() 允许按科目获取笔记

    Array ()
        [0] => Array
            (
                [name] => ANGLAIS LV1    // Le nom de la matière
                [average] => Array
                    (
                        [student] => 17  // La moyenne de l'élève dans la matière
                        [class] => 13,79 // La moyenne de la classe dans la matière
                        [min] => 6,5     // La plus basse moyenne de la classe
                        [max] => 18      // La plus haute moyenne de la classe
                        [scale] => 20    // Le barème des moyennes
                    )
    
                [color] => #B76AFD       // La couleur de fond de la matière dans l'emploi du temps
                [grades] => Array ()     // Un tableau contenant toutes les notes de la matière au même format que celles renvoyées par la fonction `->grades()`
            )
        ...
  • 最后,$period->overallAverage() 允许获取学生的平均分

    $moyennes = $client->periods[1]->overallAverage();
    
    echo 'Moyennes du ' . $client->periods[1]->name . " : \n";
    print_r($moyennes);
    Moyennes du Trimestre 2 : 
    Array
    (
        [student] => 14,33 // La moyenne de l'élève
        [class] => 11,54   // La moyenne de la classe
        [scale] => 20      // Le barème des moyennes
    )

获取学生的缺席/迟到/惩罚

  • 可以通过周期获取成绩
$absences = $client->periods[1]->absences(); // Fonction pour récupérer les absences renvoit :

Array
(
    [0] => Array
        (
            [from] => 02/02/2023 09:00:00 // La date de début de l'absence
            [to] => 02/02/2023 10:00:00   // La date de fin de l'absence
            [isJustified] => true         // Si l'absence est justifiée
            [hoursMissed] => 1h00         // Le nombre d'heure ratée
            [daysMissed] => 1             // Le nombre de jour raté
            [reasons] => Array            // La liste des raisons de l'absene
                (
                    [0] => L-Rendez-vous médical
                )
        )
    ...
  • 可以通过周期获取迟到
$retards = $client->periods[1]->delays(); // Fonction pour récupérer les retards renvoit :

Array
(
    [0] => Array
        (
            [date] => 27/01/2023 09:00:00 // La date du retard
            [minutesMissed] => 5          // Le nombre de minute ratée
            [justified] => false          // Si l'absence est justifié
            [justification] =>            // La justification du retard
            [reasons] => Array            // La liste des raisons du retard
                (
                    [0] => PROBLEME DE REVEIL
                )

        )
    ...
  • 可以通过周期获取惩罚
$punitions = $client->periods[1]->punishments(); // Fonction pour récupérer les punitions renvoit :

Array
(
    [0] => Array
        (
            [given] => 01/09/2022                              // La date à laquelle la punition a été donnée
            [isExclusion] => false                             // Si la punition est une exclusion
            [isDuringLesson] => true                           // Si la punition est durant un cours
            [homework] => Exercices 1 à 18 p283-284            // Les devoirs donnés par la punition
            [homeworkDocuments] => Array()                     // Les documents attachés pour ces devoirs
            [circonstances] => Insultes suite à une réprimande // Les circonstances de la punition
            [circonstancesDocuments] => Array()                // Les documents pouvant accompagné les circonstances
            [nature] => Retenue                                // La nature de la punition
            [reasons] => Array                                 // La liste des raisons de la punition
                (
                    [0] => Violence verbale
                )

            [giver] => M. PROFESSEUR M.                        // Le nom de la personne ayant donné la punition
            [isSchedulable] => true                            // Si la punition est programmable
            [schedule] => Array                                // Liste des dates pour lesquelles la punition est programmé
                (
                    [0] => 07/09/2022
                )
            [duration] => 60                                   // La durée de la punition
        )
    ...