Initial commit
This commit is contained in:
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
61
.gitignore
vendored
Normal file
61
.gitignore
vendored
Normal file
@@ -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
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -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.
|
||||||
40
index.js
Normal file
40
index.js
Normal file
@@ -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`);
|
||||||
|
});
|
||||||
47
package-lock.json
generated
Normal file
47
package-lock.json
generated
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
package.json
Normal file
15
package.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
videos.txt
Normal file
9
videos.txt
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user