JupiterEd message scraping CLI and importable Python library.
Project description
Jed API
CLI scraper for JupiterEd messages, including:
- full message content
- attachment links
- sender profile photo URL
- fast "check for new messages" mode
Features
- Headless by default (no browser window).
- Optional headed mode for debugging (
--headed). - Filter scraping by newest count, days since, or date range.
- Detect new inbox messages with persistent state tracking.
- Optionally fetch full content for only new messages.
- JSON export support.
Requirements
- Python 3.10+
- Google Chrome installed
Install dependencies:
pip install -r requirements.txt
Install as an importable package (recommended for using in other projects):
pip install -e .
Configuration
Copy config.example.json to config.json in the project root, then fill in your values.
{
"name": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
"school": "YOUR_SCHOOL",
"city": "YOUR_CITY",
"state": "YOUR_STATE",
"school_id": "OPTIONAL"
}
school_id can exist in the file, but current CLI flow does not require it.
config.json is ignored by git to keep credentials out of the repository.
Usage
python main.py [--headless|--headed] [--json-out FILE] <command> [options]
Commands
newest <count>: fetch newest N messages.since <days> [--limit N]: fetch messages from last N days.range --from YYYY-MM-DD [--to YYYY-MM-DD] [--limit N]: fetch messages in date range.all [--limit N]: fetch all available messages.check-new [--state-file FILE] [--no-update] [--fetch]: detect unseen inbox messages.
Examples
Fetch newest 10:
python main.py newest 10
Fetch last 7 days, save JSON:
python main.py since 7 --json-out messages.json
Check for new messages only:
python main.py check-new
Check for new messages and fetch full details for those new ones:
python main.py check-new --fetch --json-out new_messages_full.json
Use visible browser window (debug mode):
python main.py --headed check-new --fetch
Library Usage
from jed_api import JupiterEdClient
with JupiterEdClient(config_path="config.json", headless=True) as client:
messages = client.newest(5)
print(messages[0]["subject"] if messages else "No messages")
Check for new messages and fetch full content:
from jed_api import JupiterEdClient
with JupiterEdClient(config_path="config.json") as client:
result = client.check_new_messages(fetch=True)
print("new:", len(result["new_messages"]))
Use direct credentials instead of config.json:
from jed_api import JupiterEdClient
credentials = {
"name": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
"school": "YOUR_SCHOOL",
"city": "YOUR_CITY",
"state": "YOUR_STATE",
}
with JupiterEdClient(credentials=credentials, headless=True) as client:
data = client.since(7, limit=20)
New Message State File
check-new stores seen message keys in message_state.json by default.
- First run: most/all inbox messages may be marked as new.
- Later runs: only unseen messages are returned.
- Use
--no-updateto test without modifying state.
Output Format
Scraped message JSON objects include:
timeparsed_timesendersender_pfpsubjectrecipientsbodyattachments(list of{name, url})url
Notes
- This project uses Selenium and website UI behavior can change over time.
- Keep credentials private. Do not commit real credentials to GitHub.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jed_api-0.1.0.tar.gz.
File metadata
- Download URL: jed_api-0.1.0.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51b43083fcdc08a908ad5eea85bf3462671f67a36eb23791050fb56d28093ab4
|
|
| MD5 |
76181ddcb0b7fcf6e1cb5eb020a4ba17
|
|
| BLAKE2b-256 |
6dc95c018db449386208218cd3e567d1adb2a82b024b1ccdc55da74d52952cdb
|
Provenance
The following attestation bundles were made for jed_api-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on x0rgo/jed-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jed_api-0.1.0.tar.gz -
Subject digest:
51b43083fcdc08a908ad5eea85bf3462671f67a36eb23791050fb56d28093ab4 - Sigstore transparency entry: 1064494266
- Sigstore integration time:
-
Permalink:
x0rgo/jed-api@b5316039bbe05d245eda6c31e3211286b577253f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/x0rgo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b5316039bbe05d245eda6c31e3211286b577253f -
Trigger Event:
push
-
Statement type:
File details
Details for the file jed_api-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jed_api-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f34b11b0d4d1c28eaf3b1d690b87ef065b8e6816d080336444d6662b2b3af99
|
|
| MD5 |
72ba0a108eb850a11c33f5dd6d4024db
|
|
| BLAKE2b-256 |
47320ad205297271ef33c7e923dbec8771b5acff4c56c2618c01cfd0f1bf01de
|
Provenance
The following attestation bundles were made for jed_api-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on x0rgo/jed-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jed_api-0.1.0-py3-none-any.whl -
Subject digest:
5f34b11b0d4d1c28eaf3b1d690b87ef065b8e6816d080336444d6662b2b3af99 - Sigstore transparency entry: 1064494298
- Sigstore integration time:
-
Permalink:
x0rgo/jed-api@b5316039bbe05d245eda6c31e3211286b577253f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/x0rgo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b5316039bbe05d245eda6c31e3211286b577253f -
Trigger Event:
push
-
Statement type: