Mục Lục
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.