commit f5166268b622e794a4c31ce3480e3d3742719b51 Author: plane000 Date: Sun Jul 29 18:35:25 2018 +0100 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad46b30 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..46bd9cd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 plane000 + +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/index.js b/index.js new file mode 100644 index 0000000..4af58cd --- /dev/null +++ b/index.js @@ -0,0 +1,40 @@ +const fs = require('fs'); +const ytdl = require('ytdl-core'); + +let videos = []; + +if (!fs.existsSync('./videos.txt')) { + console.log('Could not find videos.txt, make sure it exists and has youtube links, each on new lines'); + process.exit(); +} + +let text = fs.readFileSync('./videos.txt').toString(); +text.split('\n').forEach((line) => { + videos.push(line.replace(/\r/, '')); +}); + +videos.forEach((url) => { + if (ytdl.validateURL(url)) { + ytdl.getInfo(url, (err, info) => { + if (err) { + console.log(`An error occured while downloading '${url}'`) + } else { + let title = info.title; + + try { + let stream = ytdl(url, {quality: 'highest'}).pipe(fs.createWriteStream(`${title}.mp4`)); + stream.on('finish', () => console.log(`Finish downloading ${title}`)); + } catch (e) { + console.log(`An error occured while downloaing '${title}' retrying`) + try { + let stream = ytdl(url, {quality: 'highest'}).pipe(fs.createWriteStream(`${title}.mp4`)); + stream.on('finish', () => console.log(`Finish downloading '${title}'`)); + } catch (e) { + console.log(`Unable to download '${title}'`) + } + } + console.log(`Downloading '${title}'`); + } + }) + } else console.log(`Video ${url} was not found`); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..06a5410 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,47 @@ +{ + "name": "youtube-dowloader", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "m3u8stream": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.3.0.tgz", + "integrity": "sha512-0tvjXDIa6BolPEGo9zioQiPqfQhjopZXN3L7vZH/rZQCOLd4rPXNZc1UBMdW3TRpjNBoD0+F1X41/f0iY23rlQ==", + "requires": { + "miniget": "1.2.0" + } + }, + "miniget": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.2.0.tgz", + "integrity": "sha1-ADY3Oia71S2+aUX85sjAOR6eEkE=" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "ytdl-core": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.21.1.tgz", + "integrity": "sha512-K6ysXuHW0X3MgeLpO4IHvHp5gdF2DDrgFPP7kQODBSpeaq4+/y8lvWy6ZpxtJdQGE0+GUaBZ2H1/kYcP327UdQ==", + "requires": { + "html-entities": "1.2.1", + "m3u8stream": "0.3.0", + "miniget": "1.2.0", + "sax": "1.2.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2b8be26 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "youtube-dowloader", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Ben (plane000)", + "license": "MIT", + "dependencies": { + "fs": "0.0.1-security", + "ytdl-core": "^0.21.1" + } +} diff --git a/videos.txt b/videos.txt new file mode 100644 index 0000000..632ba61 --- /dev/null +++ b/videos.txt @@ -0,0 +1,9 @@ +https://www.youtube.com/watch?v=Np1dc0BoS4k&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1 +https://www.youtube.com/watch?v=YoIMP57as4A&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=2 +https://www.youtube.com/watch?v=8ys_n86INW0&index=3&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1 +https://www.youtube.com/watch?v=78nD9HeN2wU&index=4&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1 +https://www.youtube.com/watch?v=2HlgmpcYrKs&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=5 +https://www.youtube.com/watch?v=mNJjJ5JjQdc&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=6 +https://www.youtube.com/watch?v=-zK-sOTujMc&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=7 +https://www.youtube.com/watch?v=vRUh0XNORiY&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=8 +https://www.youtube.com/watch?v=Z3ZqRVrHAbY&list=PL8flSFeCsFvJhFpz0usI6diGT2stP8WF1&index=9 \ No newline at end of file