npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

classcharts-api

v2.12.1

Published

A Typescript wrapper for getting information from the ClassCharts API

Downloads

267

Readme

Introduction

The ClassCharts API is a typescript wrapper around the ClassCharts API. It allows you to easily make requests to the ClassCharts API without having to worry about the underlying implementation of making requests.

Help

For any help with the library, please join the discord where you can ask questions and get help from the community.

Contributing

Contributions are welcome! There are lots of API endpoints which we simply do not have access to to implement, so if you have access to them, please consider contributing! If you have any questions, feel free to ask in the discord.

Installation

Requirements

  • Node.js 20 or newer
    OR
  • Deno

NPM

npm install classcharts-api

Deno

The imports in the examples are for Node.js, but can easily be substituted for Deno.

import {
  ParentClient,
  StudentClient,
} from "https://deno.land/x/classcharts_api/mod.ts";

Logging In

Before making any requests, you must login to the client. This will get you a session ID which will be used for all requests.

Student Client

import { StudentClient } from "classcharts-api";

// Date of birth MUST in the format DD/MM/YYYY
const client = new StudentClient("classchartsCode", "01/01/2000");
await client.login();

Parent Client

?> The parent client is not tested, as I do not have access to a parent account. If you experience any issues, please open an issue or PR.

import { ParentClient } from "classcharts-api";

const client = new ParentClient("username", "password");
await client.login();

Universal Methods

All the following methods can be used on both the student and parent client. Each example expects the client to be already logged in.

.getStudentInfo

const studentInfo = await client.getStudentInfo();
console.log(studentInfo);
/**
{
  success: 1,
  data: {
    user: {
      id: 2339528,
      ...
    }
  },
  meta: {
    session_id: '5vf2v7n5uk9jftrxaarrik39vk6yjm48',
    ...
  }
}
*/

.getActivity

// Dates must be in format YYYY-MM-DD
const activity = await client.getActivity({
  from: "2023-04-01",
  to: "2023-05-10",
  last_id: "12",
});
console.log(activity);

.getFullActivity

// Dates must be in format YYYY-MM-DD
const activity = await client.getFullActivity({
  from: "2023-04-01",
  to: "2023-05-10",
});
console.log(activity);

.getBehaviour

Gets behaviour for a given date range.

// Dates must be in format YYYY-MM-DD
const behaviour = await client.getBehaviour({
  from: "2023-04-01",
  to: "2023-05-10",
});
console.log(behaviour);

/**
{
  "success": 1,
  "data": {
    "timeline": [
      {
        "positive": 426,
        ...
      },
    ],
	...
  "meta": {
    "start_date": "2023-04-01T00:00:00+00:00",
    ...
  }
}
*/

.getHomeworks

Gets homeworks for a given date range.

// Dates must be in format YYYY-MM-DD
const homeworks = await client.getHomeworks({
  from: "2023-04-01",
  to: "2023-05-10",
	displayDate: 'issue_date' // Can be 'due_date' or 'issue_date'
});
console.log(homeworks);

/**
{
  success: 1,
  data: [
    {
      lesson: '7A/Pe1',
			...
		},
  ],
  meta: {
    start_date: '2023-04-01T00:00:00+00:00',
		...
  }
}

.getLessons

Gets lessons for a specific date.

// Dates must be in format YYYY-MM-DD
const lessons = await client.getLessons({
  date: "2023-04-01",
});
console.log(lessons);

/**
{
  "success": 1,
  "data": [
    {
      "teacher_name": "Mr J Doe",
      ...
		}
		...
  ],
  "meta": {
    "dates": [
      "2023-05-04"
    ],
    ...
  }
}
*/

.getBadges

Gets all earned badges.

const badges = await client.getBadges();
console.log(badges);

/**
{
  success: 1,
  data: [
    {
      id: 123,
			name: 'Big Badge',
			...
    },
		...
  ],
  meta: []
}
*/

.getAnnouncements

Gets all announcements.

const announcements = await client.getAnnouncements();
console.log(announcements);

/**
 {
  success: 1,
  data: [
    {
      id: 321453,
      title: "A big announcement",
      description: "<p>School will be closing early today!</p>",
      ...
    }
  ],
  meta: []
}
*/

.getDetentions

?> This method does not include meta in the response, since I do not have access to this endpoint to test it. If you have access to this endpoint, please open a PR to add the meta response. Thanks!

Gets all detentions.

const detentions = await client.getDetentions();
console.log(detentions);

/**
 {
    "success": 1,
    "data": [
        {
            "id": 12345678,
            "attended": "no",
            "date": "2024-03-28T00:00:00+00:00",
            ...
        }
    ],
    "meta": {
        "detention_alias_plural": "detentions"
    }
}
*/

.getAttendance

?> This method does not include meta in the response, since I do not have access to this endpoint to test it. If you have access to this endpoint, please open a PR to add the meta response. Thanks!

Gets attendance.

const attendance = await client.getAttendance();
console.log(attendance);

Parent Specific Methods

.getPupils

Gets a list of all pupils the parent has access to.

const pupils = await client.getPupils();
console.log(pupils);
/**
[
	{
		id: 123,
		name: 'John Doe',
		...
	},
	...
]
*/

.selectPupil

Selects a pupil to make subsequent requests for.

await client.selectPupil(123);

.changePassword

Changes the parent's password.

await client.changePassword("oldPassword", "newPassword");