IServ (school platform)
This skill uses an HTTP client (no browser automation) to log in and call IServ endpoints.
Credentials / security
- - Do NOT hardcode credentials.
- Provide credentials via environment variables.
Single profile:
- -
ISERV_BASE_URL (e.g. https://grabbe-dt.de) - INLINECODE2
- INLINECODE3
Multiple profiles (parallel):
- - set
ISERV_PROFILE=<name> or pass INLINECODE5 - provide
ISERV_<PROFILE>_BASE_URL, ISERV_<PROFILE>_USER, INLINECODE8
Commands
CODEBLOCK0
Notes / next steps
- - Exercises: listing/details/submission are implemented via HTML scraping.
Submission is now form-driven (parses the actual
<form> on the exercise page and posts multipart), which is more robust than guessing an internal upload API.
If it still fails on a specific IServ instance, capture:
- the HTML of the exercise detail page (after login)
- response status + redirect URL
- - Files: list/download/upload + mkdir/rename/delete are implemented as best-effort across IServ versions.
Some instances expose slightly different endpoints; the client tries to discover Symfony FOS routes (when available) and falls back to common API paths.
Ideas to extend further:
- - richer exercise parsing (due dates, teacher, description)
- announcements/news
- messenger notifications (currently experimental)
- robust file search, move/copy, and recursive folder download
Reference: IServ routes are discoverable via the bundled FOS routes JS (commonly /iserv/js/fos_js_routes.js; some instances also use /iserv/js/assets/fos_js_routes*.js).
IServ(学校平台)
该技能使用HTTP客户端(非浏览器自动化)登录并调用IServ端点。
凭据/安全性
单配置文件:
- - ISERVBASEURL(例如 https://grabbe-dt.de)
- ISERVUSER
- ISERVPASS
多配置文件(并行):
- - 设置 ISERVPROFILE=<名称> 或传递 --profile <名称>
- 提供 ISERV<配置文件>BASEURL、ISERV<配置文件>USER、ISERV<配置文件>PASS
命令
bash
cd skills/iserv/scripts
未读收件箱数量
./iserv.py mail-unread
最近3封邮件(IMAP)
./iserv.py mail-last --n 3
即将到来的日历事件(JSON)
./iserv.py calendar-upcoming
列出文件(JSON)
./iserv.py files-list --path / # 根目录
./iserv.py files-list --path /Files # 典型用户文件区域
按子字符串递归搜索文件/文件夹
./iserv.py files-search --query bio --start-dir /Files --max-depth 6
下载文件(尽力兼容不同IServ版本)
./iserv.py files-download --path /Files/foo.pdf --out-dir ./downloads
上传文件(优先使用FS Dropzone风格的分块上传;失败时回退到传统表单上传)
./iserv.py files-upload --file ./foo.pdf --dest-dir /Files
可选调整分块大小(字节)
./iserv.py files-upload --file ./foo.pdf --dest-dir /Files --chunk-size 8388608
创建文件夹(尽力兼容;取决于IServ版本)
./iserv.py files-mkdir --path /Dokumente/Neu
重命名/移动(尽力兼容)
./iserv.py files-rename --src /Dokumente/Alt.txt --dest /Dokumente/Neu.txt
删除(尽力兼容;请谨慎使用)
./iserv.py files-delete --path /Dokumente/Neu.txt
通讯:列出聊天/对话
./iserv.py messenger-chats
通讯:获取聊天消息
./iserv.py messenger-messages --chat-id
通讯:发送消息
./iserv.py messenger-send --chat-id --text Hello
列出作业(尽力兼容的HTML抓取)
./iserv.py exercise-list --limit 50
查看单个作业并列出附件(可选下载)
./iserv.py exercise-detail --id 123
./iserv.py exercise-detail --id 123 --download-dir ./downloads
尝试提交作业文件(尽力兼容;取决于IServ版本)
./iserv.py exercise-submit --id 123 --file ./solution.pdf --comment Abgabe
备注/后续步骤
提交现在采用表单驱动方式(解析作业页面上的实际