Socket
Socket
Sign inDemoInstall

youtube.ts

Package Overview
Dependencies
2
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.6 to 0.1.7

7

dist/entities/Util.d.ts
/// <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;
}

75

dist/entities/Util.js

@@ -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)
})()
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc