youtubei
Version:
Simple package to get information from youtube such as videos, playlists, channels, video information & comments, related videos, up next video, and more!
96 lines (95 loc) • 3.8 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MusicSearchResult = exports.MusicSearchTypeEnum = void 0;
const MusicContinuable_1 = require("../MusicContinuable");
const constants_1 = require("../constants");
const MusicSearchResultParser_1 = require("./MusicSearchResultParser");
const proto_1 = require("./proto");
var MusicSearchTypeEnum;
(function (MusicSearchTypeEnum) {
MusicSearchTypeEnum["Song"] = "song";
MusicSearchTypeEnum["Video"] = "video";
})(MusicSearchTypeEnum = exports.MusicSearchTypeEnum || (exports.MusicSearchTypeEnum = {}));
/**
* Represents search result, usually returned from `client.search();`.
*
* {@link MusicSearchResult} is a helper class to manage search result
*
* @example
* ```ts
* const result = await music.search("Keyword", "song");
*
* console.log(result.items); // search result from first page
*
* let nextSearchResult = await result.next();
* console.log(nextSearchResult); // search result from second page
*
* nextSearchResult = await result.next();
* console.log(nextSearchResult); // search result from third page
*
* console.log(result.items); // search result from first, second, and third page.
* ```
*
* @noInheritDoc
*/
class MusicSearchResult extends MusicContinuable_1.MusicContinuable {
/** @hidden */
constructor({ client, type }) {
super({ client });
if (type)
this.type = type;
}
/**
* Initialize data from search
*
* @param query Search query
* @param options Search Options
*
* @hidden
*/
search(query, type) {
return __awaiter(this, void 0, void 0, function* () {
this.items = [];
this.type = type;
const bufferParams = proto_1.MusicSearchProto.encode(proto_1.optionsToProto(type)).finish();
const response = yield this.client.http.post(`${constants_1.I_END_POINT}/search`, {
data: {
query,
params: Buffer.from(bufferParams).toString("base64"),
},
});
const { data, continuation } = MusicSearchResultParser_1.MusicSearchResultParser.parseInitialSearchResult(response.data, type, this.client);
this.items.push(...data);
this.continuation = continuation;
return this;
});
}
fetch() {
return __awaiter(this, void 0, void 0, function* () {
if (!this.type) {
return {
items: [],
continuation: undefined,
};
}
const response = yield this.client.http.post(`${constants_1.I_END_POINT}/search`, {
data: { continuation: this.continuation },
});
const { data, continuation } = MusicSearchResultParser_1.MusicSearchResultParser.parseContinuationSearchResult(response.data, this.type, this.client);
return {
items: data,
continuation,
};
});
}
}
exports.MusicSearchResult = MusicSearchResult;