Overview
- Skill Key
- ghuron/magister
- Author
- ghuron
- Source Repo
- openclaw/skills
- Version
- -
- Source Path
- skills/ghuron/magister
- Latest Commit SHA
- 29395dab145789129807c497ff77c871a45b9076
Fetch schedule, grades, and infractions from Magister portal
Stars
0
Installs
0
Status
ACTIVE
Visibility
PUBLIC
直接复制以下提示词,发送给你的 AI 助手即可完成安装。
请先检查是否已安装 SkillHub 商店,若未安装,请根据 https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/install/skillhub.md 安装 SkillHub 商店,然后安装 magister 技能。 若已安装,则直接安装 magister 技能。
> **Note:** Undocumented API, may change without notice.
All API steps use `web_fetch` with header `Authorization: Bearer {token}`. Times are UTC.
> **Fallback:** If `web_fetch` returns 401, your implementation likely does not support custom headers.
> Use `curl` instead:
> ```bash
> curl -s -H "Authorization: Bearer {token}" {url}
> ```
# Obtain token
Write the following to `/tmp/magister_auth.py`:
```python
import http.cookiejar, json, os, re, secrets, urllib.parse, urllib.request
jar = http.cookiejar.CookieJar()
class Capture(urllib.request.HTTPRedirectHandler):
token = ""
def redirect_request(self, req, fp, code, msg, hdrs, newurl):
p = urllib.parse.urlparse(newurl)
if p.path.endswith("redirect_callback.html"):
Capture.token = urllib.parse.parse_qs(p.fragment).get("access_token", [""])[0]
return None
return super().redirect_request(req, fp, code, msg, hdrs, newurl)
cap = Capture()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar), cap)
qs = urllib.parse.urlencode({
"client_id": f"M6-{os.environ['MAGISTER_HOST']}", "state": secrets.token_urlsafe(16),
"redirect_uri": f"https://{os.environ['MAGISTER_HOST']}/oidc/redirect_callback.html",
"response_type": "id_token token", "acr_values": f"tenant:{os.environ['MAGISTER_HOST']}",
"nonce": secrets.token_urlsafe(16),
"scope": "openid profile attendance.overview calendar.user grades.read",
})
resp = opener.open(f"https://accounts.magister.net/connect/authorize?{qs}")
login_url = resp.geturl()
session_id = re.search(r"sessionId=([a-f0-9A-F-]+)", login_url).group(1)
return_url = urllib.parse.unquote(re.search(r"returnUrl=([^&]+)", login_url).group(1))
def challenge(path, extra):
body = json.dumps({"sessionId": session_id, "returnUrl": return_url,
**extra}).encode()
req = urllib.request.Request(f"https://accounts.magister.net/challenges/{path}", data=body,
headers=...
openstockdata
OpenClaw Skill for stock data analysis
capt-marbles
Generative Engine Optimization (GEO) for AI search visibility. Optimize content to appear in ChatGPT, Perplexity, Claude, and Google AI Overviews. Use when optimizing websites, pages, or content for LLM discoverability and citation.
capgoblin
Access unsecured credit lines for AI agents on the Arc Network using the Credex Protocol. Use for borrowing USDC against reputation, repaying debt to grow credit limits, providing liquidity as an LP, or managing cross-chain USDC via Circle Bridge. Triggers on "borrow from credex", "repay debt", "deposit to pool", "check credit status", "provide liquidity", or any credit/lending task on Arc.
capt-marbles
Control PhantomBuster automation agents via API. List agents, launch automations, get output/results, check status, and abort running agents. Use when the user needs to run LinkedIn scraping, Twitter automation, lead generation phantoms, or any PhantomBuster workflow.
camelsprout
DuckDB CLI specialist for SQL analysis, data processing and file conversion. Use for SQL queries, CSV/Parquet/JSON analysis, database queries, or data conversion. Triggers on "duckdb", "sql", "query", "data analysis", "parquet", "convert data".
camohiddendj
DuckDuckGo HTML search scraper CLI with JSON, CSV, OpenSearch, markdown, and compact outputs.