Công nghệ, Nodejs

Script Đơn Giản để Tải Về Tất Cả Video Short từ YouTube

Script Đơn Giản để Tải Về Tất Cả Video Short từ YouTube

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách viết một đoạn script đơn giản bằng ngôn ngữ lập trình JavaScript để thu thập và tải về tất cả video short từ một kênh YouTube. Chúng ta sẽ sử dụng thư viện `puppeteer` để làm việc với trình duyệt và thư viện `ytdl-core` để tải về video.

Chuẩn bị

Trước khi chạy script, bạn cần cài đặt một số công cụ và thư viện cần thiết:

1. Node.js và npm: Đảm bảo bạn đã cài đặt Node.js và npm trên máy tính của mình. Bạn có thể tải xuống và cài đặt từ trang chính thức của Node.js.

2. Cài đặt thư viện: Chạy lệnh sau để cài đặt thư viện `puppeteer` và `ytdl-core`:

Hãy ủng hộ tôi 1 cốc caffe nếu bạn cảm thấy website có ích.!

1
npm install puppeteer ytdl-core fs

Script và Giải Thích

Dưới đây là đoạn mã script cùng với giải thích từng phần:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Import các thư viện cần thiết
const puppeteer = require('puppeteer');
const ytdl = require('ytdl-core');
const fs = require('fs');
// Function để lấy danh sách video IDs từ kênh YouTube
async function getVideoIds(url) {
// Khởi tạo trình duyệt
const browser = await puppeteer.launch({
// Các tùy chọn khởi chạy trình duyệt
defaultViewport: null,
headless: false,
args: ["--disable-setuid-sandbox", "--start-maximized"],
'ignoreHTTPSErrors': true
});
// Tạo một trang mới
const page = await browser.newPage();
// Điều hướng đến URL của kênh YouTube
await page.goto(url);
// Lăn chuột để tải tất cả các phần tử trên trang
await page.waitForXPath('//*[@id="thumbnail"]');
await page.evaluate(() => new Promise((resolve) => {
var scrollTop = -1;
const interval = setInterval(() => {
window.scrollBy(0, 250);
if(document.documentElement.scrollTop !== scrollTop) {
scrollTop = document.documentElement.scrollTop;
return;
}
clearInterval(interval);
resolve();
}, 500);
}));
// Lấy các URLs video từ trang
const options = await page.$$eval('#thumbnail', options => {
return options.map(option => option.href);
});
// Đóng trình duyệt
await browser.close();
return options;
}
// Hàm chờ trong một khoảng thời gian
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
// URL của kênh YouTube chứa các video short
const channelUrl = '{link kênh short}';
// Function để tải về các video
async function downloadVideos() {
try {
// Lấy danh sách video IDs
const videoIds = await getVideoIds(channelUrl);
// Lặp qua từng video và tải về
for (let i = 0; i < videoIds.length; i++) {
const link = videoIds[i];
await sleep(8000);
if (link) {
const randomnumber = Math.floor(Math.random() * 10000).toString()
const videoInfo = await ytdl.getInfo(link);
const videoTitle = videoInfo.videoDetails.title.replace(/[^a-zA-Z0-9]/g, ''); // Loại bỏ các ký tự không hợp lệ từ tiêu đề
ytdl(link).pipe(fs.createWriteStream(`F:video/funnyanimal/${videoTitle}-${randomnumber}.mp4`));
console.log(link + ' ' + i);
}
}
} catch (err) {
console.error('Error:', err);
}
}
// Gọi hàm để bắt đầu tải về video
downloadVideos();

Giải thích script

1. Đoạn mã bắt đầu bằng việc import các thư viện `puppeteer`, `ytdl-core`, và `fs` để sử dụng trong script.
2. Hàm `getVideoIds(url)` được sử dụng để mở trình duyệt và lấy danh sách các URLs video từ kênh YouTube đã cho. Trong ví dụ này, chúng ta sử dụng `puppeteer` để tự động mở trình duyệt, truy cập vào URL của kênh và lấy các URLs video từ trang.
3. Hàm `sleep(milliseconds)` đơn giản là để đợi một khoảng thời gian nhất định giữa các lượt tải về video.
4. Hàm `downloadVideos()` là nơi chúng ta sử dụng danh sách các URLs video để tải về từng video bằng thư viện `ytdl-core`. Chúng ta cũng sử dụng thư viện `fs` để lưu trữ video đã tải xuống trên ổ đĩa.

Kết Luận

Qua bài viết này, bạn đã học cách viết một đoạn script đơn giản để tải về tất cả video short từ một kênh YouTube. Chú ý rằng việc tải video từ YouTube có thể bị giới hạn bởi các chính sách và điều khoản của YouTube. Hãy đảm bảo bạn hiểu rõ các quy định và hạn chế trước khi sử dụng script này.

Hãy ủng hộ tôi 1 cốc caffe nếu bạn cảm thấy website có ích.!

Được gắn thẻ ,