Flutter插件albiruni的使用_albiruni是一个用于访问 IIUM 的课程表网站数据的插件

Flutter插件albiruni的使用_albiruni是一个用于访问 IIUM 的课程表网站数据的插件

Flutter插件albiruni介绍

albiruni 是一个用于访问 IIUM 的课程表网站数据的插件。感谢 @PlashSpeed-Aiman 提供的代码基础。

Flutter插件albiruni开始使用

Flutter插件albiruni安装

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      albiruni: ^版本号
    
  2. 运行 dart pub get 获取依赖。

  3. 开始开发。确保更新或添加测试文件。运行 dart test 来运行测试套件。

特性

获取提供的科目列表

// 创建 albiruni 实例
Albiruni albiruni = Albiruni(semester: 1, session: "2021/2022");
// 使用类中的方法
var (subjects, totalPage) = await albiruni.fetch("ECONS");

支持本科和研究生课程。传递 StudyGrade.ug(默认)或 StudyGrade.pg

Albiruni(semester: 1, session: "2022/2023", studyGrade: StudyGrad.pg);

搜索特定科目

将科目课程代码放在 course 参数中。必须是 albiruni 格式,例如 ABDC 1234

fetch("ECONS", course: "ECON 1140");

过滤第三年的课程:

fetch("CCAC", course: "CCUB 3");

albiruni格式

课程代码必须遵循以下格式:ABCD 1234。前四个字符是科目代码,后四个字符是科目编号。空格是必需的。

var userInput = "ccub2621";
fetch("CCAC", course: userInput.toAlbiruniFormat()); // formatted: CCUB 2621

JSON解析

从 JSON 解析科目数据到 Dart 对象,使用 fromJson() 构造函数。

示例 JSON:

{
  "code": "CHEN 1212",
  "sect": 1,
  "title": "THERMODYNAMICS",
  "chr": 2.0,
  "venue": null,
  "lect": [
    "DR. MOHD. FIRDAUS BIN ABD. WAHAB",
    "ASSOC. PROF. DR. NOR FADHILLAH BT. MOHAMED AZMIN"
  ],
  "dayTime": [
    { "day": 1, "startTime": "11:30", "endTime": "12:50" },
    { "day": 3, "startTime": "11:30", "endTime": "12:50" }
  ]
}

解析它:

var data = <yourjsonstring>;
var subjects = Subject.fromJson(jsonDecode(data));

同样,可以使用 toJson() 方法将 Dart 对象转换为 JSON。

常见问题

XMLHttpRequest错误或CORS错误

通常在开发 Web 应用时发生。设置 useProxy 标志为 true

fetch("ENGIN", course: "MCTE 3271", useProxy: true);

HandshakeException 错误

如果 albiruni 服务器有证书问题,某些客户端可能会拒绝请求。在开发环境中,尝试使用 Stack Overflow 上的答案。

可用kulliyyah列表(截至2024年8月7日)

代码 名称
IRKHS AHAS KIRKHS
KAHS ALLIED HEALTH SCIENCES
AED ARCHITECTURE
BRIDG BRIDGING PROGRAMME
CFL CELPAD
CCAC COCU
DENT DENTISTRY
EDUC EDUCATION
ENGIN ENGIN
ECONS ENMS
KICT ICT
IHART 国际伊斯兰清真研究与培训研究所
IIBF 伊斯兰银行与金融
ISTAC ISTAC
KLM KSTCL KLM
LAWS LAWS
MEDIC 医学
NURS 护理
PHARM 药学
PLNET 行星生存可持续福祉
KOS 科学
SC4SH 美满中心可持续性和人类

相关信息

示例代码

import 'package:albiruni/albiruni.dart';

void main() {
  // 初始化 albiruni 类实例
  var albiruni =
      Albiruni(semester: 2, session: "2022/2023", studyGrade: StudyGrad.ug);

  // 注释/取消注释以测试
  subjectsFirstPage(albiruni);
  // searchSubject(albiruni);
  // subjectSection(albiruni);
  // allSubjects(albiruni);
  // testPreflight();
}

/// 打印第一页面的所有科目
void subjectsFirstPage(Albiruni query) async {
  var (subjects, totalPages) = await query.fetch("SC4SH");
  print('总页数是 $totalPages');
  for (var subject in subjects) {
    print(subject.title);
  }
}

/// 可以通过课程代码搜索科目
void searchSubject(Albiruni query) async {
  var (subjects, _) =
      await query.fetch("CFL", course: "tqtd2002".toAlbiruniFormat());
  for (var subject in subjects) {
    print(subject);
  }
}

/// 获取特定部分
void subjectSection(Albiruni query) async {
  String code = "tqtd2002";
  int section = 501;
  // 某些科目跨越多个页面,因此我们可以遍历每个页面
  // 并尝试找到所需的部分
  for (int i = 1;; i++) {
    var (subjects, _) =
        await query.fetch("CFL", course: code.toAlbiruniFormat(), page: i);
    if (subjects.isEmpty) break;
    try {
      var subject = subjects.firstWhere((element) => element.sect == section);
      print(subject);
    } catch (e) {
      print(e);
    }
  }
}

/// 从一个kulliyyah获取所有科目的课程代码
void allSubjects(Albiruni query) async {
  List<String> courseCodes = [];
  var kulliyyah = 'KAHS';

  int i = 1; // 页码

  // 第一次获取以确定总页数
  var (subjects, totalPages) = await query.fetch(kulliyyah, page: i);

  // 存储第一个页面的科目
  courseCodes.addAll(subjects.map((e) => e.code));

  // 获取其他页面
  if (totalPages > 1) {
    for (i = 2; i <= totalPages; i++) {
      print('正在获取第 $i 页');
      var (subjects, _) = await query.fetch(kulliyyah, page: i);
      courseCodes.addAll(subjects.map((e) => e.code));
    }
  }

  courseCodes = courseCodes.toSet().toList(); // 删除重复项
  print(courseCodes.join(', ')); // 所有课程代码
  print('总数: ${courseCodes.length}'); // 课程数量
}

/// 快速测试请求范围是否可用/有效
void testPreflight() async {
  var anotherAlbiruniInstance = Albiruni(semester: 1, session: "2021/2022");

  print(await anotherAlbiruniInstance.preflight("KICT"));
}

更多关于Flutter插件albiruni的使用_albiruni是一个用于访问 IIUM 的课程表网站数据的插件的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件albiruni的使用_albiruni是一个用于访问 IIUM 的课程表网站数据的插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成和使用一个假设的、具有“未知功能”的第三方插件 albiruni 的示例代码。请注意,由于 albiruni 插件的具体功能未定义,以下代码主要展示如何集成和使用一个假设的插件。

首先,你需要确保你的Flutter项目已经设置好,并且你已经添加了 albiruni 插件到你的 pubspec.yaml 文件中。由于这是一个假设的插件,你可能需要替换实际的插件名称和版本。

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  albiruni: ^0.0.1  # 假设的版本号,实际使用时请替换为真实版本号

main.dart

import 'package:flutter/material.dart';
import 'package:albiruni/albiruni.dart';  // 假设的插件导入

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Albiruni Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String result = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Albiruni Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Result:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              result,
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: () async {
                // 调用假设的插件功能
                try {
                  // 假设的插件方法调用,实际使用时请替换为真实方法
                  var data = await Albiruni.unknownFunction();
                  setState(() {
                    result = 'Received data: $data';
                  });
                } catch (e) {
                  setState(() {
                    result = 'Error: ${e.message}';
                  });
                }
              },
              child: Text('Call Unknown Function'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 插件导入:确保插件名称正确,并且版本号是最新的。如果插件不存在,你需要找到一个具有相似功能的插件,或者自己实现该功能。

  2. 方法调用:在 Albiruni.unknownFunction() 中,unknownFunction 是一个假设的方法名。你需要根据插件的实际文档替换为正确的方法名。

  3. 错误处理:在调用插件方法时,添加了基本的错误处理。如果插件调用失败,将捕获异常并显示错误信息。

  4. 状态管理:使用了 setState() 方法来更新UI,这是Flutter中常用的状态管理方法。

由于 albiruni 插件的具体功能和API未知,上述代码仅作为一个集成和使用第三方插件的示例。在实际项目中,你需要根据插件的文档进行相应的调整。

回到顶部