{"id":15177187,"url":"https://github.com/euberdeveloper/tum-conf-scraper","last_synced_at":"2026-02-27T07:39:51.521Z","repository":{"id":55459666,"uuid":"523089606","full_name":"euberdeveloper/tum-conf-scraper","owner":"euberdeveloper","description":"This is a scraper written in Node.js and using Puppeteer that gets the videos served on TUM conf (zoom)","archived":false,"fork":false,"pushed_at":"2022-09-15T12:38:07.000Z","size":502,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T08:13:05.052Z","etag":null,"topics":["npm","puppeteer","scraper","typescript","video-scraper"],"latest_commit_sha":null,"homepage":"https://tum-conf-scraper.euber.dev","language":"TypeScript","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/euberdeveloper.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}},"created_at":"2022-08-09T19:52:14.000Z","updated_at":"2022-09-15T11:12:42.000Z","dependencies_parsed_at":"2022-08-15T00:50:10.828Z","dependency_job_id":null,"html_url":"https://github.com/euberdeveloper/tum-conf-scraper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/euberdeveloper/tum-conf-scraper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euberdeveloper%2Ftum-conf-scraper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euberdeveloper%2Ftum-conf-scraper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euberdeveloper%2Ftum-conf-scraper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euberdeveloper%2Ftum-conf-scraper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/euberdeveloper","download_url":"https://codeload.github.com/euberdeveloper/tum-conf-scraper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euberdeveloper%2Ftum-conf-scraper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29887706,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T05:38:26.446Z","status":"ssl_error","status_checked_at":"2026-02-27T05:38:25.235Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["npm","puppeteer","scraper","typescript","video-scraper"],"created_at":"2024-09-27T14:03:46.697Z","updated_at":"2026-02-27T07:39:51.500Z","avatar_url":"https://github.com/euberdeveloper.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build](https://github.com/euberdeveloper/tum-conf-scraper/workflows/Build/badge.svg)\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)\n[![License](https://img.shields.io/npm/l/tum-conf-scraper.svg)](https://github.com/euberdeveloper/tum-conf-scraper/blob/main/LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/euberdeveloper/tum-conf-scraper.svg)](https://github.com/euberdeveloper/tum-conf-scraper/issues)\n[![GitHub stars](https://img.shields.io/github/stars/euberdeveloper/tum-conf-scraper.svg)](https://github.com/euberdeveloper/tum-conf-scraper/stargazers)\n![npm](https://img.shields.io/npm/v/tum-conf-scraper.svg)\n\n# tum-conf-scraper\nThis is a scraper written in Node.js and using Puppeteer that gets the videos served by [Tum Conf](https://tum-conf.zoom.us) services.\n\n## Install\n\nTo install tum-conf-scraper, run:\n\n```bash\n$ npm install tum-conf-scraper\n```\n\n## Project purpose\n\nThis module is written because videos hosted on [Tum Conf](tum-conf.zoom.us) are difficult to download and watchable only in the browser. By using the module **[video-scraper-core](https://www.npmjs.com/package/video-scraper-core)**, I created this module, that allows those videos to be recorderd.\n\n## Project usage\n\nTo scrape a video available at \"https://tum-conf.zoom.us/rec/share/myvideo\" and save it to \"./saved.webm\":\n\n```javascript\nconst { TumConfVideoScraper } = require('tum-conf-scraper');\n\nasync function main() {\n    // Create an instance of the scraper\n    const scraper = new TumConfVideoScraper('mypasscode', {\n        debug: true\n    });\n    // Launch the Chrome browser\n    await scraper.launch();\n    // Scrape and save the video\n    await scraper.scrape('https://tum-conf.zoom.us/rec/share/myvideo', './saved.webm');\n    // Close the browser\n    await scraper.close();\n}\nmain();\n```\n\nTo scrape and download more than one video:\n\n```javascript\nconst { TumConfVideoScraper } = require('tum-conf-scraper');\n\nasync function main() {\n    // Create an instance of the scraper\n    const scraper = new TumConfVideoScraper('mypasscode', {\n        debug: true\n    });\n    // Launch the Chrome browser\n    await scraper.launch();\n    // Scrape and save the first video\n    await scraper.scrape('https://tum-conf.zoom.us/rec/share/myvideo', './saved.webm');\n    // Scrape and save the second video\n    await scraper.scrape('https://tum-conf.zoom.us/rec/share/myvideo-bis', './saved_bis.webm');\n    // Close the browser\n    await scraper.close();\n}\nmain();\n```\n\nTo scrape and download in parallel more than one video:\n\n```javascript\nconst { TumConfVideoScraper } = require('tum-conf-scraper');\n\nasync function scrape(dest, link) {\n    // Create an instance of the scraper\n    const scraper = new TumConfVideoScraper('mypasscode', {\n        debug: true\n    });\n    // Launch the Chrome browser\n    await scraper.launch();\n    // Scrape and save the video\n    await scraper.scrape(link, dest);\n    // Close the browser\n    await scraper.close();\n}\n\nasync function main() {\n    const tasks = [\n        ['./saved.webm', 'https://tum-conf.zoom.us/rec/share/myvideo'],\n        ['./saved_bis.webm', 'https://tum-conf.zoom.us/rec/share/myvideo-bis']\n    ].map(([dest, link]) =\u003e scrape(dest, link));\n    await Promise.all(tasks);\n}\nmain();\n```\n\nWith custom options:\n\n```javascript\nconst { TumConfVideoScraper } = require('tum-conf-scraper');\n\nasync function main() {\n    // Browser options\n    const scraper = new TumConfVideoScraper('mypasscode', {\n        debug: true,\n        debugScope: 'This will be written as scope of the euberlog debug',\n        windowSize: {\n            width: 1000,\n            height: 800\n        },\n        browserExecutablePath: '/usr/bin/firefox'\n    });\n    await scraper.launch();\n\n    // Scraping options\n    await scraper.scrape('https://tum-conf.zoom.us/rec/share/myvideo', './saved.webm', { duration: 1000 });\n    await scraper.scrape('https://tum-conf.zoom.us/rec/share/myvideo-bis', './saved_bis.webm', { \n        audio: false,\n        delayAfterVideoStarted: 3000,\n        delayAfterVideoFinished: 2000 \n    });\n\n    await scraper.close();\n}\nmain();\n```\n\n...all the options can be seen in the API section or with the Typescript definitions.\n\n## API\n\nThe documentation site is: [tum-conf-scraper documentation](https://tum-conf-scraper.euber.dev)\n\nThe documentation for development site is: [tum-conf-scraper dev documentation](https://tum-conf-scraper-dev.euber.dev)\n\n### TumConfVideoScraper\n\nThe TumConfVideoScraper class, that scrapes a video from a \"BBB WebKonferenze\" and saves it to a file.\n\n**Syntax:**\n\n`const scraper = new TumConfVideoScraper(passcode, options);`\n\n**Parameters:**\n\n* __passcode__:  A `string` that specifies the passcode to access the video page.\n* __options__: Optional. A `BrowserOptions` object that specifies the options for this instance.\n\n**Methods:**\n\n* __setBrowserOptions(options: BrowserOptions): void__: Changes the browser options with the ones given by the `options` parameter.\n* __launch(): Promise\u003cvoid\u003e__: Launches the browser window.\n* __close(): Promise\u003cvoid\u003e__: Closes the browser window.\n* __scrape(url: string, destPath: string, options: ScrapingOptions): Promise\u003cvoid\u003e__: Scrapes the video in `url` and saves it to `destPath`. Some ScrapingOptions can be passed.\n\n### BrowserOptions\n\nThe options given to the TumConfVideoScraper constructor, see [video-scraper-core](https://github.com/euberdeveloper/video-scraper-core#browseroptions) for more information.\n\n### ScrapingOptions\n\nThe options passing to a scrape method, see [video-scraper-core](https://github.com/euberdeveloper/video-scraper-core#scrapingoptions) for more information.\n\n### Errors\n\nThere are also some error classes that can be thrown by this module, see [video-scraper-core](https://github.com/euberdeveloper/video-scraper-core#errors) for more information.\n\n## Tests\n\nThe package is tested by using **[jest](https://jestjs.io/)** and **[ts-jest](https://www.npmjs.com/package/ts-jest)**. The tests try for real to download some videos and check if they are saved, therefore, are not run in the CI because they are not headless.\n\n## Notes\n\n* The default browser is **Google Chrome** on `/usr/bin/google-chrome`, because Chromium did not support the BBB videos. You can always change the browser executable path on the configurations.\n* By default (if the **duration** option is `null`), the **duration of the recording will be automatically detected** by looking at the vjs player of the page and by adding a stopping delay of 15 seconds.\n* This module can be uses only in **headful mode**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuberdeveloper%2Ftum-conf-scraper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feuberdeveloper%2Ftum-conf-scraper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuberdeveloper%2Ftum-conf-scraper/lists"}