{"id":29200318,"url":"https://github.com/zmoog/classeviva","last_synced_at":"2026-03-16T05:35:36.562Z","repository":{"id":40377591,"uuid":"482056859","full_name":"zmoog/classeviva","owner":"zmoog","description":"Classeviva CLI and library written in Golang","archived":false,"fork":false,"pushed_at":"2025-06-06T19:03:03.000Z","size":92,"stargazers_count":0,"open_issues_count":24,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-06T20:19:53.756Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zmoog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-04-15T18:57:38.000Z","updated_at":"2025-02-16T09:24:14.000Z","dependencies_parsed_at":"2025-02-16T10:21:50.268Z","dependency_job_id":"40d843db-2857-4aad-8292-f6fefb8f31f2","html_url":"https://github.com/zmoog/classeviva","commit_stats":{"total_commits":11,"total_committers":2,"mean_commits":5.5,"dds":0.09090909090909094,"last_synced_commit":"c2805327a3f86faadcdcfdf68bb8fc98bcadd90a"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/zmoog/classeviva","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zmoog%2Fclasseviva","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zmoog%2Fclasseviva/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zmoog%2Fclasseviva/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zmoog%2Fclasseviva/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zmoog","download_url":"https://codeload.github.com/zmoog/classeviva/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zmoog%2Fclasseviva/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263121445,"owners_count":23416997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-02T10:35:41.544Z","updated_at":"2026-03-16T05:35:36.557Z","avatar_url":"https://github.com/zmoog.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# classeviva\n\nClasseviva is a Go library and CLI tool to access the popular school portal https://web.spaggiari.eu.\n\n## OpenAPI Specification\n\nAn [OpenAPI specification](openapi.yaml) is available that documents the Classeviva API endpoints. This specification can be used to:\n\n- **View interactive API documentation** - Use 3rd party tools like [Swagger Editor](https://editor.swagger.io/) or [Redocly](https://redocly.com/)\n- **Generate API clients** in your preferred programming language using tools like [OpenAPI Generator](https://openapi-generator.tech/)\n- **Understand API endpoints** and request/response formats\n\nThe specification is based on the unofficial community documentation at [Classeviva-Official-Endpoints](https://github.com/Lioydiano/Classeviva-Official-Endpoints).\n\n**Note**: This is an unofficial specification as the Classeviva API is not publicly documented by Spaggiari.\n\n## Quick Start\n\n### Install\n\n```sh\nbrew install zmoog/homebrew-classeviva/classeviva\n```\n\n```sh\nbrew info zmoog/homebrew-classeviva/classeviva\n==\u003e classeviva: 0.2.1\n\nInstalled\n/opt/homebrew/Caskroom/classeviva/0.2.1 (6.8MB)\n  Installed on 2025-10-30 at 23:37:52\nFrom: https://github.com/zmoog/homebrew-classeviva/blob/HEAD/Casks/classeviva.rb\n==\u003e Name\nclasseviva\n==\u003e Description\n\n==\u003e Artifacts\nclasseviva (Binary)\n```\n\n### Add your kids\n\n```sh\n$ classeviva profile add joelmiller\nUsername: joelmiller\nPassword: ******\nProfile 'joelmiller' added successfully.\n```\n\n```sh\n$ classeviva profile list\n+------------+------------+---------+\n| PROFILE    | USERNAME   | DEFAULT |\n+------------+------------+---------+\n| joelmiller | joelmiller | *       |\n+------------+------------+---------+\n\n$ classeviva grades list\n+------------+-------+-----------------------------------------------------------+----------------------------------+\n| DATE       | GRADE | SUBJECT                                                   | NOTES                            |\n+------------+-------+-----------------------------------------------------------+----------------------------------+\n| 2025-10-24 | 9     | SCIENZE MOTORIE E SPORTIVE                                |                                  |\n|            | 7-    | STORIA                                                    |                                  |\n| 2025-10-22 | 8½    | SCIENZE NATURALI (BIOLOGIA, CHIMICA, SCIENZE DELLA TERRA) | Verifiche genetica moderna e DNA |\n+------------+-------+-----------------------------------------------------------+----------------------------------+%     \n```\n\n## Authentication\n\nClasseviva supports multiple authentication methods with a priority chain, making it easy to manage credentials for multiple students.\n\n### Authentication Priority\n\nCredentials are resolved in the following order (highest priority first):\n\n1. **CLI flags**: `--username` and `--password`\n2. **Profile-based**: `--profile` flag or `default_profile` from config file\n3. **Environment variables**: `CLASSEVIVA_USERNAME` and `CLASSEVIVA_PASSWORD`\n\n### Profile Management (Recommended)\n\nFor families with multiple students, profile-based authentication is the recommended approach.\n\n#### Setup Profiles\n\nAdd profiles for each student:\n\n```shell\n# Add first student profile\n$ classeviva profile add older-kid\nUsername: student1_username\nPassword: ********\n\n# Add second student profile\n$ classeviva profile add younger-kid\nUsername: student2_username\nPassword: ********\n```\n\n#### Set Default Profile\n\nSet a default profile to use when `--profile` is not specified:\n\n```shell\n$ classeviva profile set-default older-kid\n```\n\n#### List Profiles\n\nView all configured profiles:\n\n```shell\n$ classeviva profile list\nPROFILE      DEFAULT\nolder-kid    *\nyounger-kid\n```\n\n#### Show Profile Details\n\nDisplay profile information (credentials are hidden):\n\n```shell\n$ classeviva profile show older-kid\nProfile: older-kid\nUsername: student1_username\nPassword: ********\n```\n\n#### Remove Profile\n\nDelete a profile:\n\n```shell\n$ classeviva profile remove younger-kid\n```\n\n### Using Profiles\n\nOnce profiles are configured, use them with any command:\n\n```shell\n# Use default profile\n$ classeviva grades list --limit 10\n\n# Use specific profile\n$ classeviva --profile younger-kid grades list --limit 10\n\n# Override with CLI flags (highest priority)\n$ classeviva --username user --password pass grades list\n```\n\n### Configuration File\n\nProfiles are stored in `~/.classeviva/config.yaml`:\n\n```yaml\nprofiles:\n  older-kid:\n    username: \"student1_username\"\n    password: \"student1_password\"\n  younger-kid:\n    username: \"student2_username\"\n    password: \"student2_password\"\ndefault_profile: \"older-kid\"\n```\n\n**Note**: The config file has restrictive permissions (0600) to protect credentials.\n\n### Environment Variables (Legacy)\n\nFor backward compatibility, you can still use environment variables:\n\n```shell\nexport CLASSEVIVA_USERNAME=\"your_username\"\nexport CLASSEVIVA_PASSWORD=\"your_password\"\n$ classeviva grades list\n```\n\n### Identity Caching\n\nAuthentication tokens are cached per-profile in `~/.classeviva/identity-{profile}.json` to minimize API calls. Tokens are automatically refreshed when expired.\n\n## CLI Commands\n\n### Version\n\nDisplay the application version:\n\n```shell\n$ classeviva version\nClasseviva CLI v0.0.0 (123) 2022-05-08 by zmoog\n```\n\nJSON output:\n\n```shell\n$ classeviva version --format json\n{\n  \"version\": \"v0.0.0\",\n  \"commit\": \"123\",\n  \"date\": \"2022-05-08\",\n  \"builtBy\": \"zmoog\"\n}\n```\n\n### Grades\n\nList student grades with optional limit:\n\n```text\n$ classeviva grades list --limit 3\n+------------+-------+-----------------+-------------------------------+\n| DATE       | GRADE | SUBJECT         | NOTES                         |\n+------------+-------+-----------------+-------------------------------+\n| 2022-04-27 | 9     | ARTE E IMMAGINE |                               |\n| 2022-04-22 | 7+    | COMPORTAMENTO   | comportamento della settimana |\n|            | 7     | SCIENZE         |                               |\n+------------+-------+-----------------+-------------------------------+\n```\n\nJSON output:\n\n```shell\n$ classeviva grades list --limit 1 --format json\n[\n  {\n    \"subjectDesc\": \"ARTE E IMMAGINE\",\n    \"evtDate\": \"2022-04-27\",\n    \"decimalValue\": 9,\n    \"displayValue\": \"9\",\n    \"color\": \"green\",\n    \"skillValueDesc\": \" \"\n  }\n]\n```\n\n### Agenda\n\nList agenda items (homework, events) with optional date range and limit:\n\n```text\n$ classeviva agenda list --limit 2\n+---------------------------+---------------------------+---------+----------------------+-----------------------------------------------------------------------+\n| BEGIN                     | END                       | SUBJECT | TEACHER              | NOTES                                                                 |\n+---------------------------+---------------------------+---------+----------------------+-----------------------------------------------------------------------+\n| 2022-05-02T09:00:00+02:00 | 2022-05-02T10:00:00+02:00 |         | PESANDO MARGHERITA   | Inizio interrogazioni di inglese (1º turno)                           |\n| 2022-05-03T00:00:00+02:00 | 2022-05-03T23:59:59+02:00 |         | AVANZATO PAOLA CARLA | Link per colloqui                                                     |\n+---------------------------+---------------------------+---------+----------------------+-----------------------------------------------------------------------+\n```\n\nJSON output:\n\n```shell\n$ classeviva agenda list --until 2022-04-27 --limit 2 --format json\n[\n  {\n    \"evtId\": 546249,\n    \"evtCode\": \"AGNT\",\n    \"evtDatetimeBegin\": \"2022-05-02T09:00:00+02:00\",\n    \"evtDatetimeEnd\": \"2022-05-02T10:00:00+02:00\",\n    \"notes\": \"Inizio interrogazioni di inglese (1º turno)\",\n    \"authorName\": \"PESANDO MARGHERITA\",\n    \"subjectDesc\": \"\"\n  },\n  {\n    \"evtId\": 578930,\n    \"evtCode\": \"AGNT\",\n    \"evtDatetimeBegin\": \"2022-05-03T00:00:00+02:00\",\n    \"evtDatetimeEnd\": \"2022-05-03T23:59:59+02:00\",\n    \"notes\": \"Link per colloqui prof. AVANZATO\",\n    \"authorName\": \"AVANZATO PAOLA CARLA\",\n    \"subjectDesc\": \"\"\n  }\n]\n```\n\n### Noticeboards\n\nList school announcements and circulars:\n\n```text\n$ classeviva noticeboards list\n+---------------------+------+---------------------------------------+\n| PUBLICATIONDATE     | READ | TITLE                                 |\n+---------------------+------+---------------------------------------+\n| 2022-04-28T10:30:00 | true | Comunicazione assemblea di istituto   |\n| 2022-04-25T15:45:00 | false| Circolare n. 123 - Uscita anticipata  |\n+---------------------+------+---------------------------------------+\n```\n\nJSON output:\n\n```shell\n$ classeviva noticeboards list --format json\n[\n  {\n    \"pubId\": 12345,\n    \"cntTitle\": \"Comunicazione assemblea di istituto\",\n    \"readStatus\": true,\n    \"pubDT\": \"2022-04-28T10:30:00\",\n    \"evtCode\": \"CF\",\n    \"cntValidInRange\": true,\n    \"cntStatus\": \"active\",\n    \"cntCategory\": \"General\",\n    \"cntHasAttach\": true,\n    \"attachments\": [\n      {\n        \"fileName\": \"comunicazione.pdf\",\n        \"attachNum\": 1\n      }\n    ]\n  }\n]\n```\n\nDownload noticeboard attachments:\n\n```shell\n$ classeviva noticeboards download --publication_id 12345 --output-filename ./downloads\n+----------------------------------+\n| FILE                             |\n+----------------------------------+\n| ./downloads/12345-documento.pdf  |\n+----------------------------------+\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzmoog%2Fclasseviva","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzmoog%2Fclasseviva","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzmoog%2Fclasseviva/lists"}