Free Skillshare Classes (Watch Online + Download)

Here you go-
Course Guide - Social Media Content Creation.pdf

Thank you so much this is very helpful!

2 Likes

Do we have sign up to skillshare by paying?

If you don’t wanna use this site then yes :face_with_monocle:

1 Like

Karen is such a nice soul. Thanks for all you do, Karen, I appreciate how you.

2 Likes

You can try this method to creat Skillshare Premium Account 1 year: How to get Skillshare Premium Account 1 year for free

2 Likes

thanks so much! really helpful

1 Like

Thanks! Working great! :slightly_smiling_face:

1 Like

Thanks for this. The API is working great.
For those who know a little node.js code, here is something to help batch download the videos files using that API. The prompt will ask for the same ID as in the OP.

There is no third party packages to install.
And you should use the latest node recommended version, since it uses top-level await.
Also very important, the extension of the file should be “.mjs”.
This is supposed to be a simple script so it is the bare minimum.

I hope it helps someone.

The code is self explanatory, so i won’t explain it.
Note, avoid this if you don’t understand node.js.
Debugging other people’s bugs is hell on earth.

import readline from "readline";
import { promises as fs } from "fs";
import https from "https";
import http from "http";

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// prompt the user for an ID
rl.question("Enter the class ID: ", async (id) => {
  // append the ID to the API URL
  const apiUrl = `https://skillshare-api.heckernohecking.repl.co/${id}`;

  try {
    //make the api request
    https.get(apiUrl, res => {
      let data = "";
      res.on("data", chunk => {
        data += chunk;
      });
      res.on("end", async () => {
        data = JSON.parse(data);
        // create a new folder with the "class" property as the name
        // and a timestamp to avoid overwriting
        const timestamp = Date.now()
        const folderName = `${timestamp}- Skillshare - ${data.class}`;
        await fs.mkdir(folderName);

        for(let i = 0; i < data.lessons.length; i++) {
          console.log(`Downloading file ${i + 1} of ${data.lessons.length}...`);
          let chunks = [];
          await new Promise((resolve, reject) => {

            http.get(data.lessons[i].url, res => {
              res.on("data", chunk => {
                chunks.push(chunk);
              });
              res.on("end", async () => {
                // give the file a ".mp4" extension
                // Sanitize the file name for weird characters
                const fileName = data.lessons[i].title.replace(/[^a-zA-Z0-9. ]/g, "");
                const newFileName = `${i + 1}_${fileName}.mp4`;
                const file = Buffer.concat(chunks);
                await fs.writeFile(`${folderName}/${newFileName}`, file, { encoding: 'binary' });
                console.log(`File ${newFileName} saved to ${folderName}`);
                resolve()
              });
            }).on("error", (error) => {
              console.log(error)
              reject();
            });
          })
        }
      });
    }).on("error", (error) => {
      console.log(error)
    });
  } catch (err) {
    console.error(err);
  } finally {
    rl.close();
  }
});

3 Likes

What is this! Amazaing🤯
Thanks for sharing…:purple_heart:

1 Like