From 15ffad889b3679c29a2e26b8c9328474edbb13c9 Mon Sep 17 00:00:00 2001 From: MerasGD Date: Sun, 14 Jul 2024 20:48:01 +0800 Subject: [PATCH] update 1.1.0, special downloader anime --- .gitignore | 3 +- README.md | 124 +- install.bat | 1 + install.sh | 1 + package-lock.json | 409 ++++++- package.json | 15 +- settings/config.json | 2 +- src/downloader/anime/download.js | 174 +++ src/downloader/anime/m3u8.js | 209 ++++ src/downloader/anime/request.js | 152 +++ src/downloader/anime/search.js | 60 + src/downloader/main.js | 10 +- src/downloader/v1/split.js | 1 + src/functions/searching.js | 7 +- src/special/aniwatch-api-main/.dockerignore | 22 + src/special/aniwatch-api-main/.env.example | 6 + .../aniwatch-api-main/.github/FUNDING.yml | 2 + .../.github/ISSUE_TEMPLATE/bug-report.yml | 45 + .../.github/ISSUE_TEMPLATE/feature-request.md | 19 + .../.github/workflows/codeql-analysis.yml | 39 + .../.github/workflows/docker-build.yml | 46 + .../.github/workflows/release.yml | 29 + .../.github/workflows/test.yml | 26 + src/special/aniwatch-api-main/.gitignore | 8 + .../aniwatch-api-main/.husky/commit-msg | 9 + src/special/aniwatch-api-main/CHANGELOG.md | 25 + src/special/aniwatch-api-main/CONTRIBUTING.md | 105 ++ src/special/aniwatch-api-main/Dockerfile | 58 + src/special/aniwatch-api-main/LICENSE | 21 + src/special/aniwatch-api-main/README.md | 1004 +++++++++++++++++ src/special/aniwatch-api-main/api/index.ts | 3 + src/special/aniwatch-api-main/package.json | 55 + .../aniwatch-api-main/public/img/img1.gif | Bin 0 -> 497535 bytes .../aniwatch-api-main/public/index.html | 103 ++ .../aniwatch-api-main/public/robots.txt | 5 + src/special/aniwatch-api-main/render.yaml | 10 + .../aniwatch-api-main/src/config/axios.ts | 21 + .../aniwatch-api-main/src/config/cors.ts | 10 + .../src/config/errorHandler.ts | 11 + .../src/config/notFoundHandler.ts | 8 + .../aniwatch-api-main/src/config/ratelimit.ts | 17 + .../controllers/animeAboutInfo.controller.ts | 31 + .../controllers/animeCategory.controller.ts | 39 + .../animeEpisodeSrcs.controller.ts | 75 ++ .../controllers/animeEpisodes.controller.ts | 31 + .../src/controllers/animeGenre.controller.ts | 37 + .../controllers/animeProducer.controller.ts | 37 + .../src/controllers/animeSearch.controller.ts | 57 + .../animeSearchSuggestion.controller.ts | 31 + .../controllers/episodeServers.controller.ts | 30 + .../estimatedSchedule.controller.ts | 36 + .../src/controllers/homePage.controller.ts | 18 + .../src/controllers/index.ts | 25 + .../aniwatch-api-main/src/extractors/index.ts | 6 + .../src/extractors/megacloud.ts | 226 ++++ .../src/extractors/rapidcloud.ts | 166 +++ .../src/extractors/streamsb.ts | 83 ++ .../src/extractors/streamtape.ts | 37 + .../src/parsers/animeAboutInfo.ts | 229 ++++ .../src/parsers/animeCategory.ts | 118 ++ .../src/parsers/animeEpisodeSrcs.ts | 129 +++ .../src/parsers/animeEpisodes.ts | 61 + .../src/parsers/animeGenre.ts | 105 ++ .../src/parsers/animeProducer.ts | 120 ++ .../src/parsers/animeSearch.ts | 118 ++ .../src/parsers/animeSearchSuggestion.ts | 77 ++ .../src/parsers/episodeServers.ts | 85 ++ .../src/parsers/estimatedSchedule.ts | 67 ++ .../aniwatch-api-main/src/parsers/homePage.ts | 203 ++++ .../aniwatch-api-main/src/parsers/index.ts | 25 + .../aniwatch-api-main/src/routes/index.ts | 55 + src/special/aniwatch-api-main/src/server.ts | 63 ++ .../aniwatch-api-main/src/types/anime.ts | 136 +++ .../src/types/controllers/animeAboutInfo.ts | 3 + .../src/types/controllers/animeCategory.ts | 7 + .../src/types/controllers/animeEpisodeSrcs.ts | 7 + .../src/types/controllers/animeEpisodes.ts | 3 + .../src/types/controllers/animeGenre.ts | 7 + .../src/types/controllers/animeProducer.ts | 7 + .../src/types/controllers/animeSearch.ts | 20 + .../controllers/animeSearchSuggestion.ts | 3 + .../src/types/controllers/episodeServers.ts | 3 + .../types/controllers/estimatedSchedule.ts | 3 + .../src/types/controllers/index.ts | 10 + .../aniwatch-api-main/src/types/extractor.ts | 18 + .../src/types/parsers/animeAboutInfo.ts | 19 + .../src/types/parsers/animeCategory.ts | 22 + .../src/types/parsers/animeEpisodeSrcs.ts | 12 + .../src/types/parsers/animeEpisodes.ts | 6 + .../src/types/parsers/animeGenre.ts | 11 + .../src/types/parsers/animeProducer.ts | 8 + .../src/types/parsers/animeSearch.ts | 14 + .../types/parsers/animeSearchSuggestion.ts | 6 + .../src/types/parsers/episodeServers.ts | 9 + .../src/types/parsers/estimatedSchedule.ts | 10 + .../src/types/parsers/homePage.ts | 18 + .../src/types/parsers/index.ts | 25 + .../aniwatch-api-main/src/utils/constants.ts | 129 +++ .../aniwatch-api-main/src/utils/index.ts | 2 + .../aniwatch-api-main/src/utils/methods.ts | 288 +++++ .../test/animeAboutInfo.test.ts | 11 + .../test/animeCategory.test.ts | 12 + .../test/animeEpisodeSrcs.test.ts | 13 + .../test/animeEpisodes.test.ts | 9 + .../aniwatch-api-main/test/animeGenre.test.ts | 10 + .../test/animeProducer.test.ts | 12 + .../test/animeSearch.test.ts | 9 + .../test/animeSearchSuggestion.test.ts | 8 + .../test/episodeServers.test.ts | 11 + .../test/estimatedSchedule.test.ts | 8 + .../aniwatch-api-main/test/homePage.test.ts | 17 + src/special/aniwatch-api-main/tsconfig.json | 38 + src/special/aniwatch-api-main/vercel.json | 8 + .../aniwatch-api-main/vitest.config.ts | 9 + src/start.js | 74 +- src/tools/multiple_download.js | 1 - src/utils/manager.js | 20 +- src/utils/media.js | 6 +- src/utils/progress.js | 3 +- src/utils/tools.js | 10 +- 120 files changed, 6278 insertions(+), 112 deletions(-) create mode 100644 install.bat create mode 100644 install.sh create mode 100644 src/downloader/anime/download.js create mode 100644 src/downloader/anime/m3u8.js create mode 100644 src/downloader/anime/request.js create mode 100644 src/downloader/anime/search.js create mode 100644 src/special/aniwatch-api-main/.dockerignore create mode 100644 src/special/aniwatch-api-main/.env.example create mode 100644 src/special/aniwatch-api-main/.github/FUNDING.yml create mode 100644 src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/feature-request.md create mode 100644 src/special/aniwatch-api-main/.github/workflows/codeql-analysis.yml create mode 100644 src/special/aniwatch-api-main/.github/workflows/docker-build.yml create mode 100644 src/special/aniwatch-api-main/.github/workflows/release.yml create mode 100644 src/special/aniwatch-api-main/.github/workflows/test.yml create mode 100644 src/special/aniwatch-api-main/.gitignore create mode 100644 src/special/aniwatch-api-main/.husky/commit-msg create mode 100644 src/special/aniwatch-api-main/CHANGELOG.md create mode 100644 src/special/aniwatch-api-main/CONTRIBUTING.md create mode 100644 src/special/aniwatch-api-main/Dockerfile create mode 100644 src/special/aniwatch-api-main/LICENSE create mode 100644 src/special/aniwatch-api-main/README.md create mode 100644 src/special/aniwatch-api-main/api/index.ts create mode 100644 src/special/aniwatch-api-main/package.json create mode 100644 src/special/aniwatch-api-main/public/img/img1.gif create mode 100644 src/special/aniwatch-api-main/public/index.html create mode 100644 src/special/aniwatch-api-main/public/robots.txt create mode 100644 src/special/aniwatch-api-main/render.yaml create mode 100644 src/special/aniwatch-api-main/src/config/axios.ts create mode 100644 src/special/aniwatch-api-main/src/config/cors.ts create mode 100644 src/special/aniwatch-api-main/src/config/errorHandler.ts create mode 100644 src/special/aniwatch-api-main/src/config/notFoundHandler.ts create mode 100644 src/special/aniwatch-api-main/src/config/ratelimit.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeAboutInfo.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeCategory.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeEpisodeSrcs.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeEpisodes.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeGenre.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeProducer.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeSearch.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/animeSearchSuggestion.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/episodeServers.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/estimatedSchedule.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/homePage.controller.ts create mode 100644 src/special/aniwatch-api-main/src/controllers/index.ts create mode 100644 src/special/aniwatch-api-main/src/extractors/index.ts create mode 100644 src/special/aniwatch-api-main/src/extractors/megacloud.ts create mode 100644 src/special/aniwatch-api-main/src/extractors/rapidcloud.ts create mode 100644 src/special/aniwatch-api-main/src/extractors/streamsb.ts create mode 100644 src/special/aniwatch-api-main/src/extractors/streamtape.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeAboutInfo.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeCategory.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeEpisodeSrcs.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeEpisodes.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeGenre.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeProducer.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeSearch.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/animeSearchSuggestion.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/episodeServers.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/estimatedSchedule.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/homePage.ts create mode 100644 src/special/aniwatch-api-main/src/parsers/index.ts create mode 100644 src/special/aniwatch-api-main/src/routes/index.ts create mode 100644 src/special/aniwatch-api-main/src/server.ts create mode 100644 src/special/aniwatch-api-main/src/types/anime.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeAboutInfo.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeCategory.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeEpisodeSrcs.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeEpisodes.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeGenre.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeProducer.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeSearch.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/animeSearchSuggestion.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/episodeServers.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/estimatedSchedule.ts create mode 100644 src/special/aniwatch-api-main/src/types/controllers/index.ts create mode 100644 src/special/aniwatch-api-main/src/types/extractor.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeAboutInfo.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeCategory.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeEpisodeSrcs.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeEpisodes.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeGenre.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeProducer.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeSearch.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/animeSearchSuggestion.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/episodeServers.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/estimatedSchedule.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/homePage.ts create mode 100644 src/special/aniwatch-api-main/src/types/parsers/index.ts create mode 100644 src/special/aniwatch-api-main/src/utils/constants.ts create mode 100644 src/special/aniwatch-api-main/src/utils/index.ts create mode 100644 src/special/aniwatch-api-main/src/utils/methods.ts create mode 100644 src/special/aniwatch-api-main/test/animeAboutInfo.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeCategory.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeEpisodeSrcs.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeEpisodes.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeGenre.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeProducer.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeSearch.test.ts create mode 100644 src/special/aniwatch-api-main/test/animeSearchSuggestion.test.ts create mode 100644 src/special/aniwatch-api-main/test/episodeServers.test.ts create mode 100644 src/special/aniwatch-api-main/test/estimatedSchedule.test.ts create mode 100644 src/special/aniwatch-api-main/test/homePage.test.ts create mode 100644 src/special/aniwatch-api-main/tsconfig.json create mode 100644 src/special/aniwatch-api-main/vercel.json create mode 100644 src/special/aniwatch-api-main/vitest.config.ts diff --git a/.gitignore b/.gitignore index 135a2c6..2ce967c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /node_modules - -cookies.txt +/.husky diff --git a/README.md b/README.md index d8626c6..4536960 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,75 @@ A simple program to download YouTube playlists. ## Current Version -**v1.0.9** +**v1.1.0** older versions can be downloaded thru releases +## Note +- When downloading formats other than mp4/mp3. It might contribute to slowness since it converts to mp4/mp3 first before converting to format. +- The internet check might contribute to slowness. (it depends on your net, you can turn it off in the config). +- This program may be slow because it merges the audio and video downloads using `ffmpeg` and it also converts downloads to their specified format and edits the metadata of downloads using `ffmpeg`. +- The program can split downloads as an option on the config due to 'encoding errors,' videos without sound, unplayable videos, or because one-download quality is sh#t. + +## Requires +- [FFmpeg](https://ffmpeg.org/) +- [Node.js 20+](https://nodejs.org/en) + +## Installation + +- Download the [repository](https://github.com/merasugd/yt-playlist-downloader/archive/refs/heads/main.zip) and extract it +- Install the required dependencies by running: + - For Windows, run ```install.bat``` + - For linux, run ```install.sh``` +- To start the program + - For Windows, run ```start.bat``` + - For linux, run ```start.sh``` + +## Features + +- **Audio Only Download**: Option to download only the audio from YouTube videos. +- **Multiple Playlists**: Supports downloading multiple playlists listed in `settings.json`. +- **YouTube Cookies**: Can use YouTube cookies stored in `settings.json` for downloading restricted content. +- **Simple Download**: Easy to use for downloading YouTube content. +- **Compression**: Option to compress downloads into a zip file or move them to a directory. +- **Split Download and Merging**: Downloads audio and video separately and merges them into a single file using `ffmpeg`. +- **Multi-Format**: Supports formats like `flac`, `ogg` and more. + +## Supported Formats +#### Audio +- mp3 (MPEG Audio Layer 3) +- ogg (Ogg Vorbis) +- wav (Waveform Audio File Format) +- m4a (MPEG-4 Audio) +- flac (Free Lossless Audio Codec) +#### Video +- mp4 (MPEG-4 Part 14) +- mkv (Matroska Video) +- flv (Flash Video) +- avi (Audio Video Interleave) +- mov (QuickTime/MOV) + +## Downloaders +- `split-v1`: Split Downloader V1 + - It uses purely ytdl-core and splits downloads to audio and video then merges it. + +- `single-v1`: Single Downloader V1 + - It uses purely ytdl-core and downloads videos with attached audio to it. It doesnt need merging but sometimes the quality is sh#t. + +- `split-v2`: Split Downloader V2 + - It uses fetch to gather sources, the difference between split v1 and v2 is v2 uses its own downloader [easydl]() and its incredibly fast. + +- `single-v2` + - It uses ytdl-core to gather cources, single v2 also uses [easydl](https://www.npmjs.com/package/easydl). + +- `anime-downloader` + - It uses 3 providers to gather sources, this is a special downloader because it will never get updated again but still be fixed. + - It is basically an anime downloader. + +## Support + +For support, create an issue on GitHub. + ## Releases v1.0.1 - Proper conversions @@ -64,6 +129,11 @@ v1.0.9 - Split V2 uses own info fetcher, while Single V2 uses ytdl-core. - Fixes cache downloaded file extensions. +v1.1.0 +- Special downloader ('anime-downloader') +- Added installer script. +- Rearranged README + ## Pre-Releases v1.0.3-pre - Removed **Split Download and Merging** @@ -100,58 +170,8 @@ v1.0.8-pre - Added list prompt for quality and format. - Fixed video specific settings. -## Supported Formats -#### Audio -- mp3 (MPEG Audio Layer 3) -- ogg (Ogg Vorbis) -- wav (Waveform Audio File Format) -- m4a (MPEG-4 Audio) -- flac (Free Lossless Audio Codec) -#### Video -- mp4 (MPEG-4 Part 14) -- mkv (Matroska Video) -- flv (Flash Video) -- avi (Audio Video Interleave) -- mov (QuickTime/MOV) - -## Note -- When downloading formats other than mp4/mp3. It might contribute to slowness since it converts to mp4/mp3 first before converting to format. -- The internet check might contribute to slowness. (it depends on your net, you can turn it off in the config). -- This program may be slow because it merges the audio and video downloads using `ffmpeg` and it also converts downloads to their specified format and edits the metadata of downloads using `ffmpeg`. -- The program can split downloads as an option on the config due to 'encoding errors,' videos without sound, unplayable videos, or because one-download quality is sh#t. - -## Requires -- [FFmpeg](https://ffmpeg.org/) -- [Node.js 20+](https://nodejs.org/en) - -## Installation - -1. Download the [repository](https://github.com/merasugd/yt-playlist-downloader/archive/refs/heads/main.zip) and extract it -2. Install the required dependencies by running: -```bash - npm install -``` -3. To start the program - -- For Windows, run ```start.bat``` -- For linux, run ```start.sh``` - -## Features - -- **Audio Only Download**: Option to download only the audio from YouTube videos. -- **Multiple Playlists**: Supports downloading multiple playlists listed in `settings.json`. -- **YouTube Cookies**: Can use YouTube cookies stored in `settings.json` for downloading restricted content. -- **Simple Download**: Easy to use for downloading YouTube content. -- **Compression**: Option to compress downloads into a zip file or move them to a directory. -- **Split Download and Merging**: Downloads audio and video separately and merges them into a single file using `ffmpeg`. -- **Multi-Format**: Supports formats like `flac`, `ogg` and more. - -## Support - -For support, create an issue on GitHub. - - ## 🔗 Links [![youtube](https://img.shields.io/badge/youtube-FF0000?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/@merasu_gd) + [![facebook](https://img.shields.io/badge/facebook-0A66C2?style=for-the-badge&logo=facebook&logoColor=white)](https://www.facebook.com/profile.php?id=61554338001508) diff --git a/install.bat b/install.bat new file mode 100644 index 0000000..1f387a8 --- /dev/null +++ b/install.bat @@ -0,0 +1 @@ +npm run ins \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..1f387a8 --- /dev/null +++ b/install.sh @@ -0,0 +1 @@ +npm run ins \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index bad57a4..a22e86a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,21 @@ { "name": "yt-playlist-downloader", - "version": "1.0.9", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yt-playlist-downloader", - "version": "1.0.9", + "version": "1.1.0", "license": "GPL-3.0-only", + "dependencies": { + "@consumet/extensions": "^1.6.0", + "hlsdownloader": "^3.2.6", + "m3u8-parser": "^7.1.0", + "m3u8stream": "^0.8.6", + "node-hls-downloader": "^2.2.0", + "terminate": "^2.8.0" + }, "devDependencies": { "acrcloud": "^1.4.0", "adm-zip": "^0.5.14", @@ -37,6 +45,51 @@ "ytdl-core": "^4.11.5" } }, + "node_modules/@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@consumet/extensions": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@consumet/extensions/-/extensions-1.6.0.tgz", + "integrity": "sha512-t2FAWEBbZyMyYFVCJMUNJGLAhyScesHNySwgNnuAlVKCJOAR0f2mV0kA0miehHXMVY82mrVsxRTMKgCfMlCJHw==", + "dependencies": { + "ascii-url-encoder": "^1.2.0", + "axios": "^0.27.2", + "cheerio": "^1.0.0-rc.12", + "crypto-js": "^4.1.1", + "form-data": "^4.0.0" + } + }, + "node_modules/@consumet/extensions/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/@consumet/extensions/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@derhuerst/http-basic": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.4.tgz", @@ -187,6 +240,20 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, + "node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz", + "integrity": "sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, "node_modules/acrcloud": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/acrcloud/-/acrcloud-1.4.0.tgz", @@ -277,6 +344,11 @@ "node": ">=0.10.0" } }, + "node_modules/ascii-url-encoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ascii-url-encoder/-/ascii-url-encoder-1.2.0.tgz", + "integrity": "sha512-jRQMrz1ZqL7gnK60Xbu1S8kDi01UN+lHBnhvXZZqjd7nms7t4jOv4o9nE8bbfDh1Ts/KEtW2nXGR5CmydDBmlw==" + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -386,8 +458,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/aws-sign2": { "version": "0.7.0", @@ -453,8 +524,7 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boolstring": { "version": "1.0.2", @@ -500,7 +570,6 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -521,7 +590,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -567,7 +635,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -575,6 +642,14 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, "node_modules/component-emitter": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz", @@ -628,11 +703,15 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -648,7 +727,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, "engines": { "node": ">= 6" }, @@ -717,7 +795,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -726,7 +803,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -736,11 +812,15 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", @@ -752,7 +832,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, "dependencies": { "domelementtype": "^2.3.0" }, @@ -767,7 +846,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -780,8 +858,7 @@ "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "node_modules/easydl": { "version": "1.2.0", @@ -803,7 +880,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "engines": { "node": ">=0.12" }, @@ -897,6 +973,44 @@ "es5-ext": "~0.10.14" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/event-stream/node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/event-stream/node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -1030,7 +1144,6 @@ "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, "funding": [ { "type": "individual", @@ -1081,12 +1194,38 @@ "node": ">=12.20.0" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" + }, "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", "dev": true }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/get-audio-duration": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-audio-duration/-/get-audio-duration-4.0.1.tgz", @@ -1118,6 +1257,20 @@ "assert-plus": "^1.0.0" } }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -1141,11 +1294,23 @@ "node": ">=6" } }, + "node_modules/hlsdownloader": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/hlsdownloader/-/hlsdownloader-3.2.6.tgz", + "integrity": "sha512-Mztl6RWh8iQFWENaY7MOdlV1/FEX6mdmhl317hTt4GQT36HdBv4OTdvhsX1Frdh0RSezfnCQ27BV3LE1ODgpjQ==", + "dependencies": { + "ky": "^1.3.0", + "p-limit": "^5.0.0" + }, + "engines": { + "node": ">=18", + "npm": ">=9" + } + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -1317,6 +1482,25 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/jsonpath-plus": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-5.0.7.tgz", @@ -1347,6 +1531,17 @@ "integrity": "sha512-HjorDJFNhnM4SicvaUXac0X77NiskggxJdesG72+O5zBKpSqKFCrqmndKVqpu3pFqkla0St6uGk8Ju0sCurrmg==", "dev": true }, + "node_modules/ky": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.4.0.tgz", + "integrity": "sha512-tPhhoGUiEiU/WXR4rt8klIoLdnTtyu+9jVKHd/wauEjYud32jyn63mzKWQweaQrHWxBQtYoVtdcEnYX1LosnFQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, "node_modules/lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", @@ -1356,11 +1551,20 @@ "es5-ext": "~0.10.2" } }, + "node_modules/m3u8-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/m3u8-parser/-/m3u8-parser-7.1.0.tgz", + "integrity": "sha512-7N+pk79EH4oLKPEYdgRXgAsKDyA/VCo0qCHlUwacttQA0WqsjZQYmNfywMvjlY9MpEBVZEt0jKFd73Kv15EBYQ==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + } + }, "node_modules/m3u8stream": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz", "integrity": "sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==", - "dev": true, "dependencies": { "miniget": "^4.2.2", "sax": "^1.2.4" @@ -1369,6 +1573,11 @@ "node": ">=12" } }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" + }, "node_modules/memoizee": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", @@ -1398,7 +1607,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -1407,7 +1615,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -1424,11 +1631,18 @@ "node": ">=6" } }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, "node_modules/miniget": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.3.tgz", "integrity": "sha512-SjbDPDICJ1zT+ZvQwK0hUcRY4wxlhhNpHL9nJOB2MEAXRGagTljsO8MEDzQMTFf0Q8g4QNi8P9lEm/g7e+qgzA==", - "dev": true, "engines": { "node": ">=12" } @@ -1520,6 +1734,39 @@ "nfzf": "bin/cli.js" } }, + "node_modules/node-hls-downloader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-hls-downloader/-/node-hls-downloader-2.2.0.tgz", + "integrity": "sha512-Dsul9C5p3UkBPsCrLqAdfIIGQBaVuEx67o8c2Y9MGIZrObhsjqou9xwIxtDm+V1rpW6UdoY4tKDprQ/D21yOkA==", + "dependencies": { + "axios": "^0.24.0", + "commander": "^7.2.0", + "fs-extra": "^10.0.0", + "m3u8-parser": "^4.7.0", + "p-queue": "^6.6.2" + }, + "bin": { + "hls-downloader": "dist/cli.js" + } + }, + "node_modules/node-hls-downloader/node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/node-hls-downloader/node_modules/m3u8-parser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/m3u8-parser/-/m3u8-parser-4.8.0.tgz", + "integrity": "sha512-UqA2a/Pw3liR6Df3gwxrqghCP17OpPlQj6RBPLYygf/ZSQ4MoSgvdvhvt35qV+3NaaA0FSZx93Ix+2brT1U7cA==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -1536,7 +1783,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "dependencies": { "boolbase": "^1.0.0" }, @@ -1568,6 +1814,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -1578,7 +1872,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, "dependencies": { "entities": "^4.4.0" }, @@ -1590,7 +1883,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -1618,6 +1910,14 @@ "node": ">=8" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dependencies": { + "through": "~2.3" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -1628,7 +1928,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, "engines": { "node": ">= 0.6.0" } @@ -1654,6 +1953,20 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -1714,6 +2027,11 @@ "minimatch": "~3.0.4" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -1805,8 +2123,7 @@ "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -1953,11 +2270,21 @@ "node": ">=6" } }, + "node_modules/terminate": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/terminate/-/terminate-2.8.0.tgz", + "integrity": "sha512-bcbjJEg0wY5nuJXvGxxHfmoEPkyHLCctUKO6suwtxy7jVSgGcgPeGwpbLDLELFhIaxCGRr3dPvyNg1yuz2V0eg==", + "dependencies": { + "ps-tree": "^1.2.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "2.0.5", @@ -2114,6 +2441,11 @@ "requires-port": "^1.0.0" } }, + "node_modules/url-toolkit": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/url-toolkit/-/url-toolkit-2.2.5.tgz", + "integrity": "sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==" + }, "node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", @@ -2211,6 +2543,17 @@ "node": ">=0.4" } }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yt-search": { "version": "2.11.1", "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.11.1.tgz", diff --git a/package.json b/package.json index eef1ed6..fdc7756 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "yt-playlist-downloader", - "version": "1.0.9", - "lastrelease": "1.0.9", + "version": "1.1.0", + "lastrelease": "1.1.0", "description": "Download YouTube Playlist", "main": "start.js", "scripts": { "test": "node --inspect src/start.js", - "start": "node --no-deprecation src/start.js" + "start": "node --no-deprecation src/start.js", + "ins": "cd src/special/aniwatch-api-main && npm install && cd ../../.. && npm install" }, "author": "MerasGD", "license": "GPL-3.0-only", @@ -37,5 +38,13 @@ "uuid": "^10.0.0", "yt-search": "^2.11.1", "ytdl-core": "^4.11.5" + }, + "dependencies": { + "@consumet/extensions": "^1.6.0", + "hlsdownloader": "^3.2.6", + "m3u8-parser": "^7.1.0", + "m3u8stream": "^0.8.6", + "node-hls-downloader": "^2.2.0", + "terminate": "^2.8.0" } } diff --git a/settings/config.json b/settings/config.json index f163aa3..d98f7e7 100644 --- a/settings/config.json +++ b/settings/config.json @@ -1,5 +1,5 @@ { - "downloader": "split-v2", + "downloader": "anime-downloader", "safe_download": true, "internet_checking": true, "centered_logging": true, diff --git a/src/downloader/anime/download.js b/src/downloader/anime/download.js new file mode 100644 index 0000000..c2be81e --- /dev/null +++ b/src/downloader/anime/download.js @@ -0,0 +1,174 @@ +const fs = require('fs') +const path = require('path') +const cp = require('child_process') +const ffmpeg = require('ffmpeg-static') + +const prog = require('../../utils/progress') +const util = require('../../utils/tools') +const media = require('../../utils/media') +const download = require('./m3u8') + +module.exports = function(playlistTitle, data, bin, progressData, author, index) { + let sources = data.sources.sources + let headers = data.sources.headers || {} + let title = util.sanitizeTitle(data.title) + + let quality = data.quality + let format = data.format + + let raw_path = path.join(bin, `${title.toLowerCase().replaceAll(' ', '_')}.raw.mp4`) + let nometadata_path = path.join(bin, `${title.toLowerCase().replaceAll(' ', '_')}.nometadata.mp4`) + let metadata = path.join(bin, `${title.toLowerCase().replaceAll(' ', '_')}.metadata.mp4`) + let dl_path = path.join(bin, `${title}.${format}`) + let cover = path.join(bin, 'cover.jpg') + + if(fs.existsSync(raw_path)) fs.rmSync(raw_path, { force: true }) + if(fs.existsSync(nometadata_path)) fs.rmSync(nometadata_path, { force: true }) + if(fs.existsSync(metadata)) fs.rmSync(metadata, { force: true }) + if(fs.existsSync(dl_path)) fs.rmSync(dl_path, { force: true }) + if(fs.existsSync(cover)) fs.rmSync(cover, { force: true }) + + let total = 102 + let current = 0 + + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + { total: 100, current: 0, label: 'waiting' } + ]) + + function dl() { + return new Promise(async(resolve) => { + let mainStream = await progressStream() + if(mainStream !== 100) return resolve(mainStream) + + let result = await meta() + return resolve(result) + }) + } + + function progressStream() { + return new Promise(async(resolve) => { + download(raw_path, quality, sources, headers, (event, data) => { + if(event === 'error') return resolve(101) + if(event === 'end') return resolve(100) + + if(event === 'progress') { + current = Math.floor((data.current / total) * 100) + data.current = current + + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + data + ]) + } + }) + }) + } + + function meta() { + return new Promise(async(resolve) => { + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + { total: 100, current: Math.floor((current / total) * 100), label: 'metadata' } + ]) + + try { + await util.basicDL(data.cover, cover) + await fs.promises.rename(raw_path, nometadata_path) + } catch (err) { + console.log(err) + return resolve(101) + } + + let proc = cp.spawn(ffmpeg, [ + '-i', nometadata_path, '-i', cover, + '-map', '0', '-map', '1', + '-metadata', `title=${data.title}`, + '-metadata', `artist=${author}`, + '-metadata', `composer=${author}`, + '-metadata', `album_artist=${author}`, + '-metadata', `year=${data.year}`, + '-metadata', `date=${data.year}`, + '-metadata', `genre=Anime`, + '-metadata', `album=${playlistTitle}`, + '-metadata', `description=${data.description}`, + '-metadata', `episode_id=${index}`, + '-metadata', `track=${index}`, + '-metadata', `network=${author}`, + '-metadata', `show=${playlistTitle}`, + '-metadata', `sypnosis=${data.description}`, + '-metadata:s:t', 'mimetype=image/jpeg', + '-disposition:v:1', 'attached_pic', + '-codec', 'copy', + '-y', metadata + ], { + windowsHide: true + }) + + proc.on('error', async(err) => { + if(fs.existsSync(nometadata_path)) await require('fs/promises').rename(nometadata_path, dl_path) + if(fs.existsSync(cover)) fs.rmSync(cover, { force: true }) + + prog.log(String(err).red) + return resolve(101) + }) + + proc.on('close', async() => { + current = current + 1 + + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + { total: 100, current: Math.floor((current / total) * 100), label: 'metadata' } + ]) + + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + { total: 100, current: Math.floor((current / total) * 100), label: 'converting to '+format } + ]) + + if(format !== 'mp4') { + let res_c = await media.convert(metadata, dl_path, format) + if(res_c !== 100) return resolve(res_c) + + if(fs.existsSync(metadata)) fs.rmSync(metadata, { force: true }) + } else await require('fs/promises').rename(metadata, dl_path) + + current = current + 1 + + prog.multipleProgress([ + String(playlistTitle).green.bold, + ("Downloading \""+title+'"').yellow, + progressData, + { total: 100, current: Math.floor((current / total) * 100), label: 'converting to '+format } + ]) + + if(fs.existsSync(metadata)) await require('fs/promises').rm(metadata, { force: true }) + if(fs.existsSync(nometadata_path)) await require('fs/promises').rm(nometadata_path, { force: true }) + if(fs.existsSync(cover)) fs.rmSync(cover, { force: true }) + + return resolve(100) + }) + }) + } + + return new Promise(async(resolve) => { + let dl_result = await dl() + + if(fs.existsSync(raw_path)) fs.rmSync(raw_path, { force: true }) + if(fs.existsSync(nometadata_path)) fs.rmSync(nometadata_path, { force: true }) + if(fs.existsSync(metadata)) fs.rmSync(metadata, { force: true }) + if(fs.existsSync(cover)) fs.rmSync(cover, { force: true }) + + return resolve(dl_result) + }) +} \ No newline at end of file diff --git a/src/downloader/anime/m3u8.js b/src/downloader/anime/m3u8.js new file mode 100644 index 0000000..a2e4ad8 --- /dev/null +++ b/src/downloader/anime/m3u8.js @@ -0,0 +1,209 @@ +const { URL } = require('node:url') +const { default: ffmpegPath } = require('ffmpeg-static') +const fs = require('fs') +const path = require('path') +const cp = require('child_process') +const m3u8Parser = require('m3u8-parser') +const hls = require('node-hls-downloader') + +const parser = new m3u8Parser.Parser() + +const media = require('../../utils/media') +const util = require('../../utils/tools') + +let segments = (path.join(__dirname, '..', '..', '..', '.cache', 'stored_ts')) + +module.exports = hlshandle + +function hlshandle(output, quality, sources, source_headers, cb, t) { + return new Promise(async(resolve) => { + let fetched = filter(sources, quality) + + if(!fetched) { + cb('error', new Error('BAD SOURCES')) + return resolve(101) + } + + try { + let type = t || fetched.type + let stream = fetched.url + let concurrent = 10 + + if(type === 'retry') { + cb('start') + + if(fs.existsSync(segments)) await require('fs/promises').rm(segments, { recursive: true, force: true }) + fs.mkdirSync(segments) + + let index_path = path.join(segments, 'index.m3u8') + await util.basicDL(stream, index_path) + + parser.push(fs.readFileSync(index_path).toString()) + parser.end() + + let parsed = parser.manifest + let playlists = parsed.playlists + let isVod = false + + if (parsed.segments && parsed.segments.length > 0) { + isVod = true + playlists = playlists || [{}] + } else if(!playlists || !Array.isArray(playlists) || playlists.length <= 0) { + cb('error', 'invalid') + return resolve(101) + } + + playlists.filter(a => a && a.attributes).sort((a, b) => a.attributes.BANDWIDTH - b.attributes.BANDWIDTH) + + let fetched_index = filter(playlists, quality) + let uri = isVod ? stream : new URL(fetched_index.uri, stream).href + + let fetched_path = path.join(segments, 'fetched.m3u8') + await util.basicDL(uri, fetched_path) + + let fetchedParser = new m3u8Parser.Parser() + fetchedParser.push(fs.readFileSync(fetched_path).toString()) + fetchedParser.end() + + let fetched = fetchedParser.manifest + + if(!fetched.segments || !Array.isArray(fetched.segments) || fetched.segments.length <= 0) { + cb('error', 'invalid playlist') + return resolve(101) + } + + let current = 0 + let total = fetched.segments.length + + await hls.download({ + streamUrl: uri, + outputFile: output, + concurrency: concurrent, + quality: quality === 'highest' ? 'best' : quality === 'lowest' ? 'worst' : 'best', + logger: (...log) => { + log = log.join(' ') + + if(String(log).includes('Received')) { + current = current + 1 + + let label = Math.floor((current / total) * 100) === 100 || current === total ? 'merging streams' : 'downloading hls' + + cb('progress', { total: 100, current: Math.floor((current / total) * 100), label }) + } + }, + mergedSegmentsFile: path.join(segments, 'merged.ts'), + segmentsDir: segments.replaceAll('\\', '/')+'/segments/', + ffmpegPath: ffmpegPath + }) + + if(fs.existsSync(segments)) await require('fs/promises').rm(segments, { recursive: true, force: true }) + + cb('end') + return resolve(100) + } else { + let total = null + let current = 0 + + if(fs.existsSync(segments)) await require('fs/promises').rm(segments, { recursive: true, force: true }) + + let order = [] + let hls = await import('hlsdownloader').then(v => v.default) + let downloader = new hls({ + playlistURL: stream, + concurrency: concurrent, + destination: segments, + overwrite: true, + onData: (data) => { + current = current + 1 + total = data.totalItems + order.push(data.path) + + let percentage = Math.floor((current / total) * 100) + let label = percentage === 100 || current === total ? 'merging streams' : 'downloading m3u8' + + return cb('progress', { total: 100, current: percentage, label }) + } + }) + + cb('start') + downloader.startDownload().then(async(v) => { + if(v.errors && v.errors.length > 0) return resolve(await hlshandle(output, quality, sources, source_headers, cb, 'retry')) + + const rep = (str = '') => { + let splitted = str.replaceAll('\\', '/').split('/') + let string1 = splitted[splitted.length-1].replaceAll('.ts', '') + let split2 = string1.split('.') + let string = split2[split2.length-1] + let numbersOnlyString = string.replaceAll(/\D/g, '') + let parsedInteger = parseInt(numbersOnlyString, 10) + + return Math.floor(parsedInteger); + } + + + let all_ts = order.filter(v => v.endsWith('.ts')).sort((a, b) => rep(a) - rep(b)) + let merged_path = path.join(segments, 'merge.ts') + let concat_merged_path = path.join(segments, 'merge.txt') + + await merge(merged_path, all_ts, concat_merged_path) + + let proc = [ + '-y', + '-i', merged_path, + '-c', 'copy', + output + ] + + let ffmpeg = await media.ffmpeg(proc) + + if(ffmpeg !== 100) { + cb('error', 101) + return resolve(101) + } + + if(fs.existsSync(segments)) await require('fs/promises').rm(segments, { recursive: true, force: true }) + + cb('end') + return resolve(100) + }) + + function merge(m_path, m, ct) { + return new Promise(async(resolv) => { + fs.writeFileSync(ct, m.map(v => { return `file '${v}'` }).join('\n')) + + let args = [ + '-f', 'concat', + '-safe', '0', + '-i', ct, + '-c', 'copy', + '-y', m_path + ] + + let proc = await media.ffmpeg(args) + + if(proc !== 100) { + if(fs.existsSync(segments)) await require('fs/promises').rm(segments, { recursive: true, force: true }) + cb('error', 101) + return resolve(101) + } + + return resolv(100) + }) + } + } + } catch (err) { + cb('error', err) + return resolve(101) + } + }) +} + +function filter(all, quality) { + if (quality === 'highest') { + return all[all.length - 1] + } else if (quality === 'lowest') { + return all[0] + } else if (quality === 'medium') { + return all[Math.floor(all.length / 2)] + } else return null +} \ No newline at end of file diff --git a/src/downloader/anime/request.js b/src/downloader/anime/request.js new file mode 100644 index 0000000..d07e856 --- /dev/null +++ b/src/downloader/anime/request.js @@ -0,0 +1,152 @@ +const { ANIME } = require('@consumet/extensions') +const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args)); + +function request(query, host = 'Gogo Anime') { + let anime = null + + return new Promise(async(resolve) => { + if(host === 'Gogo Anime') anime = new ANIME.Gogoanime() + else if(host === 'Zoro') anime = new ANIME.Zoro() + else return resolve(await ani(query)) + + try { + let searched = await anime.search(query) + + if(!searched || !searched.results) return await res() + if(!Array.isArray(searched.results) || searched.results.length <= 0) return await res() + + let raw_info = searched.results[0] + let full_info = await anime.fetchAnimeInfo(raw_info.id) + + let returnData = { + rawInfo: raw_info, + fullInfo: full_info, + episodes: [], + host + } + + if(!full_info || !full_info.episodes) return await res() + if(!Array.isArray(full_info.episodes) || full_info.episodes.length <= 0) return await res() + + let episodes = await Promise.all( + full_info.episodes.map(async function(raw_ep) { + let episodeId = raw_ep.id + + let fetched_sources = await anime.fetchEpisodeSources(episodeId) || {} + if(!fetched_sources.sources || !Array.isArray(fetched_sources.sources) || fetched_sources.sources <= 0) return { "404": true } + + fetched_sources.sources = fetched_sources.sources.filter(v => v.quality !== 'default' && v.quality !== 'backup').map((v, i) => { + if(!v.quality) v.quality = i + + let nan = isNaN(v.quality) ? String(v.quality).toLowerCase().replaceAll('p', '') : v.quality + let parsed = isNaN(nan) ? i : parseInt(String(nan)) + + v.quality_label = v.quality + v.quality = parsed + v.type = v.isM3U8 ? 'm3u8' : 'hls' + + return v + }) + fetched_sources.sources.sort((a, b) => a.quality - b.quality) + raw_ep.sources = fetched_sources + + return raw_ep + }) + ) + + returnData.episodes = episodes.filter(v => !v["404"]) + + return resolve(returnData) + } catch (err) { + return await res() + } + + async function res() { + return resolve(host === 'Aniwatch' ? 101 : await request(query, host === 'Gogo Anime' ? 'Zoro' : 'Aniwatch')) + } + }) +} + +function ani(q) { + return new Promise(async(resolve) => { + let apiUri = 'http://localhost:4000/anime/' + + q = String(q || '').toLowerCase() + + try { + let search = await fetch(apiUri+`search?q=${q}`).then(v => v.json()) + if(!search || typeof search !== 'object') return resolve(101) + + let results = search.animes + if(!results || !Array.isArray(results) || results.length <= 0) return resolve(101) + + let v = results[0] + + let id = v.id + + const resp = await fetch(`${apiUri}info?id=${id}`).then(v => v.json()) + + v.aniwatchInfo = resp.anime + + if(!resp.anime) return resolve(resp) + + let anime = resp.anime + + if(!anime || !anime.info) return resolve({ "400": true }) + if(Array.isArray(anime) && anime.length > 0) anime.info = anime[0].info + + let rawInfo = v + let info = anime.info + let fullInfo = info + + let eps = await fetch(`${apiUri}episodes/${id}`).then(v => v.json()) + + fullInfo.totalEpisodes = eps.totalEpisodes + + let all_eps = eps.episodes.map(v => { + return new Promise(async(resol) => { + let { episodeId } = v + + let ep = await fetch(`${apiUri}servers?episodeId=${episodeId}`).then(v => v.json()) + + if(ep.sub && Array.isArray(ep.sub) && ep.sub.length) { + v.service = ep.sub[0].serverName + v.category = 'sub' + } else if(ep.dub && Array.isArray(ep.dub) && ep.dub.length) { + v.service = ep.dub[0].serverName + v.category = 'dub' + } else return resol({ "404": true }) + + let source = await fetch(`${apiUri}episode-srcs?id=${episodeId}&server=vidstreaming&category=${v.category}`).then(v => v.json()) + + if(!source || typeof source !== 'object') return resol({ "404": true }) + if(!source.sources) return resol({ "404": true }) + if(!Array.isArray(source.sources) || source.sources.length <= 0) return resol({ "404": true }) + + v.sources = { + sources: source.sources, + headers: source.headers || {} + } + + return resol(v) + }) + }) + + v.episodes = await Promise.all(all_eps) + v.episodes = v.episodes.filter(v => !v["404"]) + v.aniwatch = true + + return resolve({ + rawInfo, + fullInfo, + episodes: v.episodes, + host: 'Aniwatch', + aniwatch: true + }) + } catch(err) { + return resolve(101) + } + }) +} + +module.exports = request \ No newline at end of file diff --git a/src/downloader/anime/search.js b/src/downloader/anime/search.js new file mode 100644 index 0000000..f6c3e6f --- /dev/null +++ b/src/downloader/anime/search.js @@ -0,0 +1,60 @@ +const prog = require('../../utils/progress') +const util = require('../../utils/tools') +const request = require('./request') +const terminate = require('terminate') + +module.exports = function(query, data = {}) { + return new Promise(async(resolve) => { + let net = await util.checkInternet() + if(!net) return process.exit(1) + + prog.multipleProgress([ + "Welcome To ".green+"YouTube Playlist Downloader".red+" by MerasGD".green, + ('Searching Anime "'+query+'"').yellow + ]) + + let got = await request(query) + if(got === 101) return resolve(101) + + if(!got || !got.episodes) return resolve(101) + + let list = {} + + data.settings = data.settings || [] + + list.year = (got.fullInfo.releaseDate || String(new Date().getFullYear())).toLowerCase().replaceAll('release: ', '') + list.title = got.fullInfo.title || got.fullInfo.name + list.author = got.host + list.videos = got.episodes.map((v, i) => { v.title = `${list.title} Episode ${i+1}`; v.year = list.year; v.description = `${got.fullInfo.description || 'Downloaded'}`; v.cover = got.fullInfo.image || got.fullInfo.cover || got.fullInfo.poster; return v }).map((v, i) => { + let settings = data.settings.find((vc) => vc.videoIndex === i+1) + + if(settings && settings.exception) return 'excepted' + + let format = settings ? settings.format : data.format + let quality = settings ? settings.quality : data.quality + + if(util.formatCheck(format)) { + format = format + } else { + format = data.format + } + + if(util.qualityCheck(quality)) { + quality = quality + } else { + quality = data.quality + } + + return Object.assign(v, { + format: format || 'mp4', + quality: quality || 'highest' + }) + }).filter(v => v !== "excepted") + + return resolve({ + playlist: list.title, + author: list.author, + videos: list.videos + }) + }) +} \ No newline at end of file diff --git a/src/downloader/main.js b/src/downloader/main.js index 86dabbd..75446ad 100644 --- a/src/downloader/main.js +++ b/src/downloader/main.js @@ -15,8 +15,12 @@ const single = require('./v1/single') const split_v2 = require('./v2/split') const single_v2 = require('./v2/single') +const anime = require('./anime/download') + +const terminate = require('terminate') + const download_setting = util.downloader() -const download = download_setting === 0 ? split : download_setting === 1 ? single : download_setting === 2 ? split_v2 : download_setting === 3 ? single_v2 : null +const download = download_setting === 0 ? split : download_setting === 1 ? single : download_setting === 2 ? split_v2 : download_setting === 3 ? single_v2 : download_setting === 4 ? anime : null if(!download) return process.exit(1) @@ -35,7 +39,7 @@ function downloadLooper(arr, bin, pl, aut, id, int) { { current, total, label: 'playlist' }, { total: 100, current: 0, label: 'checking internet'.yellow } ]) - if(!net) return process.exit(1) + if(!net) return resolve(101) prog.multipleProgress([ String(pl).green.bold, @@ -78,7 +82,7 @@ module.exports = function(conDl, arr, pl, aut, id, output, move) { if(result !== 100) { prog.log("Failed".red.bold) - return process.exit(1) + return process.exit(1) } manager.delete(id) diff --git a/src/downloader/v1/split.js b/src/downloader/v1/split.js index e45fc87..6beeb8d 100644 --- a/src/downloader/v1/split.js +++ b/src/downloader/v1/split.js @@ -3,6 +3,7 @@ const fs = require('fs'); const path = require('path'); const colors = require('colors'); const ffmpeg = require('ffmpeg-static') +const terminate = require('terminate') const cp = require('child_process') diff --git a/src/functions/searching.js b/src/functions/searching.js index 88e9dfb..b216049 100644 --- a/src/functions/searching.js +++ b/src/functions/searching.js @@ -1,13 +1,18 @@ const yt = require('yt-search') +const terminate = require('terminate') const prog = require('../utils/progress') const util = require('../utils/tools') +const animeSearcher = require('../downloader/anime/search') + module.exports = function(playlistId, data) { return new Promise(async(resolve) => { + if(util.downloader() === 4) return resolve(await animeSearcher(playlistId, data)) + prog.multipleProgress([ "Welcome To ".green+"YouTube Playlist Downloader".red+" by MerasGD".green, - ("Searching "+playlistId+'"').yellow + ('Searching "'+playlistId+'"').yellow ]) let net = await util.checkInternet() diff --git a/src/special/aniwatch-api-main/.dockerignore b/src/special/aniwatch-api-main/.dockerignore new file mode 100644 index 0000000..5956837 --- /dev/null +++ b/src/special/aniwatch-api-main/.dockerignore @@ -0,0 +1,22 @@ +.git +.env +.husky +.github +.gitignore + +node_modules +test + +.dockerignore +Dockerfile +build.sh + +LICENSE +CONTRIBUTING.md +CHANGELOG.md +README.md + +jest.config.ts +package-lock.json +yarn.lock +pnpm-lock.yaml diff --git a/src/special/aniwatch-api-main/.env.example b/src/special/aniwatch-api-main/.env.example new file mode 100644 index 0000000..6829a4e --- /dev/null +++ b/src/special/aniwatch-api-main/.env.example @@ -0,0 +1,6 @@ +DOMAIN = "aniwatchtv.to" +PORT = 4000 + +# RATE LIMIT +WINDOWMS = 1800000 # duration to track requests (in milliseconds) for rate limiting. here, 30*60*1000 = 1800000 = 30 minutes +MAX = 70 # maximum number of requests in this timeperiod \ No newline at end of file diff --git a/src/special/aniwatch-api-main/.github/FUNDING.yml b/src/special/aniwatch-api-main/.github/FUNDING.yml new file mode 100644 index 0000000..c901df3 --- /dev/null +++ b/src/special/aniwatch-api-main/.github/FUNDING.yml @@ -0,0 +1,2 @@ +# These are supported funding model platforms +github: [ghoshRitesh12] diff --git a/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/bug-report.yml b/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..79fbf45 --- /dev/null +++ b/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,45 @@ +name: Bug report 🐛 +description: Create a report to help this api improve +labels: [bug] +assignees: [ghoshRitesh12] +body: + - type: input + id: describe-the-bug + attributes: + label: Describe the bug + description: | + A clear and concise description of what the bug is. + placeholder: | + Example: "This route is not working..." + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + placeholder: | + Example: + "This should happen..." + validations: + required: true + + - type: textarea + id: actual-behavior + attributes: + label: Actual behavior + placeholder: | + Example: + "This happened instead..." + validations: + required: true + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: | + Add any other context about the problem here. + placeholder: | + Example: + "Also ..." diff --git a/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/feature-request.md b/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000..719118d --- /dev/null +++ b/src/special/aniwatch-api-main/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,19 @@ +--- +name: Feature request 🆕 +about: Suggest an idea for this api +title: "" +labels: ["enhancement"] +assignees: ["ghoshRitesh12"] +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/src/special/aniwatch-api-main/.github/workflows/codeql-analysis.yml b/src/special/aniwatch-api-main/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..02c678e --- /dev/null +++ b/src/special/aniwatch-api-main/.github/workflows/codeql-analysis.yml @@ -0,0 +1,39 @@ +name: "CodeQL Analysis" + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + - cron: "16 10 * * 2" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: ["typescript"] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/src/special/aniwatch-api-main/.github/workflows/docker-build.yml b/src/special/aniwatch-api-main/.github/workflows/docker-build.yml new file mode 100644 index 0000000..86f881d --- /dev/null +++ b/src/special/aniwatch-api-main/.github/workflows/docker-build.yml @@ -0,0 +1,46 @@ +name: "Docker Continuous Deployment" + +on: + release: + types: [published] + +jobs: + build_docker_image: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GHCR_DOCKER_PWD }} + + - name: Build and push docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ghcr.io/ghoshritesh12/aniwatch:${{ github.event.release.tag_name }} + ghcr.io/ghoshritesh12/aniwatch:latest + + trigger_deploy: + needs: build_docker_image + runs-on: ubuntu-latest + + steps: + - name: Trigger render deploy + run: | + curl --request POST \ + --url https://api.render.com/v1/services/${{ secrets.RENDER_API_SERVICE_ID }}/deploys \ + --header 'accept: application/json' \ + --header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' \ + --header 'content-type: application/json' \ + --data '{ "clearCache": "clear" }' diff --git a/src/special/aniwatch-api-main/.github/workflows/release.yml b/src/special/aniwatch-api-main/.github/workflows/release.yml new file mode 100644 index 0000000..58ea28e --- /dev/null +++ b/src/special/aniwatch-api-main/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: "Create Release" +on: + push: + branches: ["main"] + +jobs: + changelog: + runs-on: ubuntu-latest + + steps: + - name: Checkouts repo + uses: actions/checkout@v4 + + - name: Conventional changelog action + id: changelog + uses: TriPSs/conventional-changelog-action@v5 + with: + skip-on-empty: false + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Create release + if: ${{ steps.changelog.outputs.skipped == 'false' }} + uses: ncipollo/release-action@v1 + with: + generateReleaseNotes: true + token: ${{ secrets.CHANGELOG_SECRET }} + tag: ${{ steps.changelog.outputs.tag }} + name: ${{ steps.changelog.outputs.tag }} + body: ${{ steps.changelog.outputs.clean_changelog }} diff --git a/src/special/aniwatch-api-main/.github/workflows/test.yml b/src/special/aniwatch-api-main/.github/workflows/test.yml new file mode 100644 index 0000000..f25465e --- /dev/null +++ b/src/special/aniwatch-api-main/.github/workflows/test.yml @@ -0,0 +1,26 @@ +name: "Run Tests" + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + run_tests: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup NodeJS + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm i + + - name: Run all tests + run: npm test diff --git a/src/special/aniwatch-api-main/.gitignore b/src/special/aniwatch-api-main/.gitignore new file mode 100644 index 0000000..6ef96e5 --- /dev/null +++ b/src/special/aniwatch-api-main/.gitignore @@ -0,0 +1,8 @@ +.vscode +node_modules +.env +dist +package-lock.json +.idea +yarn.lock +pnpm-lock.yaml \ No newline at end of file diff --git a/src/special/aniwatch-api-main/.husky/commit-msg b/src/special/aniwatch-api-main/.husky/commit-msg new file mode 100644 index 0000000..d3d279d --- /dev/null +++ b/src/special/aniwatch-api-main/.husky/commit-msg @@ -0,0 +1,9 @@ +#!/bin/sh +if ! head -1 "$1" | grep -qE "^(feat|fix|chore|docs|test|style|refactor|perf|build|ci|revert)(\(.+?\))?: .{1,}$"; then + echo "Aborting commit. Your commit message is invalid." >&2 + exit 1 +fi +if ! head -1 "$1" | grep -qE "^.{1,88}$"; then + echo "Aborting commit. Your commit message is too long." >&2 + exit 1 +fi diff --git a/src/special/aniwatch-api-main/CHANGELOG.md b/src/special/aniwatch-api-main/CHANGELOG.md new file mode 100644 index 0000000..29dfef7 --- /dev/null +++ b/src/special/aniwatch-api-main/CHANGELOG.md @@ -0,0 +1,25 @@ +## [1.34.2](https://github.com/ghoshRitesh12/aniwatch-api/compare/v1.34.1...v1.34.2) (2024-07-09) + + + +## [1.34.1](https://github.com/ghoshRitesh12/aniwatch-api/compare/v1.34.0...v1.34.1) (2024-07-03) + + + +# [1.34.0](https://github.com/ghoshRitesh12/aniwatch-api/compare/v1.33.4...v1.34.0) (2024-06-11) + + +### Features + +* update rate limit to 6 reqs every 30 mins ([8d82f44](https://github.com/ghoshRitesh12/aniwatch-api/commit/8d82f448963dcf54c75dc93ea572f104dffcc9fb)) + + + +## [1.33.4](https://github.com/ghoshRitesh12/aniwatch-api/compare/v1.33.3...v1.33.4) (2024-06-11) + + + +## [1.33.3](https://github.com/ghoshRitesh12/aniwatch-api/compare/v1.33.2...v1.33.3) (2024-05-10) + + + diff --git a/src/special/aniwatch-api-main/CONTRIBUTING.md b/src/special/aniwatch-api-main/CONTRIBUTING.md new file mode 100644 index 0000000..d470d24 --- /dev/null +++ b/src/special/aniwatch-api-main/CONTRIBUTING.md @@ -0,0 +1,105 @@ +# Contributing to aniwatch-api + +Thank you for your interest in contributing to aniwatch-api. We appreciate whatever form of contribution you are willing to make. Every contribution counts ✨ + +## Table of Contents + +- [Types of contributions we are looking for](#types-of-contributions-we-are-looking-for) +- [Ground Rules & Expectations](#ground-rules--expectations) +- [How To Contribute](#how-to-contribute) +- [Prerequisites](#prerequisites) + - [Clone the repository](#clone-the-repository) + - [Project Structure](#project-structure) +- [Commit Messages](#commit-messages) + +## Types of contributions we are looking for + +In short, we welcome any sort of contribution you are willing to make as each and every contribution counts. We gladly accept contributions such as: + +- Documentation improvements: from minor typos to major document overhauls +- Helping others by answering questions in pull requests. +- Fixing known [bugs](https://github.com/ghoshRitesh12/aniwatch-api/issues?q=is%3Aopen). + +## Ground Rules & Expectations + +Before we begin, here are a few things we anticipate from you and that you should expect from others: + +- Be respectful and thoughtful in your conversations around this project. Each person may have their own views and opinions about the project. Try to listen to each other and reach an agreement or compromise. + +## How To Contribute + +If you'd like to contribute, start by searching through the [issues](https://github.com/ghoshRitesh12/aniwatch-api/issues) and [pull requests](https://github.com/ghoshRitesh12/aniwatch-api/pulls) to see whether someone else has raised a similar idea or question. + +If you don't see your idea listed, and you think it fits into the goals of this guide, you may do one of the following: + +- **If your contribution is minor,** such as a typo fix or new provider, consider opening a pull request. +- **If your contribution is major,** such as a major refactor, start by opening an issue first. That way, other people can weigh in on the discussion before you do any work. + +## Prerequisites + +To contribute to this project, you must know the following: + +- [NodeJS](https://nodejs.org/) +- [TypeScript](https://www.typescriptlang.org/) +- Web Scraping + - [Cheerio](https://cheerio.js.org/) + - [Axios](https://axios-http.com/docs/intro) + - [CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) + - [Browser Dev Tools](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools) + +### Clone the repository + +1. [Fork the repository](https://github.com/ghoshRitesh12/aniwatch-api/fork) +2. Clone your fork to your local machine using the following command (replace with your actual GitHub username) + +```bash +git clone https://github.com//aniwatch-api +``` + +3. Creating a new branch
+ Replace \ with any of the following naming conventions:
+ - `feature/` - for adding new features + - `bug/` - for fixing known bugs + - `misc/` - for anything other than bug or features + +```bash +git checkout -b +``` + +### Project Structure + +- `src` directory contains all the source code required for this project + + - `controllers` directory contains all the controller logic + - `types` directory contains all types & interfaces used for this project + - `parsers` directory contains all the parsing aka scraping logic + - `routes` directory contains all the routers + - `utils` directory contains handy utility methods and properties + - `config` directory contains api configuration related files + - `extractors` directory contains anime streaming url extractor files +

+ +- `test` directory contains all the tests that needs to be evaluated + +## Commit Messages + +When you've made changes to one or more files, you have to commit that file. You also need a message for that commit. + +We follow [Conventional Commit Messages](https://www.conventionalcommits.org/en/v1.0.0/#summary). + +A brief overview: + +- `feat`: A feature, possibly improving something already existing +- `fix`: A fix, for example of a bug +- `perf`: Performance related change +- `refactor`: Refactoring a specific section of the codebase +- `style`: Everything related to styling code like whitespaces, tabs, indenting, etc. +- `test`: Everything related to testing +- `docs`: Everything related to documentation +- `chore`: Code maintenance + +Examples: + +- `docs: fixed typo in readme` +- `feat: added a new category parser` +- `fix: fixed search results bug` diff --git a/src/special/aniwatch-api-main/Dockerfile b/src/special/aniwatch-api-main/Dockerfile new file mode 100644 index 0000000..755ab99 --- /dev/null +++ b/src/special/aniwatch-api-main/Dockerfile @@ -0,0 +1,58 @@ +# build stage for building .ts files +FROM node:20-alpine as build + +RUN mkdir /home/app + +WORKDIR /home/app + +COPY package.json . + +RUN npm install --ignore-scripts + +COPY . . + +RUN npm run build + +# prod stage for including only necessary files +FROM node:20-alpine as prod + +LABEL org.opencontainers.image.source=https://github.com/ghoshRitesh12/aniwatch-api +LABEL org.opencontainers.image.description="Node.js API for obtaining anime information from aniwatch.to (formerly zoro.to) written in TypeScript, made with Cheerio & Axios" +LABEL org.opencontainers.image.description "Node.js API for obtaining anime information from aniwatch.to (formerly zoro.to) written in TypeScript, made with Cheerio & Axios" +LABEL org.opencontainers.image.licenses=MIT + +# create a non-privileged user +RUN addgroup -S aniwatch && adduser -S zoro -G aniwatch + +# set secure folder permissions +RUN mkdir -p /app/public /app/dist && chown -R zoro:aniwatch /app + +# set non-privileged user +USER zoro + +# set working directory +WORKDIR /app + +# copy config file for better use of layers +COPY --chown=zoro:aniwatch package.json . + +# install dependencies +RUN npm install --omit=dev --ignore-scripts + +# copy public folder from build stage to prod +COPY --from=build --chown=zoro:aniwatch /home/app/public /app/public + +# copy dist folder from build stage to prod +COPY --from=build --chown=zoro:aniwatch /home/app/dist /app/dist + +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s CMD [ "npm", "run", "healthcheck" ] + +ENV NODE_ENV=production +ENV PORT=4000 + +# exposed port +EXPOSE 4000 + +CMD [ "node", "dist/src/server.js" ] + +# exit \ No newline at end of file diff --git a/src/special/aniwatch-api-main/LICENSE b/src/special/aniwatch-api-main/LICENSE new file mode 100644 index 0000000..0909ca6 --- /dev/null +++ b/src/special/aniwatch-api-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Ritesh Ghosh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/src/special/aniwatch-api-main/README.md b/src/special/aniwatch-api-main/README.md new file mode 100644 index 0000000..fe64e58 --- /dev/null +++ b/src/special/aniwatch-api-main/README.md @@ -0,0 +1,1004 @@ +

+ + Logo + +

+ +#

Aniwatch API

+ +
+ A free restful API serving anime information from hianime.to +

+ + + Bug report + + · + + Feature request + + +
+ +
+ +
+ +[![codeql](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/codeql-analysis.yml) +[![docker-build](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/docker-build.yml) +[![test_coverage](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/test.yml/badge.svg)](https://github.com/ghoshRitesh12/aniwatch-api/actions/workflows/test.yml) +[![GitHub License](https://img.shields.io/github/license/ghoshRitesh12/aniwatch-api?logo=github&logoColor=%23959da5&labelColor=%23292e34&color=%2331c754)](https://github.com/ghoshRitesh12/aniwatch-api/blob/main/LICENSE) + +
+ +
+ +[![stars](https://img.shields.io/github/stars/ghoshRitesh12/aniwatch-api?style=social)](https://github.com/ghoshRitesh12/aniwatch-api/stargazers) +[![forks](https://img.shields.io/github/forks/ghoshRitesh12/aniwatch-api?style=social)](https://github.com/ghoshRitesh12/aniwatch-api/network/members) +[![issues](https://img.shields.io/github/issues/ghoshRitesh12/aniwatch-api?style=social&logo=github)](https://github.com/ghoshRitesh12/aniwatch-api/issues?q=is%3Aissue+is%3Aopen+) +[![version](https://img.shields.io/github/v/release/ghoshRitesh12/aniwatch-api?display_name=release&style=social&logo=github)](https://github.com/ghoshRitesh12/aniwatch-api/releases/latest) + +
+ +> [!IMPORTANT] +> +> 1. [https://api-aniwatch.onrender.com](https://api-aniwatch.onrender.com/) is only meant to demo the API and has rate-limiting enabled to minimise bandwidth consumption. It is recommended to deploy your own instance for personal use by customizing the api as you need it to be. +> 2. This API is just an unofficial api for [hianime.to](https://hianime.to) and is in no other way officially related to the same. +> 3. The content that this api provides is not mine, nor is it hosted by me. These belong to their respective owners. This api just demonstrates how to build an api that scrapes websites and uses their content. + +## Table of Contents + +- [Installation](#installation) + - [Local](#local) + - [Docker](#docker) +- [Host your instance](#-host-your-instance) + - [Vercel](#vercel) + - [Render](#render) +- [Documentation](#documentation) + - [GET Anime Home Page](#get-anime-home-page) + - [GET Anime About Info](#get-anime-about-info) + - [GET Search Results](#get-search-results) + - [GET Search Suggestions](#get-search-suggestions) + - [GET Producer Animes](#get-producer-animes) + - [GET Genre Animes](#get-genre-animes) + - [GET Category Anime](#get-category-anime) + - [GET Estimated Schedules](#get-estimated-schedules) + - [GET Anime Episodes](#get-anime-episodes) + - [GET Anime Episode Servers](#get-anime-episode-servers) + - [GET Anime Episode Streaming Links](#get-anime-episode-streaming-links) +- [Development](#development) +- [Contributors](#contributors) +- [Thanks](#thanks) +- [Support](#support) +- [License](#license) +- [Star History](#star-history) + +## 💻 Installation + +### Local + +1. Clone the repository and move into the directory. + + ```bash + git clone https://github.com/ghoshRitesh12/aniwatch-api.git + cd aniwatch-api + ``` + +2. Install all the dependencies. + + ```bash + npm i #or yarn install or pnpm i + ``` + +3. Start the server! + + ```bash + npm start #or yarn start or pnpm start + ``` + + Now the server should be running on [http://localhost:4000](http://localhost:4000) + +### Docker + +Docker image is available at [GitHub Container Registry](https://github.com/ghoshRitesh12/aniwatch-api/pkgs/container/aniwatch). + +Run the following commands to pull and run the docker image. + +```bash +docker pull ghcr.io/ghoshritesh12/aniwatch +docker run -p 4000:4000 ghcr.io/ghoshritesh12/aniwatch +``` + +The above command will start the server on port 4000. You can access the server at [http://localhost:4000](http://localhost:4000) and you can also change the port by changing the `-p` option to `-p :4000`. + +You can also add the `-d` flag to run the container in detached mode. + +## ⛅ Host your instance + +> [!CAUTION] +> +> For personal deployments, **refrain from having an env** named `ANIWATCH_API_HOSTNAME`. You may face rate limitting and other issues if you do. + +### Vercel + +Deploy your own instance of Aniwatch API on Vercel. + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/ghoshRitesh12/aniwatch-api) + +> [!NOTE] +> +> When deploying to vercel, set an env named `IS_VERCEL_DEPLOYMENT` to `true` or anything, but this env should be present. + +### Render + +Deploy your own instance of Aniwatch API on Render. + +[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/ghoshRitesh12/aniwatch-api) + +## 📚 Documentation + +The endpoints exposed by the api are listed below with examples that uses the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API), but you can use any http library. + +### `GET` Anime Home Page + +#### Endpoint + +```bash +https://api-aniwatch.onrender.com/anime/home +``` + +#### Request sample + +```javascript +const resp = await fetch("https://api-aniwatch.onrender.com/anime/home"); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + genres: ["Action", "Cars", "Adventure", ...], + latestEpisodeAnimes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + spotlightAnimes: [ + { + id: string, + name: string, + jname: string, + poster: string, + description: string, + rank: number, + otherInfo: string[], + episodes: { + sub: number, + dub: number, + }, + }, + {...}, + ], + top10Animes: { + today: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + name: string, + poster: string, + rank: number + }, + {...}, + ], + month: [...], + week: [...] + }, + topAiringAnimes: [ + { + id: string, + name: string, + jname: string, + poster: string, + }, + {...}, + ], + topUpcomingAnimes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + trendingAnimes: [ + { + id: string, + name: string, + poster: string, + rank: number, + }, + {...}, + ], +} + +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Anime About Info + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/info?id={anime-id} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :----------------------------------: | :-------: | :-----: | +| `id` | string | The unique anime id (in kebab case). | Yes | -- | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/info?id=attack-on-titan-112" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + anime: [ + info: { + id: string, + name: string, + poster: string, + description: string, + stats: { + rating: string, + quality: string, + episodes: { + sub: number, + dub: number + }, + type: string, + duration: string + }, + promotionalVideos: [ + { + title: string | undefined, + source: string | undefined, + thumbnail: string | undefined + }, + {...}, + ], + characterVoiceActor: [ + { + character: { + id: string, + poster: string, + name: string, + cast: string + }, + voiceActor: { + id: string, + poster: string, + name: string, + cast: string + } + }, + {...}, + ] + } + moreInfo: { + aired: string, + genres: ["Action", "Mystery", ...], + status: string, + studios: string, + duration: string + ... + } + ], + mostPopularAnimes: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + jname: string, + name: string, + poster: string, + type: string + }, + {...}, + ], + recommendedAnimes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + relatedAnimes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + seasons: [ + { + id: string, + name: string, + title: string, + poster: string, + isCurrent: boolean + }, + {...} + ] +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Search Results + +#### Endpoint + +```sh +# basic example +https://api-aniwatch.onrender.com/anime/search?q={query}&page={page} + +# advanced example +https://api-aniwatch.onrender.com/anime/search?q={query}&genres={genres}&type={type}&sort={sort}&season={season}&language={sub_or_dub}&status={status}&rated={rating}&start_date={yyyy-mm-dd}&end_date={yyyy-mm-dd}&score={score} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :----------: | :----: | :---------------------------------------------------------------: | :-------: | :-----: | +| `q` | string | The search query, i.e. the title of the item you are looking for. | Yes | -- | +| `page` | number | The page number of the result. | No | `1` | +| `type` | string | Type of the anime. eg: `movie` | No | -- | +| `status` | string | Status of the anime. eg: `finished-airing` | No | -- | +| `rated` | string | Rating of the anime. eg: `r+` or `pg-13` | No | -- | +| `score` | string | Score of the anime. eg: `good` or `very-good` | No | -- | +| `season` | string | Season of the aired anime. eg: `spring` | No | -- | +| `language` | string | Language category of the anime. eg: `sub` or `sub-&-dub` | No | -- | +| `start_date` | string | Start date of the anime(yyyy-mm-dd). eg: `2014-10-2` | No | -- | +| `end_date` | string | End date of the anime(yyyy-mm-dd). eg: `2010-12-4` | No | -- | +| `sort` | string | Order of sorting the anime result. eg: `recently-added` | No | -- | +| `genres` | string | Genre of the anime, separated by commas. eg: `isekai,shounen` | No | -- | + +> [!TIP] +> For both `start_date` and `end_date`, year must be mentioned. If you wanna omit date or month specify `0` instead. +> Eg: omitting date -> 2014-10-0, omitting month -> 2014-0-12, omitting both -> 2014-0-0 + +#### Request sample + +```javascript +// basic example +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/search?q=titan&page=1" +); +const data = await resp.json(); +console.log(data); + +// advanced example +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/search?q=girls&genres=action,adventure&type=movie&sort=score&season=spring&language=dub&status=finished-airing&rated=pg-13&start_date=2014-0-0&score=good" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + animes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + mostPopularAnimes: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + jname: string, + name: string, + poster: string, + type: string + }, + {...}, + ], + currentPage: 1, + totalPages: 1, + hasNextPage: false, + searchQuery: string, + searchFilters: { + [filter_name]: [filter_value] + ... + } +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Search Suggestions + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/search/suggest?q={query} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :--------------------------: | :-------: | :-----: | +| `q` | string | The search suggestion query. | Yes | -- | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/search/suggest?q=monster" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + suggestions: [ + { + id: string, + name: string, + poster: string, + jname: string, + moreInfo: ["Jan 21, 2022", "Movie", "17m"] + }, + {...}, + ], +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Producer Animes + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/producer/{name}?page={page} +``` + +#### Path Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :-----------------------------------------: | :-------: | :-----: | +| `name` | string | The name of anime producer (in kebab case). | Yes | -- | + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :----------------------------: | :-------: | :-----: | +| `page` | number | The page number of the result. | No | `1` | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/producer/toei-animation?page=2" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + producerName: "Toei Animation Anime", + animes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + top10Animes: { + today: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + name: string, + poster: string, + rank: number + }, + {...}, + ], + month: [...], + week: [...] + }, + topAiringAnimes: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + jname: string, + name: string, + poster: string, + type: string + }, + {...}, + ], + currentPage: 2, + totalPages: 11, + hasNextPage: true, +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Genre Animes + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/genre/{name}?page={page} +``` + +#### Path Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :--------------------------------------: | :-------: | :-----: | +| `name` | string | The name of anime genre (in kebab case). | Yes | -- | + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :----------------------------: | :-------: | :-----: | +| `page` | number | The page number of the result. | No | `1` | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/genre/shounen?page=2" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + genreName: "Shounen Anime", + animes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + genres: ["Action", "Cars", "Adventure", ...], + topAiringAnimes: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + jname: string, + name: string, + poster: string, + type: string + }, + {...}, + ], + currentPage: 2, + totalPages: 38, + hasNextPage: true +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Category Anime + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/{category}?page={page} +``` + +#### Path Parameters + +| Parameter | Type | Description | Required? | Default | +| :--------: | :----: | :--------------------: | :-------: | :-----: | +| `category` | string | The category of anime. | Yes | -- | + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :----------------------------: | :-------: | :-----: | +| `page` | number | The page number of the result. | No | `1` | + +#### Request sample + +```javascript +// categories -> "most-favorite", "most-popular", "subbed-anime", "dubbed-anime", "recently-updated", "recently-added", "top-upcoming", "top-airing", "movie", "special", "ova", "ona", "tv", "completed" + +const resp = await fetch("https://api-aniwatch.onrender.com/anime/tv?page=2"); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + category: "TV Series Anime", + animes: [ + { + id: string, + name: string, + poster: string, + duration: string, + type: string, + rating: string, + episodes: { + sub: number, + dub: number, + } + }, + {...}, + ], + genres: ["Action", "Cars", "Adventure", ...], + top10Animes: { + today: [ + { + episodes: { + sub: number, + dub: number, + }, + id: string, + name: string, + poster: string, + rank: number + }, + {...}, + ], + month: [...], + week: [...] + }, + currentPage: 2, + totalPages: 100, + hasNextPage: true +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Estimated Schedules + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/schedule?date={date} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :-----------------: | :----: | :------------------------------------------------------------------: | :-------: | :-----: | +| `date (yyyy-mm-dd)` | string | The date of the desired schedule. (months & days must have 2 digits) | Yes | -- | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/schedule?date=2023-01-14" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + scheduledAnimes: [ + { + id: string, + time: string, // 24 hours format + name: string, + jname: string, + }, + {...} + ] +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Anime Episodes + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/episodes/{animeId} +``` + +#### Path Parameters + +| Parameter | Type | Description | Required? | Default | +| :-------: | :----: | :------------------: | :-------: | :-----: | +| `animeId` | string | The unique anime id. | Yes | -- | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/episodes/steinsgate-3" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + totalEpisodes: 24, + episodes: [ + { + number: 1, + title: "Turning Point", + episodeId: "steinsgate-3?ep=213" + isFiller: false, + }, + {...} + ] +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Anime Episode Servers + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/servers?episodeId={id} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :---------: | :----: | :--------------------: | :-------: | :-----: | +| `episodeId` | string | The unique episode id. | Yes | -- | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/servers?episodeId=steinsgate-0-92?ep=2055" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + episodeId: "steinsgate-0-92?ep=2055", + episodeNo: 5, + sub: [ + { + serverId: 4, + serverName: "vidstreaming", + }, + {...} + ], + dub: [ + { + serverId: 1, + serverName: "megacloud", + }, + {...} + ], + raw: [ + { + serverId: 1, + serverName: "megacloud", + }, + {...} + ], +} +``` + +[🔼 Back to Top](#table-of-contents) + +### `GET` Anime Episode Streaming Links + +#### Endpoint + +```sh +https://api-aniwatch.onrender.com/anime/episode-srcs?id={episodeId}&server={server}&category={category} +``` + +#### Query Parameters + +| Parameter | Type | Description | Required? | Default | +| :--------: | :----: | :--------------------------------------------------: | :-------: | :--------------: | +| `id` | string | The id of the episode. | Yes | -- | +| `server` | string | The name of the server. | No | `"vidstreaming"` | +| `category` | string | The category of the episode ('sub', 'dub' or 'raw'). | No | `"sub"` | + +#### Request sample + +```javascript +const resp = await fetch( + "https://api-aniwatch.onrender.com/anime/episode-srcs?id=steinsgate-3?ep=230&server=vidstreaming&category=dub" +); +const data = await resp.json(); +console.log(data); +``` + +#### Response Schema + +```javascript +{ + headers: { + Referer: string, + "User-Agent": string, + ... + }, + sources: [ + { + url: string, // .m3u8 hls streaming file + isM3U8: boolean, + quality?: string, + }, + {...} + ], + subtitles: [ + { + lang: "English", + url: string, // .vtt subtitle file + }, + {...} + ], + anilistID: number | null, + malID: number | null, +} +``` + +[🔼 Back to Top](#table-of-contents) + +## 👨‍💻 Development + +Pull requests and stars are always welcome. If you encounter any bug or want to add a new feature to this api, consider creating a new [issue](https://github.com/ghoshRitesh12/aniwatch-api/issues). If you wish to contribute to this project, read the [CONTRIBUTING.md](https://github.com/ghoshRitesh12/aniwatch-api/blob/main/CONTRIBUTING.md) file. + +## ✨ Contributors + +Thanks to the following people for keeping this project alive and relevant. + +[![](https://contrib.rocks/image?repo=ghoshRitesh12/aniwatch-api)](https://github.com/ghoshRitesh12/aniwatch-api/graphs/contributors) + +## 🤝 Thanks + +- [consumet.ts](https://github.com/consumet/consumet.ts) +- [api.consumet.org](https://github.com/consumet/api.consumet.org) + +## 🙌 Support + +Don't forget to leave a star 🌟. You can also follow me on X (Twitter) [@riteshgsh](https://x.com/riteshgsh). + +## 📜 License + +This project is licensed under the [MIT License](https://opensource.org/license/mit/) - see the [LICENSE](https://github.com/ghoshRitesh12/aniwatch-api/blob/main/LICENSE) file for more details. + +
+ + diff --git a/src/special/aniwatch-api-main/api/index.ts b/src/special/aniwatch-api-main/api/index.ts new file mode 100644 index 0000000..be3392b --- /dev/null +++ b/src/special/aniwatch-api-main/api/index.ts @@ -0,0 +1,3 @@ +import app from "../src/server.js"; + +export default app; diff --git a/src/special/aniwatch-api-main/package.json b/src/special/aniwatch-api-main/package.json new file mode 100644 index 0000000..f7cd151 --- /dev/null +++ b/src/special/aniwatch-api-main/package.json @@ -0,0 +1,55 @@ +{ + "name": "aniwatch-api", + "version": "1.34.2", + "description": "Node.js API for obtaining anime information from hianime.to (formerly aniwatch.to) written in TypeScript, made with Cheerio & Axios", + "main": "src/server.ts", + "type": "module", + "scripts": { + "start": "tsx src/server.ts", + "dev": "tsx watch src/server.ts", + "build": "tsc -p tsconfig.json", + "vercel-build": "echo \"Hello\"", + "prepare": "cd ../../../ && husky install", + "test": "vitest run --config vitest.config.ts", + "healthcheck": "curl -f http://localhost:4000/health" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ghoshRitesh12/aniwatch-api.git" + }, + "bugs": { + "url": "https://github.com/ghoshRitesh12/aniwatch-api/issues" + }, + "homepage": "https://github.com/ghoshRitesh12/aniwatch-api#readme", + "keywords": [ + "anime", + "weeb", + "hianime", + "scraper" + ], + "author": "https://github.com/ghoshRitesh12", + "license": "MIT", + "dependencies": { + "axios": "^1.6.5", + "cheerio": "1.0.0-rc.12", + "cors": "^2.8.5", + "crypto-js": "^4.2.0", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "express-rate-limit": "^7.1.5", + "http-errors": "^2.0.0", + "morgan": "^1.10.0" + }, + "devDependencies": { + "@types/cors": "^2.8.17", + "@types/crypto-js": "^4.2.1", + "@types/express": "^4.17.21", + "@types/http-errors": "^2.0.4", + "@types/morgan": "^1.9.9", + "@types/node": "^20.11.5", + "husky": "^8.0.3", + "tsx": "^4.7.0", + "typescript": "^5.3.3", + "vitest": "^1.2.1" + } +} \ No newline at end of file diff --git a/src/special/aniwatch-api-main/public/img/img1.gif b/src/special/aniwatch-api-main/public/img/img1.gif new file mode 100644 index 0000000000000000000000000000000000000000..18a74497d348baede08ea254f0b240d885ab47cd GIT binary patch literal 497535 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

T6cqOTWYSF6aW{Aq+1NCDoRZ+N|!oRWo};^(`@ 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 <0dW`#Fj@(yn`9|_fsp6R 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 `;JW9 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%0Dp`-G4`yAFy~Uks>I_p_Aod;5kmT@O`%vtiZl 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

j}BWNT`itsCo!MRWP|f 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 literal 0 HcmV?d00001 diff --git a/src/special/aniwatch-api-main/public/index.html b/src/special/aniwatch-api-main/public/index.html new file mode 100644 index 0000000..5f8593a --- /dev/null +++ b/src/special/aniwatch-api-main/public/index.html @@ -0,0 +1,103 @@ + + + + + + Aniwatch API + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Welcome to the unofficial + hianime.to (formerly aniwatch.to) + api + ⚔️ +

+ + + + + \ No newline at end of file diff --git a/src/special/aniwatch-api-main/public/robots.txt b/src/special/aniwatch-api-main/public/robots.txt new file mode 100644 index 0000000..fdbb711 --- /dev/null +++ b/src/special/aniwatch-api-main/public/robots.txt @@ -0,0 +1,5 @@ +# START aniwatch-api +Disallow: + +User-agent: * +# END aniwatch-api \ No newline at end of file diff --git a/src/special/aniwatch-api-main/render.yaml b/src/special/aniwatch-api-main/render.yaml new file mode 100644 index 0000000..b23f039 --- /dev/null +++ b/src/special/aniwatch-api-main/render.yaml @@ -0,0 +1,10 @@ +services: + - type: web + name: aniwatch-api + runtime: docker + repo: https://github.com/ghoshRitesh12/aniwatch-api.git + plan: free + branch: main + envVars: + - key: PORT + value: 4000 diff --git a/src/special/aniwatch-api-main/src/config/axios.ts b/src/special/aniwatch-api-main/src/config/axios.ts new file mode 100644 index 0000000..6292e9f --- /dev/null +++ b/src/special/aniwatch-api-main/src/config/axios.ts @@ -0,0 +1,21 @@ +import axios, { AxiosError, type AxiosRequestConfig } from "axios"; +import { + SRC_BASE_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, +} from "../utils/constants.js"; + +const clientConfig: AxiosRequestConfig = { + timeout: 10000, + baseURL: SRC_BASE_URL, + headers: { + Accept: ACCEPT_HEADER, + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + }, +}; + +const client = axios.create(clientConfig); + +export { client, AxiosError }; diff --git a/src/special/aniwatch-api-main/src/config/cors.ts b/src/special/aniwatch-api-main/src/config/cors.ts new file mode 100644 index 0000000..b82f40a --- /dev/null +++ b/src/special/aniwatch-api-main/src/config/cors.ts @@ -0,0 +1,10 @@ +import cors from "cors"; + +const corsConfig = cors({ + origin: "*", + methods: "GET", + credentials: true, + optionsSuccessStatus: 200, +}); + +export default corsConfig; diff --git a/src/special/aniwatch-api-main/src/config/errorHandler.ts b/src/special/aniwatch-api-main/src/config/errorHandler.ts new file mode 100644 index 0000000..560f141 --- /dev/null +++ b/src/special/aniwatch-api-main/src/config/errorHandler.ts @@ -0,0 +1,11 @@ +import type { ErrorRequestHandler } from "express"; + +const errorHandler: ErrorRequestHandler = (error, req, res, next) => { + const status = error?.status || 500; + res.status(status).json({ + status, + message: error?.message || "Something Went Wrong", + }); +}; + +export default errorHandler; diff --git a/src/special/aniwatch-api-main/src/config/notFoundHandler.ts b/src/special/aniwatch-api-main/src/config/notFoundHandler.ts new file mode 100644 index 0000000..a372e8e --- /dev/null +++ b/src/special/aniwatch-api-main/src/config/notFoundHandler.ts @@ -0,0 +1,8 @@ +import type { RequestHandler } from "express"; +import createHttpError from "http-errors"; + +const notFoundHandler: RequestHandler = (req, res, next) => { + return next(createHttpError.NotFound()); +}; + +export default notFoundHandler; diff --git a/src/special/aniwatch-api-main/src/config/ratelimit.ts b/src/special/aniwatch-api-main/src/config/ratelimit.ts new file mode 100644 index 0000000..c5add3f --- /dev/null +++ b/src/special/aniwatch-api-main/src/config/ratelimit.ts @@ -0,0 +1,17 @@ +import { config } from "dotenv"; +import createHttpError from "http-errors"; +import { rateLimit } from "express-rate-limit"; + +config(); + +export const ratelimit = rateLimit({ + windowMs: Number(process.env.WINDOWMS) || 30 * 60 * 1000, + limit: Number(process.env.MAX) || 6, + legacyHeaders: true, + standardHeaders: "draft-7", + handler: function (_, __, next) { + next( + createHttpError.TooManyRequests("Too many API requests, try again later") + ); + }, +}); diff --git a/src/special/aniwatch-api-main/src/controllers/animeAboutInfo.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeAboutInfo.controller.ts new file mode 100644 index 0000000..6d50b50 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeAboutInfo.controller.ts @@ -0,0 +1,31 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeAnimeAboutInfo } from "../parsers/index.js"; +import { type AnimeAboutInfoQueryParams } from "../types/controllers/index.js"; + +// /anime/info?id=${anime-id} +const getAnimeAboutInfo: RequestHandler< + unknown, + Awaited>, + unknown, + AnimeAboutInfoQueryParams +> = async (req, res, next) => { + try { + const animeId = req.query.id + ? decodeURIComponent(req.query.id as string) + : null; + + if (animeId === null) { + throw createHttpError.BadRequest("Anime unique id required"); + } + + const data = await scrapeAnimeAboutInfo(animeId); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeAboutInfo; diff --git a/src/special/aniwatch-api-main/src/controllers/animeCategory.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeCategory.controller.ts new file mode 100644 index 0000000..373b8e3 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeCategory.controller.ts @@ -0,0 +1,39 @@ +import createHttpError from "http-errors"; +import type { RequestHandler } from "express"; +import type { AnimeCategories } from "../types/anime.js"; +import { scrapeAnimeCategory } from "../parsers/index.js"; +import type { + CategoryAnimePathParams, + CategoryAnimeQueryParams, +} from "../types/controllers/index.js"; + +// /anime/:category?page=${page} +const getAnimeCategory: RequestHandler< + CategoryAnimePathParams, + Awaited>, + unknown, + CategoryAnimeQueryParams +> = async (req, res, next) => { + try { + const category = req.params.category + ? decodeURIComponent(req.params.category) + : null; + + const page: number = req.query.page + ? Number(decodeURIComponent(req.query?.page as string)) + : 1; + + if (category === null) { + throw createHttpError.BadRequest("category required"); + } + + const data = await scrapeAnimeCategory(category as AnimeCategories, page); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeCategory; diff --git a/src/special/aniwatch-api-main/src/controllers/animeEpisodeSrcs.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeEpisodeSrcs.controller.ts new file mode 100644 index 0000000..6190ce5 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeEpisodeSrcs.controller.ts @@ -0,0 +1,75 @@ +import axios from "axios"; +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { type CheerioAPI, load } from "cheerio"; +import { scrapeAnimeEpisodeSources } from "../parsers/index.js"; +import { USER_AGENT_HEADER, SRC_BASE_URL } from "../utils/constants.js"; +import { type AnimeServers, Servers } from "../types/anime.js"; +import { type AnimeEpisodeSrcsQueryParams } from "../types/controllers/index.js"; + +type AnilistID = number | null; +type MalID = number | null; + +// /anime/episode-srcs?id=${episodeId}?server=${server}&category=${category (dub or sub)} +const getAnimeEpisodeSources: RequestHandler< + unknown, + Awaited>, + unknown, + AnimeEpisodeSrcsQueryParams +> = async (req, res, next) => { + try { + const episodeId = req.query.id ? decodeURIComponent(req.query.id) : null; + + const server = ( + req.query.server + ? decodeURIComponent(req.query.server) + : Servers.VidStreaming + ) as AnimeServers; + + const category = ( + req.query.category ? decodeURIComponent(req.query.category) : "sub" + ) as "sub" | "dub"; + + if (episodeId === null) { + throw createHttpError.BadRequest("Anime episode id required"); + } + + let malID: MalID; + let anilistID: AnilistID; + const animeURL = new URL(episodeId?.split("?ep=")[0], SRC_BASE_URL)?.href; + + const [episodeSrcData, animeSrc] = await Promise.all([ + scrapeAnimeEpisodeSources(episodeId, server, category), + axios.get(animeURL, { + headers: { + Referer: SRC_BASE_URL, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + }, + }), + ]); + + const $: CheerioAPI = load(animeSrc?.data); + + try { + anilistID = Number( + JSON.parse($("body")?.find("#syncData")?.text())?.anilist_id + ); + malID = Number(JSON.parse($("body")?.find("#syncData")?.text())?.mal_id); + } catch (err) { + anilistID = null; + malID = null; + } + + res.status(200).json({ + ...episodeSrcData, + anilistID, + malID, + }); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeEpisodeSources; diff --git a/src/special/aniwatch-api-main/src/controllers/animeEpisodes.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeEpisodes.controller.ts new file mode 100644 index 0000000..cf815f5 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeEpisodes.controller.ts @@ -0,0 +1,31 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeAnimeEpisodes } from "../parsers/index.js"; +import { type AnimeEpisodePathParams } from "../types/controllers/index.js"; + +// /anime/episodes/${anime-id} +const getAnimeEpisodes: RequestHandler< + AnimeEpisodePathParams, + Awaited>, + unknown, + unknown +> = async (req, res, next) => { + try { + const animeId = req.params.animeId + ? decodeURIComponent(req.params.animeId) + : null; + + if (animeId === null) { + throw createHttpError.BadRequest("Anime Id required"); + } + + const data = await scrapeAnimeEpisodes(animeId); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeEpisodes; diff --git a/src/special/aniwatch-api-main/src/controllers/animeGenre.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeGenre.controller.ts new file mode 100644 index 0000000..486b4c7 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeGenre.controller.ts @@ -0,0 +1,37 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeGenreAnime } from "../parsers/index.js"; +import type { + GenreAnimePathParams, + GenreAnimeQueryParams, +} from "../types/controllers/index.js"; + +// /anime/genre/${name}?page=${page} +const getGenreAnime: RequestHandler< + GenreAnimePathParams, + Awaited>, + unknown, + GenreAnimeQueryParams +> = async (req, res, next) => { + try { + const name: string | null = req.params.name + ? decodeURIComponent(req.params.name as string) + : null; + + const page: number = req.query.page + ? Number(decodeURIComponent(req.query?.page as string)) + : 1; + + if (name === null) { + throw createHttpError.BadRequest("Anime genre required"); + } + + const data = await scrapeGenreAnime(name, page); + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getGenreAnime; diff --git a/src/special/aniwatch-api-main/src/controllers/animeProducer.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeProducer.controller.ts new file mode 100644 index 0000000..3ebcd8a --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeProducer.controller.ts @@ -0,0 +1,37 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeProducerAnimes } from "../parsers/index.js"; +import type { + AnimeProducerPathParams, + AnimeProducerQueryParams, +} from "../types/controllers/index.js"; + +// /anime/producer/${name}?page=${page} +const getProducerAnimes: RequestHandler< + AnimeProducerPathParams, + Awaited>, + unknown, + AnimeProducerQueryParams +> = async (req, res, next) => { + try { + const name: string | null = req.params.name + ? decodeURIComponent(req.params.name as string) + : null; + + const page: number = req.query.page + ? Number(decodeURIComponent(req.query?.page as string)) + : 1; + + if (name === null) { + throw createHttpError.BadRequest("Anime producer name required"); + } + + const data = await scrapeProducerAnimes(name, page); + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getProducerAnimes; diff --git a/src/special/aniwatch-api-main/src/controllers/animeSearch.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeSearch.controller.ts new file mode 100644 index 0000000..8937b0a --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeSearch.controller.ts @@ -0,0 +1,57 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeAnimeSearch } from "../parsers/index.js"; +import type { + SearchFilters, + AnimeSearchQueryParams, +} from "../types/controllers/index.js"; + +const searchFilters: Record = { + filter: true, + type: true, + status: true, + rated: true, + score: true, + season: true, + language: true, + start_date: true, + end_date: true, + sort: true, + genres: true, +} as const; + +// /anime/search?q=${query}&page=${page} +const getAnimeSearch: RequestHandler< + unknown, + Awaited>, + unknown, + AnimeSearchQueryParams +> = async (req, res, next) => { + try { + let { q: query, page, ...filters } = req.query; + + query = query ? decodeURIComponent(query) : undefined; + const pageNo = page ? Number(decodeURIComponent(page as string)) : 1; + + if (query === undefined) { + throw createHttpError.BadRequest("Search keyword required"); + } + + const parsedFilters: SearchFilters = {}; + for (const key in filters) { + if (searchFilters[key]) { + parsedFilters[key as keyof SearchFilters] = + filters[key as keyof SearchFilters]; + } + } + + const data = await scrapeAnimeSearch(query, pageNo, parsedFilters); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeSearch; diff --git a/src/special/aniwatch-api-main/src/controllers/animeSearchSuggestion.controller.ts b/src/special/aniwatch-api-main/src/controllers/animeSearchSuggestion.controller.ts new file mode 100644 index 0000000..ed8784f --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/animeSearchSuggestion.controller.ts @@ -0,0 +1,31 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeAnimeSearchSuggestion } from "../parsers/index.js"; +import { type AnimeSearchSuggestQueryParams } from "../types/controllers/index.js"; + +// /anime/search/suggest?q=${query} +const getAnimeSearchSuggestion: RequestHandler< + unknown, + Awaited>, + unknown, + AnimeSearchSuggestQueryParams +> = async (req, res, next) => { + try { + const query: string | null = req.query.q + ? decodeURIComponent(req.query.q as string) + : null; + + if (query === null) { + throw createHttpError.BadRequest("Search keyword required"); + } + + const data = await scrapeAnimeSearchSuggestion(query); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getAnimeSearchSuggestion; diff --git a/src/special/aniwatch-api-main/src/controllers/episodeServers.controller.ts b/src/special/aniwatch-api-main/src/controllers/episodeServers.controller.ts new file mode 100644 index 0000000..16e1ca5 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/episodeServers.controller.ts @@ -0,0 +1,30 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeEpisodeServers } from "../parsers/index.js"; +import { type EpisodeServersQueryParams } from "../types/controllers/index.js"; + +// /anime/servers?episodeId=${id} +const getEpisodeServers: RequestHandler< + unknown, + Awaited>, + unknown, + EpisodeServersQueryParams +> = async (req, res, next) => { + try { + const episodeId = req.query.episodeId + ? decodeURIComponent(req.query?.episodeId as string) + : null; + + if (episodeId === null) { + throw createHttpError.BadRequest("Episode id required"); + } + + const data = await scrapeEpisodeServers(episodeId); + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getEpisodeServers; diff --git a/src/special/aniwatch-api-main/src/controllers/estimatedSchedule.controller.ts b/src/special/aniwatch-api-main/src/controllers/estimatedSchedule.controller.ts new file mode 100644 index 0000000..fef2516 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/estimatedSchedule.controller.ts @@ -0,0 +1,36 @@ +import createHttpError from "http-errors"; +import { type RequestHandler } from "express"; +import { scrapeEstimatedSchedule } from "../parsers/index.js"; +import { type EstimatedScheduleQueryParams } from "../types/controllers/index.js"; + +// /anime/schedule?date=${date} +const getEstimatedSchedule: RequestHandler< + unknown, + Awaited>, + unknown, + EstimatedScheduleQueryParams +> = async (req, res, next) => { + try { + const dateQuery = req.query.date + ? decodeURIComponent(req.query.date as string) + : null; + + if (dateQuery === null) { + throw createHttpError.BadRequest("Date payload required"); + } + if (!/^\d{4}-\d{2}-\d{2}$/.test(dateQuery)) { + throw createHttpError.BadRequest( + "Invalid date payload format. Months and days must have 2 digits" + ); + } + + const data = await scrapeEstimatedSchedule(dateQuery); + + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getEstimatedSchedule; diff --git a/src/special/aniwatch-api-main/src/controllers/homePage.controller.ts b/src/special/aniwatch-api-main/src/controllers/homePage.controller.ts new file mode 100644 index 0000000..36e1fe9 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/homePage.controller.ts @@ -0,0 +1,18 @@ +import { type RequestHandler } from "express"; +import { scrapeHomePage } from "../parsers/index.js"; + +// /anime/home +const getHomePageInfo: RequestHandler< + unknown, + Awaited> +> = async (req, res, next) => { + try { + const data = await scrapeHomePage(); + res.status(200).json(data); + } catch (err: any) { + console.error(err); + next(err); + } +}; + +export default getHomePageInfo; diff --git a/src/special/aniwatch-api-main/src/controllers/index.ts b/src/special/aniwatch-api-main/src/controllers/index.ts new file mode 100644 index 0000000..6e90440 --- /dev/null +++ b/src/special/aniwatch-api-main/src/controllers/index.ts @@ -0,0 +1,25 @@ +import getGenreAnime from "./animeGenre.controller.js"; +import getHomePageInfo from "./homePage.controller.js"; +import getAnimeSearch from "./animeSearch.controller.js"; +import getAnimeEpisodes from "./animeEpisodes.controller.js"; +import getAnimeCategory from "./animeCategory.controller.js"; +import getProducerAnimes from "./animeProducer.controller.js"; +import getEpisodeServers from "./episodeServers.controller.js"; +import getAnimeAboutInfo from "./animeAboutInfo.controller.js"; +import getEstimatedSchedule from "./estimatedSchedule.controller.js"; +import getAnimeEpisodeSources from "./animeEpisodeSrcs.controller.js"; +import getAnimeSearchSuggestion from "./animeSearchSuggestion.controller.js"; + +export { + getGenreAnime, + getAnimeSearch, + getHomePageInfo, + getAnimeEpisodes, + getAnimeCategory, + getEpisodeServers, + getProducerAnimes, + getAnimeAboutInfo, + getEstimatedSchedule, + getAnimeEpisodeSources, + getAnimeSearchSuggestion, +}; diff --git a/src/special/aniwatch-api-main/src/extractors/index.ts b/src/special/aniwatch-api-main/src/extractors/index.ts new file mode 100644 index 0000000..788dc8c --- /dev/null +++ b/src/special/aniwatch-api-main/src/extractors/index.ts @@ -0,0 +1,6 @@ +import StreamSB from "./streamsb.js"; +import StreamTape from "./streamtape.js"; +import RapidCloud from "./rapidcloud.js"; +import MegaCloud from "./megacloud.js"; + +export { StreamSB, StreamTape, RapidCloud, MegaCloud }; diff --git a/src/special/aniwatch-api-main/src/extractors/megacloud.ts b/src/special/aniwatch-api-main/src/extractors/megacloud.ts new file mode 100644 index 0000000..bbed720 --- /dev/null +++ b/src/special/aniwatch-api-main/src/extractors/megacloud.ts @@ -0,0 +1,226 @@ +import axios from "axios"; +import crypto from "crypto"; +import createHttpError from "http-errors"; + +// https://megacloud.tv/embed-2/e-1/dBqCr5BcOhnD?k=1 + +const megacloud = { + script: "https://megacloud.tv/js/player/a/prod/e1-player.min.js?v=", + sources: "https://megacloud.tv/embed-2/ajax/e-1/getSources?id=", +} as const; + +type track = { + file: string; + kind: string; + label?: string; + default?: boolean; +}; + +type intro_outro = { + start: number; + end: number; +}; + +type unencryptedSrc = { + file: string; + type: string; +}; + +type extractedSrc = { + sources: string | unencryptedSrc[]; + tracks: track[]; + encrypted: boolean; + intro: intro_outro; + outro: intro_outro; + server: number; +}; + +interface ExtractedData + extends Pick { + sources: { url: string; type: string }[]; +} + +class MegaCloud { + private serverName = "megacloud"; + + async extract(videoUrl: URL) { + try { + const extractedData: ExtractedData = { + tracks: [], + intro: { + start: 0, + end: 0, + }, + outro: { + start: 0, + end: 0, + }, + sources: [], + }; + + const videoId = videoUrl?.href?.split("/")?.pop()?.split("?")[0]; + const { data: srcsData } = await axios.get( + megacloud.sources.concat(videoId || ""), + { + headers: { + Accept: "*/*", + "X-Requested-With": "XMLHttpRequest", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", + Referer: videoUrl.href, + }, + } + ); + if (!srcsData) { + throw createHttpError.NotFound("Url may have an invalid video id"); + } + + // console.log(JSON.stringify(srcsData, null, 2)); + + const encryptedString = srcsData.sources; + if (!srcsData.encrypted && Array.isArray(encryptedString)) { + extractedData.intro = srcsData.intro; + extractedData.outro = srcsData.outro; + extractedData.tracks = srcsData.tracks; + extractedData.sources = encryptedString.map((s) => ({ + url: s.file, + type: s.type, + })); + + return extractedData; + } + + let text: string; + const { data } = await axios.get( + megacloud.script.concat(Date.now().toString()) + ); + + text = data; + if (!text) { + throw createHttpError.InternalServerError( + "Couldn't fetch script to decrypt resource" + ); + } + + const vars = this.extractVariables(text); + if (!vars.length) { + throw new Error("Can't find variables. Perhaps the extractor is outdated."); + } + + const { secret, encryptedSource } = this.getSecret( + encryptedString as string, + vars + ); + const decrypted = this.decrypt(encryptedSource, secret); + try { + const sources = JSON.parse(decrypted); + extractedData.intro = srcsData.intro; + extractedData.outro = srcsData.outro; + extractedData.tracks = srcsData.tracks; + extractedData.sources = sources.map((s: any) => ({ + url: s.file, + type: s.type, + })); + + return extractedData; + } catch (error) { + throw createHttpError.InternalServerError("Failed to decrypt resource"); + } + } catch (err) { + // console.log(err); + throw err; + } + } + + extractVariables(text: string) { + // copied from github issue #30 'https://github.com/ghoshRitesh12/aniwatch-api/issues/30' + const regex = + /case\s*0x[0-9a-f]+:(?![^;]*=partKey)\s*\w+\s*=\s*(\w+)\s*,\s*\w+\s*=\s*(\w+);/g; + const matches = text.matchAll(regex); + const vars = Array.from(matches, (match) => { + const matchKey1 = this.matchingKey(match[1], text); + const matchKey2 = this.matchingKey(match[2], text); + try { + return [parseInt(matchKey1, 16), parseInt(matchKey2, 16)]; + } catch (e) { + return []; + } + }).filter((pair) => pair.length > 0); + + return vars; + } + + getSecret(encryptedString: string, values: number[][]) { + let secret = "", + encryptedSource = "", + encryptedSourceArray = encryptedString.split(""), + currentIndex = 0; + + for (const index of values) { + const start = index[0] + currentIndex; + const end = start + index[1]; + + for (let i = start; i < end; i++) { + secret += encryptedString[i]; + encryptedSourceArray[i] = ""; + } + currentIndex += index[1]; + } + + encryptedSource = encryptedSourceArray.join(""); + + return { secret, encryptedSource }; + } + + decrypt(encrypted: string, keyOrSecret: string, maybe_iv?: string) { + let key; + let iv; + let contents; + if (maybe_iv) { + key = keyOrSecret; + iv = maybe_iv; + contents = encrypted; + } else { + // copied from 'https://github.com/brix/crypto-js/issues/468' + const cypher = Buffer.from(encrypted, "base64"); + const salt = cypher.subarray(8, 16); + const password = Buffer.concat([ + Buffer.from(keyOrSecret, "binary"), + salt, + ]); + const md5Hashes = []; + let digest = password; + for (let i = 0; i < 3; i++) { + md5Hashes[i] = crypto.createHash("md5").update(digest).digest(); + digest = Buffer.concat([md5Hashes[i], password]); + } + key = Buffer.concat([md5Hashes[0], md5Hashes[1]]); + iv = md5Hashes[2]; + contents = cypher.subarray(16); + } + + const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv); + const decrypted = + decipher.update( + contents as any, + typeof contents === "string" ? "base64" : undefined, + "utf8" + ) + decipher.final(); + + return decrypted; + } + + // function copied from github issue #30 'https://github.com/ghoshRitesh12/aniwatch-api/issues/30' + matchingKey(value: string, script: string) { + const regex = new RegExp(`,${value}=((?:0x)?([0-9a-fA-F]+))`); + const match = script.match(regex); + if (match) { + return match[1].replace(/^0x/, ""); + } else { + throw new Error("Failed to match the key"); + } + } + +} + +export default MegaCloud; diff --git a/src/special/aniwatch-api-main/src/extractors/rapidcloud.ts b/src/special/aniwatch-api-main/src/extractors/rapidcloud.ts new file mode 100644 index 0000000..8073c8b --- /dev/null +++ b/src/special/aniwatch-api-main/src/extractors/rapidcloud.ts @@ -0,0 +1,166 @@ +import axios from "axios"; +import CryptoJS from "crypto-js"; +import { substringAfter, substringBefore } from "../utils/index.js"; +import type { Video, Subtitle, Intro } from "../types/extractor.js"; + +type extractReturn = { + sources: Video[]; + subtitles: Subtitle[]; +}; + +// https://megacloud.tv/embed-2/e-1/IxJ7GjGVCyml?k=1 +class RapidCloud { + private serverName = "RapidCloud"; + private sources: Video[] = []; + + // https://rapid-cloud.co/embed-6/eVZPDXwVfrY3?vast=1 + private readonly fallbackKey = "c1d17096f2ca11b7"; + private readonly host = "https://rapid-cloud.co"; + + async extract(videoUrl: URL): Promise { + const result: extractReturn & { intro?: Intro; outro?: Intro } = { + sources: [], + subtitles: [], + }; + + try { + const id = videoUrl.href.split("/").pop()?.split("?")[0]; + const options = { + headers: { + "X-Requested-With": "XMLHttpRequest", + }, + }; + + let res = null; + + res = await axios.get( + `https://${videoUrl.hostname}/embed-2/ajax/e-1/getSources?id=${id}`, + options + ); + + let { + data: { sources, tracks, intro, outro, encrypted }, + } = res; + + let decryptKey = await ( + await axios.get( + "https://raw.githubusercontent.com/cinemaxhq/keys/e1/key" + ) + ).data; + + decryptKey = substringBefore( + substringAfter(decryptKey, '"blob-code blob-code-inner js-file-line">'), + "" + ); + + if (!decryptKey) { + decryptKey = await ( + await axios.get( + "https://raw.githubusercontent.com/cinemaxhq/keys/e1/key" + ) + ).data; + } + + if (!decryptKey) decryptKey = this.fallbackKey; + + try { + if (encrypted) { + const sourcesArray = sources.split(""); + let extractedKey = ""; + let currentIndex = 0; + + for (const index of decryptKey) { + const start = index[0] + currentIndex; + const end = start + index[1]; + + for (let i = start; i < end; i++) { + extractedKey += res.data.sources[i]; + sourcesArray[i] = ""; + } + currentIndex += index[1]; + } + + decryptKey = extractedKey; + sources = sourcesArray.join(""); + + const decrypt = CryptoJS.AES.decrypt(sources, decryptKey); + sources = JSON.parse(decrypt.toString(CryptoJS.enc.Utf8)); + } + } catch (err: any) { + console.log(err.message); + throw new Error("Cannot decrypt sources. Perhaps the key is invalid."); + } + + this.sources = sources?.map((s: any) => ({ + url: s.file, + isM3U8: s.file.includes(".m3u8"), + })); + + result.sources.push(...this.sources); + + if (videoUrl.href.includes(new URL(this.host).host)) { + result.sources = []; + this.sources = []; + + for (const source of sources) { + const { data } = await axios.get(source.file, options); + const m3u8data = data + .split("\n") + .filter( + (line: string) => + line.includes(".m3u8") && line.includes("RESOLUTION=") + ); + + const secondHalf = m3u8data.map((line: string) => + line.match(/RESOLUTION=.*,(C)|URI=.*/g)?.map((s) => s.split("=")[1]) + ); + + const TdArray = secondHalf.map((s: string[]) => { + const f1 = s[0].split(",C")[0]; + const f2 = s[1].replace(/"/g, ""); + + return [f1, f2]; + }); + + for (const [f1, f2] of TdArray) { + this.sources.push({ + url: `${source.file?.split("master.m3u8")[0]}${f2.replace( + "iframes", + "index" + )}`, + quality: f1.split("x")[1] + "p", + isM3U8: f2.includes(".m3u8"), + }); + } + result.sources.push(...this.sources); + } + } + + result.intro = + intro?.end > 1 ? { start: intro.start, end: intro.end } : undefined; + result.outro = + outro?.end > 1 ? { start: outro.start, end: outro.end } : undefined; + + result.sources.push({ + url: sources[0].file, + isM3U8: sources[0].file.includes(".m3u8"), + quality: "auto", + }); + + result.subtitles = tracks + .map((s: any) => + s.file + ? { url: s.file, lang: s.label ? s.label : "Thumbnails" } + : null + ) + .filter((s: any) => s); + + return result; + } catch (err: any) { + console.log(err.message); + throw err; + } + } +} + +export default RapidCloud; diff --git a/src/special/aniwatch-api-main/src/extractors/streamsb.ts b/src/special/aniwatch-api-main/src/extractors/streamsb.ts new file mode 100644 index 0000000..3eeaabe --- /dev/null +++ b/src/special/aniwatch-api-main/src/extractors/streamsb.ts @@ -0,0 +1,83 @@ +import axios from "axios"; +import type { Video } from "../types/extractor.js"; +import { USER_AGENT_HEADER } from "../utils/index.js"; + +class StreamSB { + private serverName = "streamSB"; + private sources: Video[] = []; + + private readonly host = "https://watchsb.com/sources50"; + private readonly host2 = "https://streamsss.net/sources16"; + + private PAYLOAD(hex: string): string { + // `5363587530696d33443675687c7c${hex}7c7c433569475830474c497a65767c7c73747265616d7362`; + return `566d337678566f743674494a7c7c${hex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362`; + } + + async extract(videoUrl: URL, isAlt: boolean = false): Promise { + let headers: Record = { + watchsb: "sbstream", + Referer: videoUrl.href, + "User-Agent": USER_AGENT_HEADER, + }; + let id = videoUrl.href.split("/e/").pop(); + if (id?.includes("html")) { + id = id.split(".html")[0]; + } + const bytes = new TextEncoder().encode(id); + + const res = await axios + .get( + `${isAlt ? this.host2 : this.host}/${this.PAYLOAD( + Buffer.from(bytes).toString("hex") + )}`, + { headers } + ) + .catch(() => null); + + if (!res?.data.stream_data) { + throw new Error("No source found. Try a different server"); + } + + headers = { + "User-Agent": USER_AGENT_HEADER, + Referer: videoUrl.href.split("e/")[0], + }; + + const m3u8_urls = await axios.get(res.data.stream_data.file, { + headers, + }); + + const videoList = m3u8_urls?.data?.split("#EXT-X-STREAM-INF:") ?? []; + + for (const video of videoList) { + if (!video.includes("m3u8")) continue; + + const url = video.split("\n")[1]; + const quality = video.split("RESOLUTION=")[1].split(",")[0].split("x")[1]; + + this.sources.push({ + url: url, + quality: `${quality}p`, + isM3U8: true, + }); + } + + this.sources.push({ + url: res.data.stream_data.file, + quality: "auto", + isM3U8: res.data.stream_data.file.includes(".m3u8"), + }); + + return this.sources; + } + + private addSources(source: any): void { + this.sources.push({ + url: source.file, + isM3U8: source.file.includes(".m3u8"), + }); + } +} + +export default StreamSB; diff --git a/src/special/aniwatch-api-main/src/extractors/streamtape.ts b/src/special/aniwatch-api-main/src/extractors/streamtape.ts new file mode 100644 index 0000000..69910ce --- /dev/null +++ b/src/special/aniwatch-api-main/src/extractors/streamtape.ts @@ -0,0 +1,37 @@ +import axios from "axios"; +import { load, type CheerioAPI } from "cheerio"; +import type { Video } from "../types/extractor.js"; + +class StreamTape { + private serverName = "StreamTape"; + private sources: Video[] = []; + + async extract(videoUrl: URL): Promise { + try { + const { data } = await axios.get(videoUrl.href).catch(() => { + throw new Error("Video not found"); + }); + + const $: CheerioAPI = load(data); + + let [fh, sh] = $.html() + ?.match(/robotlink'\).innerHTML = (.*)'/)![1] + .split("+ ('"); + + sh = sh.substring(3); + fh = fh.replace(/\'/g, ""); + + const url = `https:${fh}${sh}`; + + this.sources.push({ + url: url, + isM3U8: url.includes(".m3u8"), + }); + + return this.sources; + } catch (err) { + throw new Error((err as Error).message); + } + } +} +export default StreamTape; diff --git a/src/special/aniwatch-api-main/src/parsers/animeAboutInfo.ts b/src/special/aniwatch-api-main/src/parsers/animeAboutInfo.ts new file mode 100644 index 0000000..f92b0fc --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeAboutInfo.ts @@ -0,0 +1,229 @@ +import { + SRC_BASE_URL, + extractAnimes, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, + extractMostPopularAnimes, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import { type ScrapedAnimeAboutInfo } from "../types/parsers/index.js"; + +// /anime/info?id=${anime-id} +async function scrapeAnimeAboutInfo( + id: string +): Promise { + const res: ScrapedAnimeAboutInfo = { + anime: { + info: { + id: null, + anilistId: null, + malId: null, + name: null, + poster: null, + description: null, + stats: { + rating: null, + quality: null, + episodes: { + sub: null, + dub: null, + }, + type: null, + duration: null, + }, + promotionalVideos: [], + charactersVoiceActors: [], + }, + moreInfo: {}, + }, + seasons: [], + mostPopularAnimes: [], + relatedAnimes: [], + recommendedAnimes: [], + }; + + try { + const animeUrl: URL = new URL(id, SRC_BASE_URL); + const mainPage = await axios.get(animeUrl.href, { + headers: { + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Accept: ACCEPT_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + try { + res.anime.info.anilistId = Number( + JSON.parse($("body")?.find("#syncData")?.text())?.anilist_id + ); + res.anime.info.malId = Number(JSON.parse($("body")?.find("#syncData")?.text())?.mal_id); + } catch (err) { + res.anime.info.anilistId = null; + res.anime.info.malId = null; + } + + const selector: SelectorType = "#ani_detail .container .anis-content"; + + res.anime.info.id = + $(selector) + ?.find(".anisc-detail .film-buttons a.btn-play") + ?.attr("href") + ?.split("/") + ?.pop() || null; + res.anime.info.name = + $(selector) + ?.find(".anisc-detail .film-name.dynamic-name") + ?.text() + ?.trim() || null; + res.anime.info.description = + $(selector) + ?.find(".anisc-detail .film-description .text") + .text() + ?.split("[") + ?.shift() + ?.trim() || null; + res.anime.info.poster = + $(selector)?.find(".film-poster .film-poster-img")?.attr("src")?.trim() || + null; + + // stats + res.anime.info.stats.rating = + $(`${selector} .film-stats .tick .tick-pg`)?.text()?.trim() || null; + res.anime.info.stats.quality = + $(`${selector} .film-stats .tick .tick-quality`)?.text()?.trim() || null; + res.anime.info.stats.episodes = { + sub: + Number($(`${selector} .film-stats .tick .tick-sub`)?.text()?.trim()) || + null, + dub: + Number($(`${selector} .film-stats .tick .tick-dub`)?.text()?.trim()) || + null, + }; + res.anime.info.stats.type = + $(`${selector} .film-stats .tick`) + ?.text() + ?.trim() + ?.replace(/[\s\n]+/g, " ") + ?.split(" ") + ?.at(-2) || null; + res.anime.info.stats.duration = + $(`${selector} .film-stats .tick`) + ?.text() + ?.trim() + ?.replace(/[\s\n]+/g, " ") + ?.split(" ") + ?.pop() || null; + + // get promotional videos + $(".block_area.block_area-promotions .block_area-promotions-list .screen-items .item").each( + (_, el) => { + res.anime.info.promotionalVideos.push({ + title: $(el).attr("data-title"), + source: $(el).attr("data-src"), + thumbnail: $(el).find("img").attr("src"), + }); + } + ); + + // get characters and voice actors + $(".block_area.block_area-actors .block-actors-content .bac-list-wrap .bac-item").each( + (_, el) => { + res.anime.info.charactersVoiceActors.push({ + character: { + id: $(el).find($(".per-info.ltr .pi-avatar")).attr("href")?.split("/")[2] || "", + poster: $(el).find($(".per-info.ltr .pi-avatar img")).attr("data-src") || "", + name: $(el).find($(".per-info.ltr .pi-detail a")).text(), + cast: $(el).find($(".per-info.ltr .pi-detail .pi-cast")).text(), + }, + voiceActor: { + id: $(el).find($(".per-info.rtl .pi-avatar")).attr("href")?.split("/")[2] || "", + poster: $(el).find($(".per-info.rtl .pi-avatar img")).attr("data-src") || "", + name: $(el).find($(".per-info.rtl .pi-detail a")).text(), + cast: $(el).find($(".per-info.rtl .pi-detail .pi-cast")).text(), + }, + }); + } + ); + + // more information + $(`${selector} .anisc-info-wrap .anisc-info .item:not(.w-hide)`).each( + (i, el) => { + let key = $(el) + .find(".item-head") + .text() + .toLowerCase() + .replace(":", "") + .trim(); + key = key.includes(" ") ? key.replace(" ", "") : key; + + const value = [ + ...$(el) + .find("*:not(.item-head)") + .map((i, el) => $(el).text().trim()), + ] + .map((i) => `${i}`) + .toString() + .trim(); + + if (key === "genres") { + res.anime.moreInfo[key] = value.split(",").map((i) => i.trim()); + return; + } + if (key === "producers") { + res.anime.moreInfo[key] = value.split(",").map((i) => i.trim()); + return; + } + res.anime.moreInfo[key] = value; + } + ); + + // more seasons + const seasonsSelector: SelectorType = "#main-content .os-list a.os-item"; + $(seasonsSelector).each((i, el) => { + res.seasons.push({ + id: $(el)?.attr("href")?.slice(1)?.trim() || null, + name: $(el)?.attr("title")?.trim() || null, + title: $(el)?.find(".title")?.text()?.trim(), + poster: + $(el) + ?.find(".season-poster") + ?.attr("style") + ?.split(" ") + ?.pop() + ?.split("(") + ?.pop() + ?.split(")")[0] || null, + isCurrent: $(el).hasClass("active"), + }); + }); + + const relatedAnimeSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-realtime:nth-of-type(1) .anif-block-ul ul li"; + res.relatedAnimes = extractMostPopularAnimes($, relatedAnimeSelector); + + const mostPopularSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-realtime:nth-of-type(2) .anif-block-ul ul li"; + res.mostPopularAnimes = extractMostPopularAnimes($, mostPopularSelector); + + const recommendedAnimeSelector: SelectorType = + "#main-content .block_area.block_area_category .tab-content .flw-item"; + res.recommendedAnimes = extractAnimes($, recommendedAnimeSelector); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeAboutInfo; diff --git a/src/special/aniwatch-api-main/src/parsers/animeCategory.ts b/src/special/aniwatch-api-main/src/parsers/animeCategory.ts new file mode 100644 index 0000000..c79fcc7 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeCategory.ts @@ -0,0 +1,118 @@ +import { + SRC_BASE_URL, + extractAnimes, + ACCEPT_HEADER, + USER_AGENT_HEADER, + extractTop10Animes, + ACCEPT_ENCODING_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import { type AnimeCategories } from "../types/anime.js"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import { type ScrapedAnimeCategory } from "../types/parsers/index.js"; + +// /anime/:category?page=${page} +async function scrapeAnimeCategory( + category: AnimeCategories, + page: number = 1 +): Promise { + const res: ScrapedAnimeCategory = { + animes: [], + genres: [], + top10Animes: { + today: [], + week: [], + month: [], + }, + category, + currentPage: Number(page), + hasNextPage: false, + totalPages: 1, + }; + + try { + const scrapeUrl: URL = new URL(category, SRC_BASE_URL); + const mainPage = await axios.get(`${scrapeUrl}?page=${page}`, { + headers: { + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Accept: ACCEPT_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + const selector: SelectorType = + "#main-content .tab-content .film_list-wrap .flw-item"; + + const categoryNameSelector: SelectorType = + "#main-content .block_area .block_area-header .cat-heading"; + res.category = $(categoryNameSelector)?.text()?.trim() ?? category; + + res.hasNextPage = + $(".pagination > li").length > 0 + ? $(".pagination li.active").length > 0 + ? $(".pagination > li").last().hasClass("active") + ? false + : true + : false + : false; + + res.totalPages = + Number( + $('.pagination > .page-item a[title="Last"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $('.pagination > .page-item a[title="Next"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $(".pagination > .page-item.active a")?.text()?.trim() + ) || 1; + + res.animes = extractAnimes($, selector); + + if (res.animes.length === 0 && !res.hasNextPage) { + res.totalPages = 0; + } + + const genreSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-genres .sb-genre-list li"; + $(genreSelector).each((i, el) => { + res.genres.push(`${$(el).text().trim()}`); + }); + + const top10AnimeSelector: SelectorType = + '#main-sidebar .block_area-realtime [id^="top-viewed-"]'; + + $(top10AnimeSelector).each((i, el) => { + const period = $(el).attr("id")?.split("-")?.pop()?.trim(); + + if (period === "day") { + res.top10Animes.today = extractTop10Animes($, period); + return; + } + if (period === "week") { + res.top10Animes.week = extractTop10Animes($, period); + return; + } + if (period === "month") { + res.top10Animes.month = extractTop10Animes($, period); + } + }); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeCategory; diff --git a/src/special/aniwatch-api-main/src/parsers/animeEpisodeSrcs.ts b/src/special/aniwatch-api-main/src/parsers/animeEpisodeSrcs.ts new file mode 100644 index 0000000..913c535 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeEpisodeSrcs.ts @@ -0,0 +1,129 @@ +import { + SRC_AJAX_URL, + SRC_BASE_URL, + retrieveServerId, + USER_AGENT_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import { load, type CheerioAPI } from "cheerio"; +import createHttpError, { type HttpError } from "http-errors"; +import { type AnimeServers, Servers } from "../types/anime.js"; +import { + RapidCloud, + StreamSB, + StreamTape, + MegaCloud, +} from "../extractors/index.js"; +import { type ScrapedAnimeEpisodesSources } from "../types/parsers/index.js"; + +// vidtreaming -> 4 +// rapidcloud -> 1 +// streamsb -> 5 +// streamtape -> 3 + +// /anime/episode-srcs?id=${episodeId}?server=${server}&category=${category (dub or sub)} +async function scrapeAnimeEpisodeSources( + episodeId: string, + server: AnimeServers = Servers.VidStreaming, + category: "sub" | "dub" | "raw" = "sub" +): Promise { + if (episodeId.startsWith("http")) { + const serverUrl = new URL(episodeId); + switch (server) { + case Servers.VidStreaming: + case Servers.VidCloud: + return { + ...(await new MegaCloud().extract(serverUrl)), + }; + case Servers.StreamSB: + return { + headers: { + Referer: serverUrl.href, + watchsb: "streamsb", + "User-Agent": USER_AGENT_HEADER, + }, + sources: await new StreamSB().extract(serverUrl, true), + }; + case Servers.StreamTape: + return { + headers: { Referer: serverUrl.href, "User-Agent": USER_AGENT_HEADER }, + sources: await new StreamTape().extract(serverUrl), + }; + default: // vidcloud + return { + headers: { Referer: serverUrl.href }, + ...(await new RapidCloud().extract(serverUrl)), + }; + } + } + + const epId = new URL(`/watch/${episodeId}`, SRC_BASE_URL).href; + console.log(epId); + + try { + const resp = await axios.get( + `${SRC_AJAX_URL}/v2/episode/servers?episodeId=${epId.split("?ep=")[1]}`, + { + headers: { + Referer: epId, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + }, + } + ); + + const $: CheerioAPI = load(resp.data.html); + + let serverId: string | null = null; + + try { + console.log("THE SERVER: ", server); + + switch (server) { + case Servers.VidCloud: { + serverId = retrieveServerId($, 1, category); + if (!serverId) throw new Error("RapidCloud not found"); + break; + } + case Servers.VidStreaming: { + serverId = retrieveServerId($, 4, category); + console.log("SERVER_ID: ", serverId); + if (!serverId) throw new Error("VidStreaming not found"); + break; + } + case Servers.StreamSB: { + serverId = retrieveServerId($, 5, category); + if (!serverId) throw new Error("StreamSB not found"); + break; + } + case Servers.StreamTape: { + serverId = retrieveServerId($, 3, category); + if (!serverId) throw new Error("StreamTape not found"); + break; + } + } + } catch (err) { + throw createHttpError.NotFound( + "Couldn't find server. Try another server" + ); + } + + const { + data: { link }, + } = await axios.get(`${SRC_AJAX_URL}/v2/episode/sources?id=${serverId}`); + console.log("THE LINK: ", link); + + return await scrapeAnimeEpisodeSources(link, server); + } catch (err: any) { + console.log(err); + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeEpisodeSources; diff --git a/src/special/aniwatch-api-main/src/parsers/animeEpisodes.ts b/src/special/aniwatch-api-main/src/parsers/animeEpisodes.ts new file mode 100644 index 0000000..41ac942 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeEpisodes.ts @@ -0,0 +1,61 @@ +import { + SRC_BASE_URL, + SRC_AJAX_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import { load, type CheerioAPI } from "cheerio"; +import createHttpError, { type HttpError } from "http-errors"; +import { type ScrapedAnimeEpisodes } from "../types/parsers/index.js"; + +// /anime/episodes/${anime-id} +async function scrapeAnimeEpisodes( + animeId: string +): Promise { + const res: ScrapedAnimeEpisodes = { + totalEpisodes: 0, + episodes: [], + }; + + try { + const episodesAjax = await axios.get( + `${SRC_AJAX_URL}/v2/episode/list/${animeId.split("-").pop()}`, + { + headers: { + Accept: ACCEPT_HEADER, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Referer: `${SRC_BASE_URL}/watch/${animeId}`, + }, + } + ); + + const $: CheerioAPI = load(episodesAjax.data.html); + + res.totalEpisodes = Number($(".detail-infor-content .ss-list a").length); + + $(".detail-infor-content .ss-list a").each((i, el) => { + res.episodes.push({ + title: $(el)?.attr("title")?.trim() || null, + episodeId: $(el)?.attr("href")?.split("/")?.pop() || null, + number: Number($(el).attr("data-number")), + isFiller: $(el).hasClass("ssl-item-filler"), + }); + }); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeEpisodes; diff --git a/src/special/aniwatch-api-main/src/parsers/animeGenre.ts b/src/special/aniwatch-api-main/src/parsers/animeGenre.ts new file mode 100644 index 0000000..110398d --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeGenre.ts @@ -0,0 +1,105 @@ +import { + SRC_BASE_URL, + ACCEPT_HEADER, + extractAnimes, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, + extractMostPopularAnimes, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import type { ScrapedGenreAnime } from "../types/parsers/index.js"; + +// /anime/genre/${name}?page=${page} +async function scrapeGenreAnime( + genreName: string, + page: number = 1 +): Promise { + const res: ScrapedGenreAnime = { + genreName, + animes: [], + genres: [], + topAiringAnimes: [], + totalPages: 1, + hasNextPage: false, + currentPage: Number(page), + }; + + // there's a typo with zoro where martial arts is marial arts + genreName = genreName === "martial-arts" ? "marial-arts" : genreName; + + try { + const genreUrl: URL = new URL( + `/genre/${genreName}?page=${page}`, + SRC_BASE_URL + ); + + const mainPage = await axios.get(genreUrl.href, { + headers: { + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Accept: ACCEPT_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + const selector: SelectorType = + "#main-content .tab-content .film_list-wrap .flw-item"; + + const genreNameSelector: SelectorType = + "#main-content .block_area .block_area-header .cat-heading"; + res.genreName = $(genreNameSelector)?.text()?.trim() ?? genreName; + + res.hasNextPage = + $(".pagination > li").length > 0 + ? $(".pagination li.active").length > 0 + ? $(".pagination > li").last().hasClass("active") + ? false + : true + : false + : false; + + res.totalPages = + Number( + $('.pagination > .page-item a[title="Last"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $('.pagination > .page-item a[title="Next"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $(".pagination > .page-item.active a")?.text()?.trim() + ) || 1; + + res.animes = extractAnimes($, selector); + + if (res.animes.length === 0 && !res.hasNextPage) { + res.totalPages = 0; + } + + const genreSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-genres .sb-genre-list li"; + $(genreSelector).each((i, el) => { + res.genres.push(`${$(el).text().trim()}`); + }); + + const topAiringSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-realtime .anif-block-ul ul li"; + res.topAiringAnimes = extractMostPopularAnimes($, topAiringSelector); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeGenreAnime; diff --git a/src/special/aniwatch-api-main/src/parsers/animeProducer.ts b/src/special/aniwatch-api-main/src/parsers/animeProducer.ts new file mode 100644 index 0000000..2862852 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeProducer.ts @@ -0,0 +1,120 @@ +import { + SRC_BASE_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, + extractMostPopularAnimes, + extractAnimes, + extractTop10Animes, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import type { ScrapedProducerAnime } from "../types/parsers/index.js"; + +// /anime/producer/${name}?page=${page} +async function scrapeProducerAnimes( + producerName: string, + page: number = 1 +): Promise { + const res: ScrapedProducerAnime = { + producerName, + animes: [], + top10Animes: { + today: [], + week: [], + month: [], + }, + topAiringAnimes: [], + totalPages: 1, + hasNextPage: false, + currentPage: Number(page), + }; + + try { + const producerUrl: URL = new URL( + `/producer/${producerName}?page=${page}`, + SRC_BASE_URL + ); + + const mainPage = await axios.get(producerUrl.href, { + headers: { + Accept: ACCEPT_HEADER, + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + const animeSelector: SelectorType = + "#main-content .tab-content .film_list-wrap .flw-item"; + + res.hasNextPage = + $(".pagination > li").length > 0 + ? $(".pagination li.active").length > 0 + ? $(".pagination > li").last().hasClass("active") + ? false + : true + : false + : false; + + res.totalPages = + Number( + $('.pagination > .page-item a[title="Last"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $('.pagination > .page-item a[title="Next"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $(".pagination > .page-item.active a")?.text()?.trim() + ) || 1; + + res.animes = extractAnimes($, animeSelector); + + if (res.animes.length === 0 && !res.hasNextPage) { + res.totalPages = 0; + } + + const producerNameSelector: SelectorType = + "#main-content .block_area .block_area-header .cat-heading"; + res.producerName = $(producerNameSelector)?.text()?.trim() ?? producerName; + + const top10AnimeSelector: SelectorType = + '#main-sidebar .block_area-realtime [id^="top-viewed-"]'; + + $(top10AnimeSelector).each((_, el) => { + const period = $(el).attr("id")?.split("-")?.pop()?.trim(); + + if (period === "day") { + res.top10Animes.today = extractTop10Animes($, period); + return; + } + if (period === "week") { + res.top10Animes.week = extractTop10Animes($, period); + return; + } + if (period === "month") { + res.top10Animes.month = extractTop10Animes($, period); + } + }); + + const topAiringSelector: SelectorType = + "#main-sidebar .block_area_sidebar:nth-child(2) .block_area-content .anif-block-ul ul li"; + res.topAiringAnimes = extractMostPopularAnimes($, topAiringSelector); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeProducerAnimes; diff --git a/src/special/aniwatch-api-main/src/parsers/animeSearch.ts b/src/special/aniwatch-api-main/src/parsers/animeSearch.ts new file mode 100644 index 0000000..16818c6 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeSearch.ts @@ -0,0 +1,118 @@ +import { + SRC_SEARCH_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, + extractAnimes, + getSearchFilterValue, + extractMostPopularAnimes, + getSearchDateFilterValue, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import type { ScrapedAnimeSearchResult } from "../types/parsers/index.js"; +import type { SearchFilters, FilterKeys } from "../types/controllers/index.js"; + +// /anime/search?q=${query}&page=${page} +async function scrapeAnimeSearch( + q: string, + page: number = 1, + filters: SearchFilters +): Promise { + const res: ScrapedAnimeSearchResult = { + animes: [], + mostPopularAnimes: [], + currentPage: Number(page), + hasNextPage: false, + totalPages: 1, + searchQuery: q, + searchFilters: filters, + }; + + try { + const url = new URL(SRC_SEARCH_URL); + url.searchParams.set("keyword", q); + url.searchParams.set("page", `${page}`); + url.searchParams.set("sort", "default"); + + for (const key in filters) { + if (key.includes("_date")) { + const dates = getSearchDateFilterValue( + key === "start_date", + filters[key as keyof SearchFilters] || "" + ); + if (!dates) continue; + + dates.map((dateParam) => { + const [key, val] = dateParam.split("="); + url.searchParams.set(key, val); + }); + continue; + } + + const filterVal = getSearchFilterValue( + key as FilterKeys, + filters[key as keyof SearchFilters] || "" + ); + filterVal && url.searchParams.set(key, filterVal); + } + + const mainPage = await axios.get(url.href, { + headers: { + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Accept: ACCEPT_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + const selector: SelectorType = + "#main-content .tab-content .film_list-wrap .flw-item"; + + res.hasNextPage = + $(".pagination > li").length > 0 + ? $(".pagination li.active").length > 0 + ? $(".pagination > li").last().hasClass("active") + ? false + : true + : false + : false; + + res.totalPages = + Number( + $('.pagination > .page-item a[title="Last"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $('.pagination > .page-item a[title="Next"]') + ?.attr("href") + ?.split("=") + .pop() ?? + $(".pagination > .page-item.active a")?.text()?.trim() + ) || 1; + + res.animes = extractAnimes($, selector); + + if (res.animes.length === 0 && !res.hasNextPage) { + res.totalPages = 0; + } + + const mostPopularSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-realtime .anif-block-ul ul li"; + res.mostPopularAnimes = extractMostPopularAnimes($, mostPopularSelector); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeSearch; diff --git a/src/special/aniwatch-api-main/src/parsers/animeSearchSuggestion.ts b/src/special/aniwatch-api-main/src/parsers/animeSearchSuggestion.ts new file mode 100644 index 0000000..acef2a4 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/animeSearchSuggestion.ts @@ -0,0 +1,77 @@ +import { + SRC_HOME_URL, + SRC_AJAX_URL, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import type { ScrapedAnimeSearchSuggestion } from "../types/parsers/index.js"; + +// /anime/search/suggest?q=${query} +async function scrapeAnimeSearchSuggestion( + q: string +): Promise { + const res: ScrapedAnimeSearchSuggestion = { + suggestions: [], + }; + + try { + const { data } = await axios.get( + `${SRC_AJAX_URL}/search/suggest?keyword=${encodeURIComponent(q)}`, + { + headers: { + Accept: "*/*", + Pragma: "no-cache", + Referer: SRC_HOME_URL, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + }, + } + ); + + const $: CheerioAPI = load(data.html); + const selector: SelectorType = ".nav-item:has(.film-poster)"; + + if ($(selector).length < 1) return res; + + $(selector).each((_, el) => { + const id = $(el).attr("href")?.split("?")[0].includes("javascript") + ? null + : $(el).attr("href")?.split("?")[0]?.slice(1); + + res.suggestions.push({ + id, + name: $(el).find(".srp-detail .film-name")?.text()?.trim() || null, + jname: + $(el).find(".srp-detail .film-name")?.attr("data-jname")?.trim() || + $(el).find(".srp-detail .alias-name")?.text()?.trim() || + null, + poster: $(el) + .find(".film-poster .film-poster-img") + ?.attr("data-src") + ?.trim(), + moreInfo: [ + ...$(el) + .find(".film-infor") + .contents() + .map((_, el) => $(el).text().trim()), + ].filter((i) => i), + }); + }); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeAnimeSearchSuggestion; diff --git a/src/special/aniwatch-api-main/src/parsers/episodeServers.ts b/src/special/aniwatch-api-main/src/parsers/episodeServers.ts new file mode 100644 index 0000000..8f95229 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/episodeServers.ts @@ -0,0 +1,85 @@ +import { + SRC_BASE_URL, + SRC_AJAX_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import type { ScrapedEpisodeServers } from "../types/parsers/index.js"; + +// /anime/servers?episodeId=${id} +async function scrapeEpisodeServers( + episodeId: string +): Promise { + const res: ScrapedEpisodeServers = { + sub: [], + dub: [], + raw: [], + episodeId, + episodeNo: 0, + }; + + try { + const epId = episodeId.split("?ep=")[1]; + + const { data } = await axios.get( + `${SRC_AJAX_URL}/v2/episode/servers?episodeId=${epId}`, + { + headers: { + Accept: ACCEPT_HEADER, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Referer: new URL(`/watch/${episodeId}`, SRC_BASE_URL).href, + }, + } + ); + + const $: CheerioAPI = load(data.html); + + const epNoSelector: SelectorType = ".server-notice strong"; + res.episodeNo = Number($(epNoSelector).text().split(" ").pop()) || 0; + + $(`.ps_-block.ps_-block-sub.servers-sub .ps__-list .server-item`).each( + (_, el) => { + res.sub.push({ + serverName: $(el).find("a").text().toLowerCase().trim(), + serverId: Number($(el)?.attr("data-server-id")?.trim()) || null, + }); + } + ); + + $(`.ps_-block.ps_-block-sub.servers-dub .ps__-list .server-item`).each( + (_, el) => { + res.dub.push({ + serverName: $(el).find("a").text().toLowerCase().trim(), + serverId: Number($(el)?.attr("data-server-id")?.trim()) || null, + }); + } + ); + + $(`.ps_-block.ps_-block-sub.servers-raw .ps__-list .server-item`).each( + (_, el) => { + res.raw.push({ + serverName: $(el).find("a").text().toLowerCase().trim(), + serverId: Number($(el)?.attr("data-server-id")?.trim()) || null, + }); + } + ); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeEpisodeServers; diff --git a/src/special/aniwatch-api-main/src/parsers/estimatedSchedule.ts b/src/special/aniwatch-api-main/src/parsers/estimatedSchedule.ts new file mode 100644 index 0000000..6fc3d1a --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/estimatedSchedule.ts @@ -0,0 +1,67 @@ +import { + SRC_HOME_URL, + SRC_AJAX_URL, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; +import { type ScrapedEstimatedSchedule } from "../types/parsers/index.js"; + +// /anime/schedule?date=${date} +async function scrapeEstimatedSchedule( + date: string +): Promise { + const res: ScrapedEstimatedSchedule = { + scheduledAnimes: [], + }; + + try { + const estScheduleURL = + `${SRC_AJAX_URL}/schedule/list?tzOffset=-330&date=${date}` as const; + + const mainPage = await axios.get(estScheduleURL, { + headers: { + Accept: "*/*", + Referer: SRC_HOME_URL, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage?.data?.html); + + const selector: SelectorType = "li"; + + if ($(selector)?.text()?.trim()?.includes("No data to display")) { + return res; + } + + $(selector).each((_, el) => { + res.scheduledAnimes.push({ + id: $(el)?.find("a")?.attr("href")?.slice(1)?.trim() || null, + time: $(el)?.find("a .time")?.text()?.trim() || null, + name: $(el)?.find("a .film-name.dynamic-name")?.text()?.trim() || null, + jname: + $(el) + ?.find("a .film-name.dynamic-name") + ?.attr("data-jname") + ?.trim() || null, + }); + }); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeEstimatedSchedule; diff --git a/src/special/aniwatch-api-main/src/parsers/homePage.ts b/src/special/aniwatch-api-main/src/parsers/homePage.ts new file mode 100644 index 0000000..979e7e9 --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/homePage.ts @@ -0,0 +1,203 @@ +import { + SRC_HOME_URL, + ACCEPT_HEADER, + USER_AGENT_HEADER, + ACCEPT_ENCODING_HEADER, + extractTop10Animes, + extractAnimes, +} from "../utils/index.js"; +import axios, { AxiosError } from "axios"; +import createHttpError, { type HttpError } from "http-errors"; +import type { ScrapedHomePage } from "../types/parsers/index.js"; +import { load, type CheerioAPI, type SelectorType } from "cheerio"; + +// /anime/home +async function scrapeHomePage(): Promise { + const res: ScrapedHomePage = { + spotlightAnimes: [], + trendingAnimes: [], + latestEpisodeAnimes: [], + topUpcomingAnimes: [], + top10Animes: { + today: [], + week: [], + month: [], + }, + topAiringAnimes: [], + genres: [], + }; + + try { + const mainPage = await axios.get(SRC_HOME_URL as string, { + headers: { + "User-Agent": USER_AGENT_HEADER, + "Accept-Encoding": ACCEPT_ENCODING_HEADER, + Accept: ACCEPT_HEADER, + }, + }); + + const $: CheerioAPI = load(mainPage.data); + + const spotlightSelector: SelectorType = + "#slider .swiper-wrapper .swiper-slide"; + + $(spotlightSelector).each((i, el) => { + const otherInfo = $(el) + .find(".deslide-item-content .sc-detail .scd-item") + .map((i, el) => $(el).text().trim()) + .get() + .slice(0, -1); + + res.spotlightAnimes.push({ + rank: + Number( + $(el) + .find(".deslide-item-content .desi-sub-text") + ?.text() + .trim() + .split(" ")[0] + .slice(1) + ) || null, + id: $(el) + .find(".deslide-item-content .desi-buttons a") + ?.last() + ?.attr("href") + ?.slice(1) + ?.trim(), + name: $(el) + .find(".deslide-item-content .desi-head-title.dynamic-name") + ?.text() + .trim(), + description: $(el) + .find(".deslide-item-content .desi-description") + ?.text() + ?.split("[") + ?.shift() + ?.trim(), + poster: $(el) + .find(".deslide-cover .deslide-cover-img .film-poster-img") + ?.attr("data-src") + ?.trim(), + jname: $(el) + .find(".deslide-item-content .desi-head-title.dynamic-name") + ?.attr("data-jname") + ?.trim(), + episodes: { + sub: + Number( + $(el) + .find( + ".deslide-item-content .sc-detail .scd-item .tick-item.tick-sub" + ) + ?.text() + ?.trim() + ) || null, + dub: + Number( + $(el) + .find( + ".deslide-item-content .sc-detail .scd-item .tick-item.tick-dub" + ) + ?.text() + ?.trim() + ) || null, + }, + otherInfo, + }); + }); + + const trendingSelector: SelectorType = + "#trending-home .swiper-wrapper .swiper-slide"; + + $(trendingSelector).each((i, el) => { + res.trendingAnimes.push({ + rank: parseInt( + $(el).find(".item .number")?.children()?.first()?.text()?.trim() + ), + name: $(el) + .find(".item .number .film-title.dynamic-name") + ?.text() + ?.trim(), + id: $(el).find(".item .film-poster")?.attr("href")?.slice(1)?.trim(), + poster: $(el) + .find(".item .film-poster .film-poster-img") + ?.attr("data-src") + ?.trim(), + }); + }); + + const latestEpisodeSelector: SelectorType = + "#main-content .block_area_home:nth-of-type(1) .tab-content .film_list-wrap .flw-item"; + res.latestEpisodeAnimes = extractAnimes($, latestEpisodeSelector); + + const topUpcomingSelector: SelectorType = + "#main-content .block_area_home:nth-of-type(3) .tab-content .film_list-wrap .flw-item"; + res.topUpcomingAnimes = extractAnimes($, topUpcomingSelector); + + const genreSelector: SelectorType = + "#main-sidebar .block_area.block_area_sidebar.block_area-genres .sb-genre-list li"; + $(genreSelector).each((i, el) => { + res.genres.push(`${$(el).text().trim()}`); + }); + + const mostViewedSelector: SelectorType = + '#main-sidebar .block_area-realtime [id^="top-viewed-"]'; + $(mostViewedSelector).each((i, el) => { + const period = $(el).attr("id")?.split("-")?.pop()?.trim(); + + if (period === "day") { + res.top10Animes.today = extractTop10Animes($, period); + return; + } + if (period === "week") { + res.top10Animes.week = extractTop10Animes($, period); + return; + } + if (period === "month") { + res.top10Animes.month = extractTop10Animes($, period); + } + }); + + const topAiringSelector: SelectorType = + "#anime-featured .row div:nth-of-type(1) .anif-block-ul ul li"; + $(topAiringSelector).each((i, el) => { + const otherInfo = $(el) + .find(".fd-infor .fdi-item") + .map((i, el) => $(el).text().trim()) + .get(); + + res.topAiringAnimes.push({ + id: $(el) + .find(".film-detail .film-name .dynamic-name") + ?.attr("href") + ?.slice(1) + ?.trim(), + name: $(el) + .find(".film-detail .film-name .dynamic-name") + ?.attr("title") + ?.trim(), + jname: $(el) + .find(".film-detail .film-name .dynamic-name") + ?.attr("data-jname") + ?.trim(), + poster: $(el) + .find(".film-poster a .film-poster-img") + ?.attr("data-src") + ?.trim(), + otherInfo, + }); + }); + + return res; + } catch (err: any) { + if (err instanceof AxiosError) { + throw createHttpError( + err?.response?.status || 500, + err?.response?.statusText || "Something went wrong" + ); + } + throw createHttpError.InternalServerError(err?.message); + } +} + +export default scrapeHomePage; diff --git a/src/special/aniwatch-api-main/src/parsers/index.ts b/src/special/aniwatch-api-main/src/parsers/index.ts new file mode 100644 index 0000000..395833a --- /dev/null +++ b/src/special/aniwatch-api-main/src/parsers/index.ts @@ -0,0 +1,25 @@ +import scrapeHomePage from "./homePage.js"; +import scrapeGenreAnime from "./animeGenre.js"; +import scrapeAnimeSearch from "./animeSearch.js"; +import scrapeAnimeEpisodes from "./animeEpisodes.js"; +import scrapeAnimeCategory from "./animeCategory.js"; +import scrapeProducerAnimes from "./animeProducer.js"; +import scrapeEpisodeServers from "./episodeServers.js"; +import scrapeAnimeAboutInfo from "./animeAboutInfo.js"; +import scrapeEstimatedSchedule from "./estimatedSchedule.js"; +import scrapeAnimeEpisodeSources from "./animeEpisodeSrcs.js"; +import scrapeAnimeSearchSuggestion from "./animeSearchSuggestion.js"; + +export { + scrapeHomePage, + scrapeGenreAnime, + scrapeAnimeSearch, + scrapeAnimeEpisodes, + scrapeAnimeCategory, + scrapeEpisodeServers, + scrapeProducerAnimes, + scrapeAnimeAboutInfo, + scrapeEstimatedSchedule, + scrapeAnimeEpisodeSources, + scrapeAnimeSearchSuggestion, +}; diff --git a/src/special/aniwatch-api-main/src/routes/index.ts b/src/special/aniwatch-api-main/src/routes/index.ts new file mode 100644 index 0000000..7046ae1 --- /dev/null +++ b/src/special/aniwatch-api-main/src/routes/index.ts @@ -0,0 +1,55 @@ +import { Router, type IRouter } from "express"; +import { + getGenreAnime, + getAnimeSearch, + getHomePageInfo, + getAnimeCategory, + getAnimeEpisodes, + getEpisodeServers, + getProducerAnimes, + getAnimeAboutInfo, + getEstimatedSchedule, + getAnimeEpisodeSources, + getAnimeSearchSuggestion, +} from "../controllers/index.js"; + +const router: IRouter = Router(); + +// /anime +router.get("/", (_, res) => res.redirect("/")); + +// /anime/home +router.get("/home", getHomePageInfo); + +// /anime/info?id=${anime-id} +router.get("/info", getAnimeAboutInfo); + +// /anime/genre/${name}?page=${page} +router.get("/genre/:name", getGenreAnime); + +// /anime/search?q=${query}&page=${page} +router.get("/search", getAnimeSearch); + +// /anime/search/suggest?q=${query} +router.get("/search/suggest", getAnimeSearchSuggestion); + +// /anime/episodes/${anime-id} +router.get("/episodes/:animeId", getAnimeEpisodes); + +// /anime/servers?episodeId=${id} +router.get("/servers", getEpisodeServers); + +// episodeId=steinsgate-3?ep=230 +// /anime/episode-srcs?id=${episodeId}?server=${server}&category=${category (dub or sub)} +router.get("/episode-srcs", getAnimeEpisodeSources); + +// /anime/schedule?date=${date} +router.get("/schedule", getEstimatedSchedule); + +// /anime/producer/${name}?page=${page} +router.get("/producer/:name", getProducerAnimes); + +// /anime/:category?page=${page} +router.get("/:category", getAnimeCategory); + +export default router; diff --git a/src/special/aniwatch-api-main/src/server.ts b/src/special/aniwatch-api-main/src/server.ts new file mode 100644 index 0000000..57ffd6b --- /dev/null +++ b/src/special/aniwatch-api-main/src/server.ts @@ -0,0 +1,63 @@ +import https from "https"; +import morgan from "morgan"; +import express from "express"; +import { resolve } from "path"; +import { config } from "dotenv"; + +import corsConfig from "./config/cors.js"; +import { ratelimit } from "./config/ratelimit.js"; +import errorHandler from "./config/errorHandler.js"; +import notFoundHandler from "./config/notFoundHandler.js"; + +import animeRouter from "./routes/index.js"; + +config(); + +process.env.NODE_ENV = 'PROD' + +const app: express.Application = express(); +const PORT: number = Number(process.env.PORT) || 4000; + +app.use(morgan("dev")); +app.use(corsConfig); + +// CAUTION: For personal deployments, "refrain" from having an env +// named "ANIWATCH_API_HOSTNAME". You may face rate limitting +// and other issues if you do. +const ISNT_PERSONAL_DEPLOYMENT = Boolean(process?.env?.ANIWATCH_API_HOSTNAME); +if (ISNT_PERSONAL_DEPLOYMENT) { + app.use(ratelimit); +} + +app.use(express.static(resolve("public"))); +app.get("/health", (_, res) => res.sendStatus(200)); +app.use("/anime", animeRouter); + +app.use(notFoundHandler); +app.use(errorHandler); + +// NOTE: this env is "required" for vercel deployments +if (!Boolean(process?.env?.IS_VERCEL_DEPLOYMENT)) { + app.listen(PORT, () => { + console.log(`⚔️ api @ http://localhost:${PORT}`); + }); + + // NOTE: remove the `if` block below for personal deployments + if (ISNT_PERSONAL_DEPLOYMENT) { + // don't sleep + const intervalTime = 9 * 60 * 1000; // 9mins + setInterval(() => { + console.log("HEALTHCHECK ;)", new Date().toLocaleString()); + https + .get( + new URL("/health", `https://${process.env.ANIWATCH_API_HOSTNAME}`) + .href + ) + .on("error", (err) => { + console.error(err.message); + }); + }, intervalTime); + } +} + +export default app; diff --git a/src/special/aniwatch-api-main/src/types/anime.ts b/src/special/aniwatch-api-main/src/types/anime.ts new file mode 100644 index 0000000..c23acaa --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/anime.ts @@ -0,0 +1,136 @@ +export interface Anime { + id: string | null; + name: string | null; + poster: string | null; + duration: string | null; + type: string | null; + rating: string | null; + episodes: { + sub: number | null; + dub: number | null; + }; +} + +type CommonAnimeProps = "id" | "name" | "poster"; + +export interface Top10Anime extends Pick { + rank: number | null; +} + +export type Top10AnimeTimePeriod = "day" | "week" | "month"; + +export interface MostPopularAnime + extends Pick { + jname: string | null; +} + +export interface SpotlightAnime + extends MostPopularAnime, + Pick { + description: string | null; +} + +export interface TrendingAnime + extends Pick, + Pick {} + +export interface LatestEpisodeAnime extends Anime {} + +export interface TopUpcomingAnime extends Anime {} + +export interface TopAiringAnime extends MostPopularAnime {} + +export interface AnimeGeneralAboutInfo + extends Pick, + Pick { + anilistId: number | null; + malId: number | null; + stats: { + quality: string | null; + } & Pick; + promotionalVideos: AnimePromotionalVideo[]; + charactersVoiceActors: AnimeCharactersAndVoiceActors[]; +} + +export interface RecommendedAnime extends Anime {} + +export interface RelatedAnime extends MostPopularAnime {} + +export interface Season extends Pick { + isCurrent: boolean; + title: string | null; +} + +export interface AnimePromotionalVideo { + title: string | undefined; + source: string | undefined; + thumbnail: string | undefined; +} + +export interface AnimeCharactersAndVoiceActors { + character: AnimeCharacter; + voiceActor: AnimeCharacter; +} + +export interface AnimeCharacter { + id: string; + poster: string; + name: string; + cast: string; +} + +export interface AnimeSearchSuggestion + extends Omit { + moreInfo: Array; +} + +export interface AnimeEpisode extends Pick { + episodeId: string | null; + number: number; + isFiller: boolean; +} + +export interface SubEpisode { + serverName: string; + serverId: number | null; +} +export interface DubEpisode extends SubEpisode {} +export interface RawEpisode extends SubEpisode {} + +export type AnimeCategories = + | "most-favorite" + | "most-popular" + | "subbed-anime" + | "dubbed-anime" + | "recently-updated" + | "recently-added" + | "top-upcoming" + | "top-airing" + | "movie" + | "special" + | "ova" + | "ona" + | "tv" + | "completed"; + +export type AnimeServers = + | "vidstreaming" + | "megacloud" + | "streamsb" + | "streamtape" + | "vidcloud"; + +export enum Servers { + VidStreaming = "vidstreaming", + MegaCloud = "megacloud", + StreamSB = "streamsb", + StreamTape = "streamtape", + VidCloud = "vidcloud", + AsianLoad = "asianload", + GogoCDN = "gogocdn", + MixDrop = "mixdrop", + UpCloud = "upcloud", + VizCloud = "vizcloud", + MyCloud = "mycloud", + Filemoon = "filemoon", +} diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeAboutInfo.ts b/src/special/aniwatch-api-main/src/types/controllers/animeAboutInfo.ts new file mode 100644 index 0000000..aa65efd --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeAboutInfo.ts @@ -0,0 +1,3 @@ +export type AnimeAboutInfoQueryParams = { + id?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeCategory.ts b/src/special/aniwatch-api-main/src/types/controllers/animeCategory.ts new file mode 100644 index 0000000..7de0876 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeCategory.ts @@ -0,0 +1,7 @@ +export type CategoryAnimePathParams = { + category?: string; +}; + +export type CategoryAnimeQueryParams = { + page?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeEpisodeSrcs.ts b/src/special/aniwatch-api-main/src/types/controllers/animeEpisodeSrcs.ts new file mode 100644 index 0000000..0e82539 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeEpisodeSrcs.ts @@ -0,0 +1,7 @@ +import { type AnimeServers } from "../anime.js"; + +export type AnimeEpisodeSrcsQueryParams = { + id?: string; + server?: AnimeServers; + category?: "sub" | "dub"; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeEpisodes.ts b/src/special/aniwatch-api-main/src/types/controllers/animeEpisodes.ts new file mode 100644 index 0000000..481eb87 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeEpisodes.ts @@ -0,0 +1,3 @@ +export type AnimeEpisodePathParams = { + animeId?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeGenre.ts b/src/special/aniwatch-api-main/src/types/controllers/animeGenre.ts new file mode 100644 index 0000000..038d15e --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeGenre.ts @@ -0,0 +1,7 @@ +export type GenreAnimePathParams = { + name?: string; +}; + +export type GenreAnimeQueryParams = { + page?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeProducer.ts b/src/special/aniwatch-api-main/src/types/controllers/animeProducer.ts new file mode 100644 index 0000000..7f8a9a7 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeProducer.ts @@ -0,0 +1,7 @@ +export type AnimeProducerPathParams = { + name?: string; +}; + +export type AnimeProducerQueryParams = { + page?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeSearch.ts b/src/special/aniwatch-api-main/src/types/controllers/animeSearch.ts new file mode 100644 index 0000000..fccb243 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeSearch.ts @@ -0,0 +1,20 @@ +export type AnimeSearchQueryParams = { + q?: string; + page?: string; + type?: string; + status?: string; + rated?: string; + score?: string; + season?: string; + language?: string; + start_date?: string; + end_date?: string; + sort?: string; + genres?: string; +}; + +export type SearchFilters = Omit; + +export type FilterKeys = Partial< + keyof Omit +>; diff --git a/src/special/aniwatch-api-main/src/types/controllers/animeSearchSuggestion.ts b/src/special/aniwatch-api-main/src/types/controllers/animeSearchSuggestion.ts new file mode 100644 index 0000000..491daa0 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/animeSearchSuggestion.ts @@ -0,0 +1,3 @@ +export type AnimeSearchSuggestQueryParams = { + q?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/episodeServers.ts b/src/special/aniwatch-api-main/src/types/controllers/episodeServers.ts new file mode 100644 index 0000000..d711a40 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/episodeServers.ts @@ -0,0 +1,3 @@ +export type EpisodeServersQueryParams = { + episodeId?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/estimatedSchedule.ts b/src/special/aniwatch-api-main/src/types/controllers/estimatedSchedule.ts new file mode 100644 index 0000000..e732aaa --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/estimatedSchedule.ts @@ -0,0 +1,3 @@ +export type EstimatedScheduleQueryParams = { + date?: string; +}; diff --git a/src/special/aniwatch-api-main/src/types/controllers/index.ts b/src/special/aniwatch-api-main/src/types/controllers/index.ts new file mode 100644 index 0000000..14876e2 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/controllers/index.ts @@ -0,0 +1,10 @@ +export type * from "./animeGenre.js"; +export type * from "./animeCategory.js"; +export type * from "./animeProducer.js"; +export type * from "./animeSearch.js"; +export type * from "./animeEpisodes.js"; +export type * from "./episodeServers.js"; +export type * from "./animeAboutInfo.js"; +export type * from "./animeEpisodeSrcs.js"; +export type * from "./estimatedSchedule.js"; +export type * from "./animeSearchSuggestion.js"; diff --git a/src/special/aniwatch-api-main/src/types/extractor.ts b/src/special/aniwatch-api-main/src/types/extractor.ts new file mode 100644 index 0000000..71c6be1 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/extractor.ts @@ -0,0 +1,18 @@ +export interface Video { + url: string; + quality?: string; + isM3U8?: boolean; + size?: number; + [x: string]: unknown; +} + +export interface Subtitle { + id?: string; + url: string; + lang: string; +} + +export interface Intro { + start: number; + end: number; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeAboutInfo.ts b/src/special/aniwatch-api-main/src/types/parsers/animeAboutInfo.ts new file mode 100644 index 0000000..274e7c2 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeAboutInfo.ts @@ -0,0 +1,19 @@ +import type { + Season, + RelatedAnime, + RecommendedAnime, + AnimeGeneralAboutInfo, +} from "../anime.js"; +import { type HttpError } from "http-errors"; +import { type ScrapedAnimeSearchResult } from "./animeSearch.js"; + +export interface ScrapedAnimeAboutInfo + extends Pick { + anime: { + info: AnimeGeneralAboutInfo; + moreInfo: Record; + }; + seasons: Array; + relatedAnimes: Array | HttpError; + recommendedAnimes: Array | HttpError; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeCategory.ts b/src/special/aniwatch-api-main/src/types/parsers/animeCategory.ts new file mode 100644 index 0000000..89c56f0 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeCategory.ts @@ -0,0 +1,22 @@ +import type { HttpError } from "http-errors"; +import type { Anime, Top10Anime } from "../anime.js"; + +export interface ScrapedAnimeCategory { + animes: Array | HttpError; + genres: Array; + top10Animes: { + today: Array | HttpError; + week: Array | HttpError; + month: Array | HttpError; + }; + category: string; + totalPages: number; + currentPage: number; + hasNextPage: boolean; +} + +export type CommonAnimeScrapeTypes = + | "animes" + | "totalPages" + | "hasNextPage" + | "currentPage"; diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeEpisodeSrcs.ts b/src/special/aniwatch-api-main/src/types/parsers/animeEpisodeSrcs.ts new file mode 100644 index 0000000..ef58ed3 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeEpisodeSrcs.ts @@ -0,0 +1,12 @@ +import type { Intro, Subtitle, Video } from "../extractor.js"; + +export interface ScrapedAnimeEpisodesSources { + headers?: { + [k: string]: string; + }; + intro?: Intro; + subtitles?: Subtitle[]; + sources: Video[]; + download?: string; + embedURL?: string; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeEpisodes.ts b/src/special/aniwatch-api-main/src/types/parsers/animeEpisodes.ts new file mode 100644 index 0000000..3587573 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeEpisodes.ts @@ -0,0 +1,6 @@ +import { type AnimeEpisode } from "../anime.js"; + +export interface ScrapedAnimeEpisodes { + totalEpisodes: number; + episodes: Array; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeGenre.ts b/src/special/aniwatch-api-main/src/types/parsers/animeGenre.ts new file mode 100644 index 0000000..10f8b85 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeGenre.ts @@ -0,0 +1,11 @@ +import type { + ScrapedAnimeCategory, + CommonAnimeScrapeTypes, +} from "./animeCategory.js"; +import { type ScrapedHomePage } from "./homePage.js"; + +export interface ScrapedGenreAnime + extends Pick, + Pick { + genreName: string; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeProducer.ts b/src/special/aniwatch-api-main/src/types/parsers/animeProducer.ts new file mode 100644 index 0000000..bcd784e --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeProducer.ts @@ -0,0 +1,8 @@ +import type { ScrapedHomePage } from "./homePage.js"; +import type { ScrapedAnimeCategory } from "./animeCategory.js"; + +export interface ScrapedProducerAnime + extends Omit, + Pick { + producerName: string; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeSearch.ts b/src/special/aniwatch-api-main/src/types/parsers/animeSearch.ts new file mode 100644 index 0000000..7e641ea --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeSearch.ts @@ -0,0 +1,14 @@ +import type { + ScrapedAnimeCategory, + CommonAnimeScrapeTypes, +} from "./animeCategory.js"; +import type { HttpError } from "http-errors"; +import type { MostPopularAnime } from "../anime.js"; +import type { SearchFilters } from "../controllers/animeSearch.js"; + +export interface ScrapedAnimeSearchResult + extends Pick { + mostPopularAnimes: Array | HttpError; + searchQuery: string; + searchFilters: SearchFilters; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/animeSearchSuggestion.ts b/src/special/aniwatch-api-main/src/types/parsers/animeSearchSuggestion.ts new file mode 100644 index 0000000..4c262a4 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/animeSearchSuggestion.ts @@ -0,0 +1,6 @@ +import type { HttpError } from "http-errors"; +import type { AnimeSearchSuggestion } from "../anime.js"; + +export interface ScrapedAnimeSearchSuggestion { + suggestions: Array | HttpError; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/episodeServers.ts b/src/special/aniwatch-api-main/src/types/parsers/episodeServers.ts new file mode 100644 index 0000000..a003149 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/episodeServers.ts @@ -0,0 +1,9 @@ +import type { SubEpisode, DubEpisode, RawEpisode } from "../anime.js"; + +export interface ScrapedEpisodeServers { + sub: SubEpisode[]; + dub: DubEpisode[]; + raw: RawEpisode[]; + episodeNo: number; + episodeId: string; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/estimatedSchedule.ts b/src/special/aniwatch-api-main/src/types/parsers/estimatedSchedule.ts new file mode 100644 index 0000000..f62dd14 --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/estimatedSchedule.ts @@ -0,0 +1,10 @@ +type EstimatedSchedule = { + id: string | null; + time: string | null; + name: string | null; + jname: string | null; +}; + +export type ScrapedEstimatedSchedule = { + scheduledAnimes: Array; +}; diff --git a/src/special/aniwatch-api-main/src/types/parsers/homePage.ts b/src/special/aniwatch-api-main/src/types/parsers/homePage.ts new file mode 100644 index 0000000..5641a9a --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/homePage.ts @@ -0,0 +1,18 @@ +import type { + TrendingAnime, + SpotlightAnime, + TopAiringAnime, + TopUpcomingAnime, + LatestEpisodeAnime, +} from "../anime.js"; +import type { HttpError } from "http-errors"; +import type { ScrapedAnimeCategory } from "./animeCategory.js"; + +export interface ScrapedHomePage + extends Pick { + spotlightAnimes: Array | HttpError; + trendingAnimes: Array | HttpError; + latestEpisodeAnimes: Array | HttpError; + topUpcomingAnimes: Array | HttpError; + topAiringAnimes: Array | HttpError; +} diff --git a/src/special/aniwatch-api-main/src/types/parsers/index.ts b/src/special/aniwatch-api-main/src/types/parsers/index.ts new file mode 100644 index 0000000..057e2fc --- /dev/null +++ b/src/special/aniwatch-api-main/src/types/parsers/index.ts @@ -0,0 +1,25 @@ +import type { ScrapedHomePage } from "./homePage.js"; +import type { ScrapedGenreAnime } from "./animeGenre.js"; +import type { ScrapedAnimeEpisodes } from "./animeEpisodes.js"; +import type { ScrapedAnimeCategory } from "./animeCategory.js"; +import type { ScrapedProducerAnime } from "./animeProducer.js"; +import type { ScrapedEpisodeServers } from "./episodeServers.js"; +import type { ScrapedAnimeAboutInfo } from "./animeAboutInfo.js"; +import type { ScrapedAnimeSearchResult } from "./animeSearch.js"; +import type { ScrapedEstimatedSchedule } from "./estimatedSchedule.js"; +import type { ScrapedAnimeEpisodesSources } from "./animeEpisodeSrcs.js"; +import type { ScrapedAnimeSearchSuggestion } from "./animeSearchSuggestion.js"; + +export type { + ScrapedHomePage, + ScrapedGenreAnime, + ScrapedAnimeEpisodes, + ScrapedProducerAnime, + ScrapedAnimeCategory, + ScrapedEpisodeServers, + ScrapedAnimeAboutInfo, + ScrapedAnimeSearchResult, + ScrapedEstimatedSchedule, + ScrapedAnimeEpisodesSources, + ScrapedAnimeSearchSuggestion, +}; diff --git a/src/special/aniwatch-api-main/src/utils/constants.ts b/src/special/aniwatch-api-main/src/utils/constants.ts new file mode 100644 index 0000000..8615050 --- /dev/null +++ b/src/special/aniwatch-api-main/src/utils/constants.ts @@ -0,0 +1,129 @@ +import { config } from "dotenv"; + +config(); + +export const ACCEPT_ENCODING_HEADER = "gzip, deflate, br"; +export const USER_AGENT_HEADER = + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4692.71 Safari/537.36"; +export const ACCEPT_HEADER = + "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; + +// previously aniwatch.to || aniwatchtv.to +const DOMAIN = process.env.DOMAIN || "hianime.to"; + +export const SRC_BASE_URL = `https://${DOMAIN}`; +export const SRC_AJAX_URL = `${SRC_BASE_URL}/ajax`; +export const SRC_HOME_URL = `${SRC_BASE_URL}/home`; +export const SRC_SEARCH_URL = `${SRC_BASE_URL}/search`; + +// +export const genresIdMap: Record = { + action: 1, + adventure: 2, + cars: 3, + comedy: 4, + dementia: 5, + demons: 6, + drama: 8, + ecchi: 9, + fantasy: 10, + game: 11, + harem: 35, + historical: 13, + horror: 14, + isekai: 44, + josei: 43, + kids: 15, + magic: 16, + "martial-arts": 17, + mecha: 18, + military: 38, + music: 19, + mystery: 7, + parody: 20, + police: 39, + psychological: 40, + romance: 22, + samurai: 21, + school: 23, + "sci-fi": 24, + seinen: 42, + shoujo: 25, + "shoujo-ai": 26, + shounen: 27, + "shounen-ai": 28, + "slice-of-life": 36, + space: 29, + sports: 30, + "super-power": 31, + supernatural: 37, + thriller: 41, + vampire: 32, +} as const; + +export const typeIdMap: Record = { + all: 0, + movie: 1, + tv: 2, + ova: 3, + ona: 4, + special: 5, + music: 6, +} as const; + +export const statusIdMap: Record = { + all: 0, + "finished-airing": 1, + "currently-airing": 2, + "not-yet-aired": 3, +} as const; + +export const ratedIdMap: Record = { + all: 0, + g: 1, + pg: 2, + "pg-13": 3, + r: 4, + "r+": 5, + rx: 6, +} as const; + +export const scoreIdMap: Record = { + all: 0, + appalling: 1, + horrible: 2, + "very-bad": 3, + bad: 4, + average: 5, + fine: 6, + good: 7, + "very-good": 8, + great: 9, + masterpiece: 10, +} as const; + +export const seasonIdMap: Record = { + all: 0, + spring: 1, + summer: 2, + fall: 3, + winter: 4, +} as const; + +export const languageIdMap: Record = { + all: 0, + sub: 1, + dub: 2, + "sub-&-dub": 3, +} as const; + +export const sortIdMap: Record = { + default: "default", + "recently-added": "recently_added", + "recently-updated": "recently_updated", + score: "score", + "name-a-z": "name_az", + "released-date": "released_date", + "most-watched": "most_watched", +} as const; +// diff --git a/src/special/aniwatch-api-main/src/utils/index.ts b/src/special/aniwatch-api-main/src/utils/index.ts new file mode 100644 index 0000000..b514c85 --- /dev/null +++ b/src/special/aniwatch-api-main/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from "./methods.js"; +export * from "./constants.js"; diff --git a/src/special/aniwatch-api-main/src/utils/methods.ts b/src/special/aniwatch-api-main/src/utils/methods.ts new file mode 100644 index 0000000..1ed0c88 --- /dev/null +++ b/src/special/aniwatch-api-main/src/utils/methods.ts @@ -0,0 +1,288 @@ +import type { + Anime, + Top10Anime, + MostPopularAnime, + Top10AnimeTimePeriod, +} from "../types/anime.js"; +import type { CheerioAPI, SelectorType } from "cheerio"; +import { + genresIdMap, + languageIdMap, + ratedIdMap, + scoreIdMap, + seasonIdMap, + sortIdMap, + statusIdMap, + typeIdMap, +} from "./constants.js"; +import { type FilterKeys } from "../types/controllers/animeSearch.js"; +import createHttpError, { HttpError } from "http-errors"; + +export const extractAnimes = ( + $: CheerioAPI, + selector: SelectorType +): Array | HttpError => { + try { + const animes: Array = []; + + $(selector).each((i, el) => { + const animeId = + $(el) + .find(".film-detail .film-name .dynamic-name") + ?.attr("href") + ?.slice(1) + .split("?ref=search")[0] || null; + + animes.push({ + id: animeId, + name: $(el) + .find(".film-detail .film-name .dynamic-name") + ?.text() + ?.trim(), + poster: + $(el) + .find(".film-poster .film-poster-img") + ?.attr("data-src") + ?.trim() || null, + duration: $(el) + .find(".film-detail .fd-infor .fdi-item.fdi-duration") + ?.text() + ?.trim(), + type: $(el) + .find(".film-detail .fd-infor .fdi-item:nth-of-type(1)") + ?.text() + ?.trim(), + rating: $(el).find(".film-poster .tick-rate")?.text()?.trim() || null, + episodes: { + sub: + Number( + $(el) + .find(".film-poster .tick-sub") + ?.text() + ?.trim() + .split(" ") + .pop() + ) || null, + dub: + Number( + $(el) + .find(".film-poster .tick-dub") + ?.text() + ?.trim() + .split(" ") + .pop() + ) || null, + }, + }); + }); + + return animes; + } catch (err: any) { + throw createHttpError.InternalServerError( + err?.message || "Something went wrong" + ); + } +}; + +export const extractTop10Animes = ( + $: CheerioAPI, + period: Top10AnimeTimePeriod +): Array | HttpError => { + try { + const animes: Array = []; + const selector = `#top-viewed-${period} ul li`; + + $(selector).each((i, el) => { + animes.push({ + id: + $(el) + .find(".film-detail .dynamic-name") + ?.attr("href") + ?.slice(1) + .trim() || null, + rank: Number($(el).find(".film-number span")?.text()?.trim()) || null, + name: $(el).find(".film-detail .dynamic-name")?.text()?.trim() || null, + poster: + $(el) + .find(".film-poster .film-poster-img") + ?.attr("data-src") + ?.trim() || null, + episodes: { + sub: + Number( + $(el) + .find(".film-detail .fd-infor .tick-item.tick-sub") + ?.text() + ?.trim() + ) || null, + dub: + Number( + $(el) + .find(".film-detail .fd-infor .tick-item.tick-dub") + ?.text() + ?.trim() + ) || null, + }, + }); + }); + + return animes; + } catch (err: any) { + throw createHttpError.InternalServerError( + err?.message || "Something went wrong" + ); + } +}; + +export const extractMostPopularAnimes = ( + $: CheerioAPI, + selector: SelectorType +): Array | HttpError => { + try { + const animes: Array = []; + + $(selector).each((i, el) => { + animes.push({ + id: + $(el) + .find(".film-detail .dynamic-name") + ?.attr("href") + ?.slice(1) + .trim() || null, + name: $(el).find(".film-detail .dynamic-name")?.text()?.trim() || null, + poster: + $(el) + .find(".film-poster .film-poster-img") + ?.attr("data-src") + ?.trim() || null, + jname: + $(el) + .find(".film-detail .film-name .dynamic-name") + .attr("data-jname") + ?.trim() || null, + + episodes: { + sub: + Number($(el)?.find(".fd-infor .tick .tick-sub")?.text()?.trim()) || + null, + dub: + Number($(el)?.find(".fd-infor .tick .tick-dub")?.text()?.trim()) || + null, + }, + type: + $(el) + ?.find(".fd-infor .tick") + ?.text() + ?.trim() + ?.replace(/[\s\n]+/g, " ") + ?.split(" ") + ?.pop() || null, + }); + }); + + return animes; + } catch (err: any) { + throw createHttpError.InternalServerError( + err?.message || "Something went wrong" + ); + } +}; + +export function retrieveServerId( + $: CheerioAPI, + index: number, + category: "sub" | "dub" | "raw" +) { + return ( + $(`.ps_-block.ps_-block-sub.servers-${category} > .ps__-list .server-item`) + ?.map((_, el) => + $(el).attr("data-server-id") == `${index}` ? $(el) : null + ) + ?.get()[0] + ?.attr("data-id") || null + ); +} + +function getGenresFilterVal(genreNames: string[]): string | undefined { + if (genreNames.length < 1) { + return undefined; + } + return genreNames.map((name) => genresIdMap[name]).join(","); +} + +export function getSearchFilterValue( + key: FilterKeys, + rawValue: string +): string | undefined { + rawValue = rawValue.trim(); + if (!rawValue) return undefined; + + switch (key) { + case "genres": { + return getGenresFilterVal(rawValue.split(",")); + } + case "type": { + const val = typeIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "status": { + const val = statusIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "rated": { + const val = ratedIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "score": { + const val = scoreIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "season": { + const val = seasonIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "language": { + const val = languageIdMap[rawValue] ?? 0; + return val === 0 ? undefined : `${val}`; + } + case "sort": { + return sortIdMap[rawValue] ?? undefined; + } + default: + return undefined; + } +} + +// this fn tackles both start_date and end_date +export function getSearchDateFilterValue( + isStartDate: boolean, + rawValue: string +): string[] | undefined { + rawValue = rawValue.trim(); + if (!rawValue) return undefined; + + const dateRegex = /^\d{4}-([0-9]|1[0-2])-([0-9]|[12][0-9]|3[01])$/; + const dateCategory = isStartDate ? "s" : "e"; + const [year, month, date] = rawValue.split("-"); + + if (!dateRegex.test(rawValue)) { + return undefined; + } + + // sample return -> [sy=2023, sm=10, sd=11] + return [ + Number(year) > 0 ? `${dateCategory}y=${year}` : "", + Number(month) > 0 ? `${dateCategory}m=${month}` : "", + Number(date) > 0 ? `${dateCategory}d=${date}` : "", + ].filter((d) => Boolean(d)); +} + +export function substringAfter(str: string, toFind: string) { + const index = str.indexOf(toFind); + return index == -1 ? "" : str.substring(index + toFind.length); +} + +export function substringBefore(str: string, toFind: string) { + const index = str.indexOf(toFind); + return index == -1 ? "" : str.substring(0, index); +} diff --git a/src/special/aniwatch-api-main/test/animeAboutInfo.test.ts b/src/special/aniwatch-api-main/test/animeAboutInfo.test.ts new file mode 100644 index 0000000..2cdc0cb --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeAboutInfo.test.ts @@ -0,0 +1,11 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeAboutInfo } from "../src/parsers/index.js"; + +test("returns information about an anime", async () => { + const data = await scrapeAnimeAboutInfo("steinsgate-3"); + + expect(data.anime.info.name).not.toEqual(null); + expect(data.recommendedAnimes).not.toEqual([]); + expect(data.mostPopularAnimes).not.toEqual([]); + expect(Object.keys(data.anime.moreInfo)).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeCategory.test.ts b/src/special/aniwatch-api-main/test/animeCategory.test.ts new file mode 100644 index 0000000..55ad873 --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeCategory.test.ts @@ -0,0 +1,12 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeCategory } from "../src/parsers/index.js"; + +test("returns animes belonging to a category", async () => { + const data = await scrapeAnimeCategory("subbed-anime"); + + expect(data.animes).not.toEqual([]); + expect(data.genres).not.toEqual([]); + expect(data.top10Animes.today).not.toEqual([]); + expect(data.top10Animes.week).not.toEqual([]); + expect(data.top10Animes.month).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeEpisodeSrcs.test.ts b/src/special/aniwatch-api-main/test/animeEpisodeSrcs.test.ts new file mode 100644 index 0000000..3aed842 --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeEpisodeSrcs.test.ts @@ -0,0 +1,13 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeEpisodeSources } from "../src/parsers/index.js"; + +test("returns anime episode streaming link(s)", async () => { + const data = await scrapeAnimeEpisodeSources( + "steinsgate-3?ep=230", + "vidstreaming", + "sub" + ); + + expect(data.sources).not.toEqual([]); + // expect(data) +}); diff --git a/src/special/aniwatch-api-main/test/animeEpisodes.test.ts b/src/special/aniwatch-api-main/test/animeEpisodes.test.ts new file mode 100644 index 0000000..f727056 --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeEpisodes.test.ts @@ -0,0 +1,9 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeEpisodes } from "../src/parsers/index.js"; + +test("returns episodes info of an anime", async () => { + const data = await scrapeAnimeEpisodes("steinsgate-3"); + + expect(data.totalEpisodes).not.toEqual(0); + expect(data.episodes).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeGenre.test.ts b/src/special/aniwatch-api-main/test/animeGenre.test.ts new file mode 100644 index 0000000..9e6610a --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeGenre.test.ts @@ -0,0 +1,10 @@ +import { expect, test } from "vitest"; +import { scrapeGenreAnime } from "../src/parsers/index.js"; + +test("returns animes belonging to a genre", async () => { + const data = await scrapeGenreAnime("shounen", 2); + + expect(data.animes).not.toEqual([]); + expect(data.genres).not.toEqual([]); + expect(data.topAiringAnimes).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeProducer.test.ts b/src/special/aniwatch-api-main/test/animeProducer.test.ts new file mode 100644 index 0000000..ae17c83 --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeProducer.test.ts @@ -0,0 +1,12 @@ +import { expect, test } from "vitest"; +import { scrapeProducerAnimes } from "../src/parsers/index.js"; + +test("returns animes produced by a producer", async () => { + const data = await scrapeProducerAnimes("toei-animation", 2); + + expect(data.animes).not.toEqual([]); + expect(data.topAiringAnimes).not.toEqual([]); + expect(data.top10Animes.today).not.toEqual([]); + expect(data.top10Animes.week).not.toEqual([]); + expect(data.top10Animes.month).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeSearch.test.ts b/src/special/aniwatch-api-main/test/animeSearch.test.ts new file mode 100644 index 0000000..efd2641 --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeSearch.test.ts @@ -0,0 +1,9 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeSearch } from "../src/parsers/index.js"; + +test("returns animes related to search query", async () => { + const data = await scrapeAnimeSearch("monster", 2); + + expect(data.animes).not.toEqual([]); + expect(data.mostPopularAnimes).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/animeSearchSuggestion.test.ts b/src/special/aniwatch-api-main/test/animeSearchSuggestion.test.ts new file mode 100644 index 0000000..f3a875a --- /dev/null +++ b/src/special/aniwatch-api-main/test/animeSearchSuggestion.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from "vitest"; +import { scrapeAnimeSearchSuggestion } from "../src/parsers/index.js"; + +test("returns animes search suggestions related to search query", async () => { + const data = await scrapeAnimeSearchSuggestion("one piece"); + + expect(data.suggestions).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/episodeServers.test.ts b/src/special/aniwatch-api-main/test/episodeServers.test.ts new file mode 100644 index 0000000..73cc5ca --- /dev/null +++ b/src/special/aniwatch-api-main/test/episodeServers.test.ts @@ -0,0 +1,11 @@ +import { expect, test } from "vitest"; +import { scrapeEpisodeServers } from "../src/parsers/index.js"; + +test("returns episode source servers", async () => { + const data = await scrapeEpisodeServers("steinsgate-0-92?ep=2055"); + + expect(data.episodeId).not.toEqual(null); + expect(data.episodeNo).not.toEqual(0); + expect(data.sub).not.toEqual([]); + expect(data.dub).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/estimatedSchedule.test.ts b/src/special/aniwatch-api-main/test/estimatedSchedule.test.ts new file mode 100644 index 0000000..cd5f417 --- /dev/null +++ b/src/special/aniwatch-api-main/test/estimatedSchedule.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from "vitest"; +import { scrapeEstimatedSchedule } from "../src/parsers/index.js"; + +test("returns estimated schedule anime release", async () => { + const data = await scrapeEstimatedSchedule("2024-03-30"); + + expect(data.scheduledAnimes).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/test/homePage.test.ts b/src/special/aniwatch-api-main/test/homePage.test.ts new file mode 100644 index 0000000..192a060 --- /dev/null +++ b/src/special/aniwatch-api-main/test/homePage.test.ts @@ -0,0 +1,17 @@ +import { expect, test } from "vitest"; +import { scrapeHomePage } from "../src/parsers/index.js"; + +test("returns anime information present in homepage", async () => { + const data = await scrapeHomePage(); + + expect(data.spotlightAnimes).not.toEqual([]); + expect(data.trendingAnimes).not.toEqual([]); + expect(data.latestEpisodeAnimes).not.toEqual([]); + expect(data.topUpcomingAnimes).not.toEqual([]); + expect(data.topAiringAnimes).not.toEqual([]); + expect(data.genres).not.toEqual([]); + + expect(data.top10Animes.today).not.toEqual([]); + expect(data.top10Animes.week).not.toEqual([]); + expect(data.top10Animes.month).not.toEqual([]); +}); diff --git a/src/special/aniwatch-api-main/tsconfig.json b/src/special/aniwatch-api-main/tsconfig.json new file mode 100644 index 0000000..278db51 --- /dev/null +++ b/src/special/aniwatch-api-main/tsconfig.json @@ -0,0 +1,38 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "skipLibCheck": true, + "target": "ES2022", + "verbatimModuleSyntax": true, + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + // + "strict": true, + // "noUncheckedIndexedAccess": true, + // + "moduleResolution": "NodeNext", + "module": "NodeNext", + "outDir": "./dist", + "rootDir": "./", + "sourceMap": true, + // + "declaration": true, + "removeComments": true, + "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true, + "lib": [ + "ES2022" + ] + }, + "include": [ + "./src", + "./api" + ], + "ts-node": { + "esm": true + }, + "exclude": [ + "node_modules", + ], +} \ No newline at end of file diff --git a/src/special/aniwatch-api-main/vercel.json b/src/special/aniwatch-api-main/vercel.json new file mode 100644 index 0000000..2bc8c24 --- /dev/null +++ b/src/special/aniwatch-api-main/vercel.json @@ -0,0 +1,8 @@ +{ + "rewrites": [ + { + "source": "(.*)", + "destination": "/api" + } + ] +} \ No newline at end of file diff --git a/src/special/aniwatch-api-main/vitest.config.ts b/src/special/aniwatch-api-main/vitest.config.ts new file mode 100644 index 0000000..9b2eb0f --- /dev/null +++ b/src/special/aniwatch-api-main/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + name: "aniwatch-api", + environment: "node", + testTimeout: 6000, + }, +}); diff --git a/src/start.js b/src/start.js index 218b2c5..245cff0 100644 --- a/src/start.js +++ b/src/start.js @@ -1,6 +1,8 @@ const readline = require("readline/promises") const fs = require("fs") const path = require("path") +const cp = require('child_process') +const terminate = require('terminate') const prompter = readline.createInterface({ input: process.stdin, @@ -27,6 +29,14 @@ const downloader = require('./downloader/main') `) if(!fs.existsSync(path.join(__dirname, "cookies.txt"))) fs.writeFileSync(path.join(__dirname, "cookies.txt"), '')*/ +process.oldKill = process.exit +process.exit = function(...args) { + if(manager.get('pid') && util.downloader() === 4) terminate(manager.get('pid')) + manager.set('pid', undefined) + + return process.oldKill(...args) +} + if(!fs.existsSync(path.join(__dirname, '..', '.cache'))) fs.mkdirSync(path.join(__dirname, '..', '.cache')) fs.readdirSync(path.join(__dirname, '..', '.cache')).filter(v => v.startsWith('temp-')).map(v => { return path.join(__dirname, '..', '.cache', v) }).forEach(l => { return fs.rmSync(l, { force: true })} ) @@ -66,7 +76,33 @@ function listPrompt(list = [], title = 'list', str = '') { }) } +function anihost() { + return new Promise(async(resolve) => { + process.env.NODE_ENV='PROD' + const aniwatch = path.join(__dirname, 'special', 'aniwatch-api-main') + + if(util.downloader() === 4) { + let aniServer = cp.exec(`cd ${aniwatch} && npm start`, async(err) => { + if(err) { + if(manager.get('pid')) { + terminate(manager.get('pid')) + return resolve(await anihost()) + } + + console.log(err) + return process.exit(1) + } + }) + manager.set('pid', aniServer.pid) + } + + return resolve() + }) +} + async function start() { + await anihost() + let net = await util.checkInternet() if(!net) return process.exit(1) @@ -74,7 +110,11 @@ async function start() { let result = await prompt(false, false, false, false, verCheck.msg) + if(manager.get('pid') && util.downloader() === 4) terminate(manager.get('pid')) + manager.set('pid', undefined) + if(result === 100) return process.exit(0) + else return process.exit(1) } function prompt(plId, q, f, t, verMsg) { @@ -93,6 +133,8 @@ function prompt(plId, q, f, t, verMsg) { manager.reset() } } + + if(util.downloader() === 4) t = 'n' let inner = String(t || await prompter.question("Multiple Playlist: (y/N) ")).toLowerCase() if(util.boolean(inner)) { @@ -112,8 +154,10 @@ function prompt(plId, q, f, t, verMsg) { return resolve(await main(true, false, false, false, in_outputdir, in_move)) } - let playlistId = plId || await prompter.question("Playlist: ") - if(util.fetchId(util.fetchPlaylistID(playlistId)) === 'unknown') return resolve(await prompt(plId, q, f, 'n', verMsg)) + let checker = util.downloader() === 4 ? 'Anime Title: ' : "Playlist: " + let playlistId = plId || await prompter.question(checker) + + if(util.fetchId(util.fetchPlaylistID(playlistId)) === 'unknown' && util.downloader() !== 4) return resolve(await prompt(plId, q, f, 'n', verMsg)) let quality_list = util.qualityCheck(null, true) let quality = String(q || (await listPrompt(quality_list, 'Quality'))).toLowerCase() @@ -133,7 +177,7 @@ function prompt(plId, q, f, t, verMsg) { let makeExceptions = await filters(verMsg, format, quality) prog.log("Welcome To ".green+"YouTube Playlist Downloader".red+" by MerasGD".green+'\n'+verMsg) - let areyousure = String(await prompter.question(`Data:\nPlaylistID: ${(util.fetchPlaylistID(playlistId)).cyan}\nQuality: ${(quality).cyan}\nFormat: ${(format).cyan}\nOutput Dir: ${(outputdir).cyan}\nCompress: ${String(move ? false : true).cyan}\nSettings: ${JSON.stringify(makeExceptions).cyan}\n\nAre you sure with this: (y/N) `)) + let areyousure = String(await prompter.question(`Data:\n${checker}${(util.fetchPlaylistID(playlistId)).cyan}\nQuality: ${(quality).cyan}\nFormat: ${(format).cyan}\nOutput Dir: ${(outputdir).cyan}\nCompress: ${String(move ? false : true).cyan}\nSettings: ${JSON.stringify(makeExceptions).cyan}\n\nAre you sure with this: (y/N) `)) if(!util.boolean(areyousure)) { return resolve(await prompt(false, false, false, false, verMsg)) } @@ -144,7 +188,9 @@ function prompt(plId, q, f, t, verMsg) { function filters(verMsg, d_format, d_quality) { return new Promise(async(resolve) => { - let makeOne = await prompter.question('Settings for a video: (y/N) ') + let checker = util.downloader() === 4 ? 'an anime episode' : "a video" + + let makeOne = await prompter.question(`Settings for ${checker}: (y/N) `) let all = [] if(!util.boolean(makeOne)) { @@ -154,13 +200,23 @@ function filters(verMsg, d_format, d_quality) { function addUp(type) { return new Promise(async(resolv) => { let data = {} - let tit = `[VideoSetting:${all.length+1}] ` + let y = util.downloader() === 4 ? 'AnimeSetting' : 'VideoSetting' + let tit = `[${y}:${all.length+1}] ` if(type === 'GIVE_UP') { return resolv(all) } + + let toEdit = 'Video' + let leType = type + + if(util.downloader() === 4) { + type = 'INDEX' + toEdit = 'Anime' + leType = 'Episode' + } - let id = await prompter.question(tit+`Video ${type}: `) + let id = await prompter.question(tit+`${toEdit} ${leType}: `) if(id === 'n' || id === 'no' || id === '' || !id) return resolv(await addUp( (type === 'ID' ? 'TITLE' : (type === 'TITLE' ? 'INDEX' : 'GIVE_UP')) )) if(type === 'ID') { @@ -285,6 +341,7 @@ function main(inner, id, quality, format, outputdir, move, settings, isThereLeft } else if(result === 102) { prog.log("Found an invalid format use...".red.bold) return process.exit(1) + return process.exit(1) } else if(result === 103) { prog.log("Found an invalid quality...".red.bold) return process.exit(1) @@ -304,6 +361,8 @@ function main(inner, id, quality, format, outputdir, move, settings, isThereLeft let search_result = isThereLeft ? isThereLeft.data : await searching(id, { quality, format, settings }) + if(!search_result || search_result.error || search_result === 101) return resolve(101) + let playlist_title = search_result.playlist let playlist_videos = search_result.videos let playlist_author = search_result.author @@ -318,6 +377,9 @@ function main(inner, id, quality, format, outputdir, move, settings, isThereLeft await compressor(dl_result, move, outputdir) + if(manager.get('pid')) terminate(manager.get('pid')) + manager.set('pid', undefined) + return resolve(100) }) } diff --git a/src/tools/multiple_download.js b/src/tools/multiple_download.js index 64caf59..070bc68 100644 --- a/src/tools/multiple_download.js +++ b/src/tools/multiple_download.js @@ -105,7 +105,6 @@ module.exports = function(url, data, cb) { audioEnded = true }) - setInterval(() => checkProgress()) setInterval(() => checkEnd()) dlV.start() diff --git a/src/utils/manager.js b/src/utils/manager.js index 6fe591b..d34f2a8 100644 --- a/src/utils/manager.js +++ b/src/utils/manager.js @@ -23,7 +23,7 @@ module.exports.write = function(data) { module.exports.reset = function() { if(!tools.config['safe_download']) return {} - fs.writeFileSync(lock, '{}') + fs.writeFileSync(lock, JSON.stringify({ "pid": module.exports.get('pid') || undefined }, null, 4)) return {} } @@ -34,6 +34,20 @@ module.exports.get = function(key) { return module.exports.read()[key] } +module.exports.set = function(id, val) { + if(!tools.config['safe_download']) return {} + + let base = module.exports.read() + + if(base[id]) return base[id] + + base[id] = val + + module.exports.write(base) + + return val +} + module.exports.save = function(plID, pltitle, arr, out, move, author, lastindex) { if(!tools.config['safe_download']) return {} @@ -95,11 +109,11 @@ module.exports.delete = function(plId) { module.exports.left = function() { if(!tools.config['safe_download']) return false - let all = Object.keys(module.exports.read()) + let all = Object.keys(module.exports.read()).filter(v => v !== 'pid') if(!all || all.length <= 0) return false - return Object.keys(module.exports.read()).map(v => { + return all.map(v => { return module.exports.get(v) }) } diff --git a/src/utils/media.js b/src/utils/media.js index 5140433..4bc97c1 100644 --- a/src/utils/media.js +++ b/src/utils/media.js @@ -26,6 +26,8 @@ module.exports.ffmpeg = function(args) { return resolve(101) }) + //proc.stderr.on('data', (d) => console.log(d.toString())) + proc.on('close', async() => { return resolve(100) }) @@ -186,9 +188,9 @@ module.exports.editSongMetadata = function(playlistTitle, track, url, raw_path, }) } -module.exports.editVideoMetadata = function(playlistTitle, ep, video_title, progressData, url, video_path, nometadata, cover, final_format, final_dl_path, composer) { +module.exports.editVideoMetadata = function(playlistTitle, ep, video_title, progressData, url, video_path, nometadata, cover, final_format, final_dl_path, composer, met) { return new Promise(async(resolve) => { - let data = await util.searchYt(url, [ + let data = met && typeof met === 'object' ? met : await util.searchYt(url, [ String(playlistTitle).green.bold, ("Downloading \""+video_title+'"').yellow, progressData, diff --git a/src/utils/progress.js b/src/utils/progress.js index 57a112a..9368355 100644 --- a/src/utils/progress.js +++ b/src/utils/progress.js @@ -81,8 +81,9 @@ module.exports.multipleProgress = (progressList = []) => { let raw_size = tools.config['centered_logging'] && terminal ? Math.floor((terminal.length) - (total === 100 ? Math.floor(2 + String(current).length) : Math.floor(2 + Math.floor(String(total).length + String(current).length)))) : 40 let size = speed ? raw_size - 1 - String(speed).length : raw_size + let final_size = terminal.length >= 90 ? 100 : size - const [bar] = createFilledBar(total, current, terminal.length >= 100 ? 100 : size); + let [bar] = createFilledBar(total, current, final_size); return tools.config['centered_logging'] && terminal ? (total === 100 ? speed ? `${bar} ${String(speed)} ${current}%\n${label}` : `${bar} ${current}%\n${label}` : speed ? `${bar} ${String(speed)} ${current}/${total}\n${label}` : `${bar} ${current}/${total}\n${label}`) : `${bar} ${label} ${current}/${total}` }).filter(v => v !== 'not-bar') diff --git a/src/utils/tools.js b/src/utils/tools.js index adb8625..e38c22f 100644 --- a/src/utils/tools.js +++ b/src/utils/tools.js @@ -5,6 +5,7 @@ const ffmpeg = require('ffmpeg-static') const check_net = require('check-internet-connected') const request = require('request') const url = require('node:url') +const terminate = require('terminate') const prog = require('./progress') @@ -13,14 +14,15 @@ const metadata = require('../tools/ffmetadata') metadata.setFfmpegPath(ffmpeg) module.exports.sanitizeTitle = function (title) { - return String(title).replaceAll(/[\\/:*"?|<>]/g, ''); + return String(title).replaceAll(/[\\/:*"?|<>]/g, '').replaceAll('.', '') } +module.exports.consumet_options = Object.assign(process.env, { NODE_ENV: 'PROD' }) module.exports.config = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'settings', 'config.json'), { encoding: 'utf-8' })) module.exports.settings = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'settings', 'download.json'), { encoding: 'utf-8' })) module.exports.downloader = function(list) { - let types = ['split-v1', 'single-v1', 'split-v2', 'single-v2'].map((v, i) => { return { value: v, index: i } }) + let types = ['split-v1', 'single-v1', 'split-v2', 'single-v2', 'anime-downloader'].map((v, i) => { return { value: v, index: i } }) let input = module.exports.config['downloader'] if(list) return types.map(v => v.value) @@ -199,7 +201,7 @@ module.exports.pathCheck = function(input = "", input2) { if(!fs.existsSync(downloads) && check) fs.mkdirSync(downloads) if(check) return downloads - if(fs.existsSync(input2) && (fs.statSync(input2).isDirectory())) return input + if(fs.existsSync(input2) && (fs.statSync(input2).isDirectory())) return path.resolve(input) return false } @@ -209,7 +211,7 @@ module.exports.qualityCheck = function(input, list) { 'highest', 'medium', 'lowest' - ].filter(v => !module.exports.config['split_download_v2'] && v !== 'medium') + ].filter(v => ((module.exports.downloader() === 0 || module.exports.downloader() === 1) && v !== 'medium') || !(module.exports.downloader() === 0 || module.exports.downloader() === 1)) if(list) return quality