# freeCodeCamp scraper
This scraper downloads selected [freeCodeCamp](https://www.freecodecamp.org/) courses and puts it in a
[ZIM](https://openzim.org) file, a clean and user friendly format for storing content for offline usage.
[![CodeFactor](https://www.codefactor.io/repository/github/openzim/freecodecamp/badge)](https://www.codefactor.io/repository/github/openzim/freecodecamp)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![codecov](https://codecov.io/gh/openzim/freecodecamp/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/freecodecamp)
[![PyPI version shields.io](https://img.shields.io/pypi/v/fcc2zim.svg)](https://pypi.org/project/fcc2zim/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fcc2zim.svg)](https://pypi.org/project/fcc2zim/)
[![Docker](https://ghcr-badge.deta.dev/openzim/freecodecamp/latest_tag?label=docker)](https://ghcr.io/openzim/freecodecamp)
## Architecture
This project consists of two major components:
- `zimui` - A Vue.JS application specially crafted to:
- be embeded inside the ZIM and serve as main entry point (through compilation for offline usage with Vite)
- present FCC curriculum, including solving exercices
- be compatible with most ZIM readers
- `scraper` - The Python tool that build FCC ZIM. It is responsible to:
- fetch FCC curriculum and package it into a proper format
- embed client can read, as well as our zim builder
## Dependencies
Aside Node.JS and Python dependencies which are managed, other binary dependencies comes from Python [zimscraperlib](https://github.com/openzim/python-scraperlib/)
## Development
See [CONTRIBUTING.md](CONTRIBUTING.md).
### Prerequisites
- Node 20.x
- Python 3.11
### Running scraper locally
You have to:
- build the `zimui` frontend which will be embededed inside the ZIM (and redo it every time you make modifications to the `zimui`)
- run the `scraper` to retrieve FCC curriculum and build the ZIM
Sample commands:
```
cd zimui
yarn install
yarn build
cd ../scraper
hatch run fcc2zim --language eng --course "regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects" --name "fcc_en_javascript" --title "freeCodeCamp Javascript" --description "FCC Javascript Courses"
```
### Running scraper with Docker
Run from official version (published on GHCR.io) ; ZIM will be available in the `output` sub-folder of current working directory.
```
docker run --rm -it -v $(pwd)/output:/output ghcr.io/openzim/freecodecamp:latest fcc2zim --language eng --course "regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects" --name "fcc_en_javascript" --title "freeCodeCamp Javascript" --description "FCC Javascript Courses"
```
## Course Options and Limitations
Currently this scraper only supports Javascript challenges. A list of courses is passed to the scraper as a comma seperated list of 'course slugs'.
You can find a list of course slugs in the [freeCodeCamp curriculum folder](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/02-javascript-algorithms-and-data-structures)
In docker example above, see the `--course` argument : `regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects`
Raw data
{
"_id": null,
"home_page": "",
"name": "fcc2zim",
"maintainer": "",
"docs_url": null,
"requires_python": "<3.12,>=3.11",
"maintainer_email": "",
"keywords": "fcc,freecodecamp,kiwix,offline,openzim,zim",
"author": "",
"author_email": "Kiwix <dev@kiwix.org>",
"download_url": "https://files.pythonhosted.org/packages/9b/04/9751ed554e4ff61b4f18ae0ee15ab69dad8934e2c5f239f98d6760ba654c/fcc2zim-1.1.1.tar.gz",
"platform": null,
"description": "# freeCodeCamp scraper\n\nThis scraper downloads selected [freeCodeCamp](https://www.freecodecamp.org/) courses and puts it in a\n[ZIM](https://openzim.org) file, a clean and user friendly format for storing content for offline usage.\n\n[![CodeFactor](https://www.codefactor.io/repository/github/openzim/freecodecamp/badge)](https://www.codefactor.io/repository/github/openzim/freecodecamp)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![codecov](https://codecov.io/gh/openzim/freecodecamp/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/freecodecamp)\n[![PyPI version shields.io](https://img.shields.io/pypi/v/fcc2zim.svg)](https://pypi.org/project/fcc2zim/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fcc2zim.svg)](https://pypi.org/project/fcc2zim/)\n[![Docker](https://ghcr-badge.deta.dev/openzim/freecodecamp/latest_tag?label=docker)](https://ghcr.io/openzim/freecodecamp)\n## Architecture\nThis project consists of two major components:\n\n- `zimui` - A Vue.JS application specially crafted to:\n - be embeded inside the ZIM and serve as main entry point (through compilation for offline usage with Vite)\n - present FCC curriculum, including solving exercices\n - be compatible with most ZIM readers\n- `scraper` - The Python tool that build FCC ZIM. It is responsible to:\n - fetch FCC curriculum and package it into a proper format\n - embed client can read, as well as our zim builder\n\n## Dependencies\n\nAside Node.JS and Python dependencies which are managed, other binary dependencies comes from Python [zimscraperlib](https://github.com/openzim/python-scraperlib/)\n\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n### Prerequisites\n\n- Node 20.x\n- Python 3.11\n\n### Running scraper locally\n\nYou have to:\n- build the `zimui` frontend which will be embededed inside the ZIM (and redo it every time you make modifications to the `zimui`)\n- run the `scraper` to retrieve FCC curriculum and build the ZIM\n\nSample commands:\n```\ncd zimui\nyarn install\nyarn build\ncd ../scraper\nhatch run fcc2zim --language eng --course \"regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects\" --name \"fcc_en_javascript\" --title \"freeCodeCamp Javascript\" --description \"FCC Javascript Courses\"\n```\n\n### Running scraper with Docker\n\nRun from official version (published on GHCR.io) ; ZIM will be available in the `output` sub-folder of current working directory.\n\n```\ndocker run --rm -it -v $(pwd)/output:/output ghcr.io/openzim/freecodecamp:latest fcc2zim --language eng --course \"regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects\" --name \"fcc_en_javascript\" --title \"freeCodeCamp Javascript\" --description \"FCC Javascript Courses\"\n```\n\n## Course Options and Limitations\n\nCurrently this scraper only supports Javascript challenges. A list of courses is passed to the scraper as a comma seperated list of 'course slugs'.\n\nYou can find a list of course slugs in the [freeCodeCamp curriculum folder](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/02-javascript-algorithms-and-data-structures)\n\nIn docker example above, see the `--course` argument : `regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects`\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Make ZIM files from freeCodeCamp courses",
"version": "1.1.1",
"project_urls": {
"Donate": "https://www.kiwix.org/en/support-us/",
"Homepage": "https://github.com/openzim/freecodecamp"
},
"split_keywords": [
"fcc",
"freecodecamp",
"kiwix",
"offline",
"openzim",
"zim"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "93dae4237d00264e05e4040a19eedc55747775d09efd4140f6fbe11e85304df4",
"md5": "673b68e2e9578f072d6deb8647b38955",
"sha256": "7941564c0454e566c319012e618f5faa3529e72054d20e130ebb4df4f5311fa9"
},
"downloads": -1,
"filename": "fcc2zim-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "673b68e2e9578f072d6deb8647b38955",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.12,>=3.11",
"size": 14509,
"upload_time": "2023-12-18T07:51:51",
"upload_time_iso_8601": "2023-12-18T07:51:51.029428Z",
"url": "https://files.pythonhosted.org/packages/93/da/e4237d00264e05e4040a19eedc55747775d09efd4140f6fbe11e85304df4/fcc2zim-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9b049751ed554e4ff61b4f18ae0ee15ab69dad8934e2c5f239f98d6760ba654c",
"md5": "74811e972ef2f4eca224e3b4b82b85a6",
"sha256": "02d22dee7fe0aae6adc235c09557586dfaab3a1578217cec5d2efac0b91cb5b8"
},
"downloads": -1,
"filename": "fcc2zim-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "74811e972ef2f4eca224e3b4b82b85a6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.12,>=3.11",
"size": 20102,
"upload_time": "2023-12-18T07:51:52",
"upload_time_iso_8601": "2023-12-18T07:51:52.663509Z",
"url": "https://files.pythonhosted.org/packages/9b/04/9751ed554e4ff61b4f18ae0ee15ab69dad8934e2c5f239f98d6760ba654c/fcc2zim-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-18 07:51:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "openzim",
"github_project": "freecodecamp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "fcc2zim"
}