nquocnghia/edtubx

波尔多大学时间表分析器

v2.0 2017-10-02 08:51 UTC

This package is not auto-updated.

Last update: 2024-09-23 06:19:20 UTC


README

这个库允许您获取波尔多大学不同院系的时间表,过滤掉课程,并以 iCalendar (.ics) 格式导出。

Build Status

先决条件

此库的使用需要 php-xml 扩展。

安装

您可以直接从该存储库的 发布页面 下载此库。

您也可以使用 Composer 安装它。只需在项目目录中运行以下命令即可

$ composer require nquocnghia/edtubx

用法

获取所有时间表的 URL
// cela retourne un array de 4 dimensions
$urls = \QnNguyen\EdtUbxNS\Core\EdtIndex::fetch(); 

// 1st dimension: Licence|Master1|Master2
// 2nd dimension: Semestre1|Semestre2
// 3rd dimension: Série de cours (ie. IN601)
// 4th dimension: <Nom du groupe de TD>|(rien)

// exemple: l'url vers l'emploi du temps du 2è semestre du groupe A1 de la Licence Informatique (IN601)
$url = $urls['Licence']['Semestre2']['IN601']['GROUPE A1']
下载、分析和导出时间表
use \QnNguyen\EdtUbxNS\Core\EdtUbx;

// Initialiser l'objet EdtUbx
$edt = EdtUbx::makeFromUrl($url);

// ou bien si vous voulez remplacer le nom d'une/des UE(s)
$edt = EdtUbx::makeFromUrl($url, [
    'codeUE1' => 'nouveau nom1',
    'codeUE2' => 'nouveau nom2',
    ...
]);

// Générer un fichier iCalendar (.ics)
$edt->toICS();
时间表过滤

有时您可能有可选的 UEs 或与您无关的 UEs。因此,您可以将它们从时间表中排除,使其更易于阅读。

此库提供了进行过滤的逻辑结构

interface IContidion {
    /**
     * @return boolean
     */
    function evaluate(EdtUbxItem $item);
}

// les tests
abstract class PropertyCondition implements ICondition {}
class MatchInString extends PropertyCondition {}
class MatchInArray extends PropertyCondition {}

// les opérateurs logiques
abstract class PolyadicCondition implements ICondition {}
class AndCondition extends PolyadicCondition {}
class OrCondition extends PolyadicCondition {}
class NotCondition extends PolyadicCondition {}

// La classe CF (ConditionFactory) sert à générer les classes
// de la famille ICondition en raccoursissant le syntax.
class CF {
    public static function _string($propertyName, $regexPattern) {}
    public static function _array($propertyName, $regexPattern) {}
    public static function _and(ICondition ...$conditions) {}
    public static function _or(ICondition ...$conditions) {}
    public static function _not(ICondition $condition) {}
}

因此,类型为 EdtUbx 的对象可以通过 filter(ICondition $condition) 方法过滤时间表。返回的结果将是当前时间表的过滤副本。

过滤示例

一个三年级学生想从其时间表中排除

  • J1IN6012 的所有课程
  • 所有不是为 组 4TD J1IN6011
// !J1IN6012 && !(J1IN6011 && td && !groupe4))
$filteredEdt = $edt->filter(
        CF::_and(
            CF::_not(CF::_string('code', 'J1IN6012')),
            CF::_not(
                CF::_and(
                    CF::_string('code', 'J1IN6011'),
                    CF::_string('category', 'td( machine)?'),
                    CF::_not(CF::_string('notes', 'groupe( )?4'))
                    // bien lu, parfois le groupe est indiqué dans 'notes'
                    // et non pas dans 'groupes' T_T
                )
            )
        )
);

依赖关系

许可

LICENSE

向我发推文 @nquocnghia