youtube-video-exists
Version:
Checks if a YouTube video exists under the given ID. No API key is required.
63 lines (56 loc) • 1.75 kB
JavaScript
import axios from 'axios';
/**
* Source: https://webapps.stackexchange.com/a/101153
*/
var idRegex = /*#__PURE__*/new RegExp('^([0-9A-Za-z_-]{10}[048AEIMQUYcgkosw])$');
/**
* Checks if a YouTube video exists under the given ID
*
* When a video is found the return object also includes the title and author of the video
*
* @param id - YouTube video id
* @returns {@link VideoInfoResponse} when {@link Promise} is resolved
* @throws {@link AxiosError} when a network issue occurred
*/
function getVideoInfo(id) {
var videoInfoResponse = {
existing: false,
validId: false,
"private": undefined,
info: undefined
};
if (idRegex.test(id)) {
videoInfoResponse.validId = true;
return axios.request({
url: 'oembed',
baseURL: 'https://www.youtube.com/',
params: {
url: "https://youtu.be/" + id,
format: 'json'
},
validateStatus: function validateStatus(status) {
return status === 200 || status === 404 || status === 401;
}
}).then(function (response) {
if (response.status === 200) {
videoInfoResponse.existing = true;
videoInfoResponse["private"] = false;
videoInfoResponse.info = {
title: response.data.title,
author: {
name: response.data.author_name,
url: response.data.author_url
}
};
} else if (response.status === 401) {
videoInfoResponse.existing = true;
videoInfoResponse["private"] = true;
}
return videoInfoResponse;
});
} else return new Promise(function (resolve) {
return resolve(videoInfoResponse);
});
}
export { getVideoInfo };
//# sourceMappingURL=youtube-video-exists.esm.js.map