youtube.ts
Advanced tools
Comparing version 0.1.6 to 0.1.7
/// <reference types="node" /> | ||
import * as stream from "stream"; | ||
import stream from "stream"; | ||
import api from "../API"; | ||
@@ -20,2 +20,7 @@ import { YoutubeDownloadOptions, YoutubeVideo } from "../types"; | ||
streamMP3: (videoResolvable: string) => Promise<stream.Readable>; | ||
/** | ||
* Downloads the thumbnail of a youtube video. | ||
*/ | ||
downloadThumbnail: (videoResolvable: string, folder?: string) => Promise<string>; | ||
private readonly getVideo; | ||
} |
@@ -41,13 +41,7 @@ "use strict"; | ||
}; | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
return result; | ||
}; | ||
exports.__esModule = true; | ||
var axios_1 = __importDefault(require("axios")); | ||
var fs = __importStar(require("fs")); | ||
var querystring = __importStar(require("querystring")); | ||
var fs_1 = __importDefault(require("fs")); | ||
var path_1 = __importDefault(require("path")); | ||
var querystring_1 = __importDefault(require("querystring")); | ||
var ytdl_core_1 = __importDefault(require("ytdl-core")); | ||
@@ -154,11 +148,11 @@ var downloadURL = "https://www.youtube.com/download_my_video"; | ||
return [2 /*return*/, Promise.reject("Cannot download this video.")]; | ||
filename = querystring.unescape(response.headers["content-disposition"].replace("attachment; filename=\"", "").slice(0, -1)); | ||
filename = querystring_1["default"].unescape(response.headers["content-disposition"].replace("attachment; filename=\"", "").slice(0, -1)); | ||
if (!dest) | ||
dest = "./"; | ||
if (!fs.existsSync(dest)) | ||
fs.mkdirSync(dest, { recursive: true }); | ||
if (!fs_1["default"].existsSync(dest)) | ||
fs_1["default"].mkdirSync(dest, { recursive: true }); | ||
if (dest.endsWith("/")) | ||
dest = dest.slice(0, -1); | ||
dest = dest + "/" + filename; | ||
fs.writeFileSync(dest, Buffer.from(response.data, "binary")); | ||
fs_1["default"].writeFileSync(dest, Buffer.from(response.data, "binary")); | ||
return [2 /*return*/, dest]; | ||
@@ -298,5 +292,5 @@ } | ||
dest = dest.slice(0, -1); | ||
if (!fs.existsSync(dest)) | ||
fs.mkdirSync(dest, { recursive: true }); | ||
writeStream = fs.createWriteStream(dest + "/" + clean + ".mp4"); | ||
if (!fs_1["default"].existsSync(dest)) | ||
fs_1["default"].mkdirSync(dest, { recursive: true }); | ||
writeStream = fs_1["default"].createWriteStream(dest + "/" + clean + ".mp4"); | ||
return [4 /*yield*/, new Promise(function (resolve) { | ||
@@ -395,5 +389,5 @@ ytdl_core_1["default"](url, options).pipe(writeStream).on("finish", function () { return resolve(); }); | ||
dest = dest.slice(0, -1); | ||
if (!fs.existsSync(dest)) | ||
fs.mkdirSync(dest, { recursive: true }); | ||
writeStream = fs.createWriteStream(dest + "/" + clean + ".mp3"); | ||
if (!fs_1["default"].existsSync(dest)) | ||
fs_1["default"].mkdirSync(dest, { recursive: true }); | ||
writeStream = fs_1["default"].createWriteStream(dest + "/" + clean + ".mp3"); | ||
return [4 /*yield*/, new Promise(function (resolve) { | ||
@@ -488,2 +482,45 @@ ytdl_core_1["default"](url, { filter: "audioonly" }).pipe(writeStream).on("finish", function () { return resolve(); }); | ||
}); }; | ||
/** | ||
* Downloads the thumbnail of a youtube video. | ||
*/ | ||
this.downloadThumbnail = function (videoResolvable, folder) { return __awaiter(_this, void 0, void 0, function () { | ||
var video, thumbnail, dest, arrayBuffer; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
if (!folder) | ||
folder = "./"; | ||
if (!fs_1["default"].existsSync(folder)) | ||
fs_1["default"].mkdirSync(folder, { recursive: true }); | ||
return [4 /*yield*/, this.getVideo(videoResolvable)]; | ||
case 1: | ||
video = _a.sent(); | ||
thumbnail = video.snippet.thumbnails.maxres ? video.snippet.thumbnails.maxres.url : video.snippet.thumbnails.high.url; | ||
dest = path_1["default"].join(folder, video.snippet.title + ".png"); | ||
return [4 /*yield*/, axios_1["default"].get(thumbnail, { responseType: "arraybuffer" }).then(function (r) { return r.data; })]; | ||
case 2: | ||
arrayBuffer = _a.sent(); | ||
fs_1["default"].writeFileSync(dest, Buffer.from(arrayBuffer, "binary")); | ||
return [2 /*return*/, dest]; | ||
} | ||
}); | ||
}); }; | ||
this.getVideo = function (videoResolvable, params) { return __awaiter(_this, void 0, void 0, function () { | ||
var id, response; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
if (!params) | ||
params = {}; | ||
return [4 /*yield*/, this.resolveID(videoResolvable, "video")]; | ||
case 1: | ||
id = _a.sent(); | ||
params.id = id; | ||
return [4 /*yield*/, this.api.get("video", params)]; | ||
case 2: | ||
response = _a.sent(); | ||
return [2 /*return*/, response.items[0]]; | ||
} | ||
}); | ||
}); }; | ||
} | ||
@@ -490,0 +527,0 @@ return Util; |
@@ -46,29 +46,9 @@ "use strict"; | ||
(function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var c; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
// const result = await youtube.playlists.items("https://www.youtube.com/playlist?list=PL1BC175_2xP8ifSS9CM92G5eIOPRG1g7t") | ||
// const result = await youtube.playlists.item("PL1BC175_2xP8ifSS9CM92G5eIOPRG1g7t", "tenpi - moonlight (chill)") | ||
// const result = await youtube.channels.comments("tenpi") | ||
// const result = await youtube.comments.thread("UgzNgGMYuY6qJl0RV7d4AaABAg") | ||
// const result = await youtube.comments.get("UgzNgGMYuY6qJl0RV7d4AaABAg") | ||
// const result = await youtube.channels.subscriptions("https://www.youtube.com/channel/UCwgEMWqaNlp0TVb5BLqO-jg/videos") | ||
// await youtube.util.downloadMyVideo("mLJQ0HO5Alc", key, cookie, "./videos") | ||
// await youtube.util.downloadMyVideos("tenpi", key, cookie, "./videos/tenpi") | ||
return [4 /*yield*/, youtube.util.downloadMP3("https://www.youtube.com/watch?v=LysVlPg2fd8", "./videos/ytdl/bad") | ||
// await youtube.util.downloadChannelVideos("UC8qU4aFe81jzG1attsyQ5wQ", "./videos/tenpi") | ||
// console.log(result.items[0]) | ||
// const c = await youtube.videos.comments("https://www.youtube.com/watch?v=cZDsFjEmlDg") | ||
// console.log(c) | ||
]; | ||
case 0: return [4 /*yield*/, youtube.util.downloadThumbnail("https://www.youtube.com/watch?v=OJf04b6884E", "./videos")]; | ||
case 1: | ||
// const result = await youtube.playlists.items("https://www.youtube.com/playlist?list=PL1BC175_2xP8ifSS9CM92G5eIOPRG1g7t") | ||
// const result = await youtube.playlists.item("PL1BC175_2xP8ifSS9CM92G5eIOPRG1g7t", "tenpi - moonlight (chill)") | ||
// const result = await youtube.channels.comments("tenpi") | ||
// const result = await youtube.comments.thread("UgzNgGMYuY6qJl0RV7d4AaABAg") | ||
// const result = await youtube.comments.get("UgzNgGMYuY6qJl0RV7d4AaABAg") | ||
// const result = await youtube.channels.subscriptions("https://www.youtube.com/channel/UCwgEMWqaNlp0TVb5BLqO-jg/videos") | ||
// await youtube.util.downloadMyVideo("mLJQ0HO5Alc", key, cookie, "./videos") | ||
// await youtube.util.downloadMyVideos("tenpi", key, cookie, "./videos/tenpi") | ||
_a.sent(); | ||
c = _a.sent(); | ||
console.log(c); | ||
return [2 /*return*/]; | ||
@@ -75,0 +55,0 @@ } |
import axios from "axios" | ||
import * as fs from "fs" | ||
import * as querystring from "querystring" | ||
import * as stream from "stream" | ||
import fs from "fs" | ||
import path from "path" | ||
import querystring from "querystring" | ||
import stream from "stream" | ||
import ytdl from "ytdl-core" | ||
import api from "../API" | ||
import {YoutubeDownloadOptions, YoutubeVideo, YoutubeVideoSearchItem} from "../types" | ||
import {YoutubeDownloadOptions, YoutubeVideo, YoutubeVideoParams} from "../types" | ||
const downloadURL = "https://www.youtube.com/download_my_video" | ||
@@ -250,2 +251,24 @@ | ||
} | ||
/** | ||
* Downloads the thumbnail of a youtube video. | ||
*/ | ||
public downloadThumbnail = async (videoResolvable: string, folder?: string) => { | ||
if (!folder) folder = "./" | ||
if (!fs.existsSync(folder)) fs.mkdirSync(folder, {recursive: true}) | ||
const video = await this.getVideo(videoResolvable) | ||
const thumbnail = video.snippet.thumbnails.maxres ? video.snippet.thumbnails.maxres.url : video.snippet.thumbnails.high.url | ||
const dest = path.join(folder, `${video.snippet.title}.png`) | ||
const arrayBuffer = await axios.get(thumbnail, {responseType: "arraybuffer"}).then((r) => r.data) | ||
fs.writeFileSync(dest, Buffer.from(arrayBuffer, "binary")) | ||
return dest | ||
} | ||
private readonly getVideo = async (videoResolvable: string, params?: YoutubeVideoParams) => { | ||
if (!params) params = {} | ||
const id = await this.resolveID(videoResolvable, "video") | ||
params.id = id | ||
const response = await this.api.get("video", params) | ||
return response.items[0] as Promise<YoutubeVideo> | ||
} | ||
} |
{ | ||
"name": "youtube.ts", | ||
"version": "0.1.6", | ||
"version": "0.1.7", | ||
"description": "Wrapper for the YouTube API with typings.", | ||
@@ -5,0 +5,0 @@ "main": "dist/youtube.js", |
@@ -15,7 +15,7 @@ import Youtube from "./youtube" | ||
// await youtube.util.downloadMyVideos("tenpi", key, cookie, "./videos/tenpi") | ||
await youtube.util.downloadMP3("https://www.youtube.com/watch?v=LysVlPg2fd8", "./videos/ytdl/bad") | ||
// await youtube.util.downloadMP3("https://www.youtube.com/watch?v=LysVlPg2fd8", "./videos/ytdl/bad") | ||
// await youtube.util.downloadChannelVideos("UC8qU4aFe81jzG1attsyQ5wQ", "./videos/tenpi") | ||
// console.log(result.items[0]) | ||
// const c = await youtube.videos.comments("https://www.youtube.com/watch?v=cZDsFjEmlDg") | ||
// console.log(c) | ||
const c = await youtube.util.downloadThumbnail("https://www.youtube.com/watch?v=OJf04b6884E", "./videos") | ||
console.log(c) | ||
})() |
158057
3360