|
@@ -328,6 +328,99 @@ class _YouTubeModule extends CoreClass {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Gets the id of the channel from the custom URL
|
|
|
+ *
|
|
|
+ * @param {object} payload - object that contains the payload
|
|
|
+ * @param {string} payload.customUrl - the customUrl of the YouTube channel
|
|
|
+ * @returns {Promise} - returns promise (reject, resolve)
|
|
|
+ */
|
|
|
+ GET_CHANNEL_ID_FROM_CUSTOM_URL(payload) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ async.waterfall(
|
|
|
+ [
|
|
|
+ next => {
|
|
|
+ const params = {
|
|
|
+ part: "snippet",
|
|
|
+ type: "channel",
|
|
|
+ maxResults: 50
|
|
|
+ };
|
|
|
+
|
|
|
+ params.q = payload.customUrl;
|
|
|
+
|
|
|
+ YouTubeModule.runJob(
|
|
|
+ "API_SEARCH",
|
|
|
+ {
|
|
|
+ params
|
|
|
+ },
|
|
|
+ this
|
|
|
+ )
|
|
|
+ .then(({ response }) => {
|
|
|
+ const { data } = response;
|
|
|
+
|
|
|
+ if (data.pageInfo.totalResults === 0) return next("Channel not found.");
|
|
|
+
|
|
|
+ const channelIds = data.items.map(item => item.id.channelId);
|
|
|
+
|
|
|
+ return next(null, channelIds);
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ next(err);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ (channelIds, next) => {
|
|
|
+ const params = {
|
|
|
+ part: "snippet",
|
|
|
+ id: channelIds.join(","),
|
|
|
+ maxResults: 50
|
|
|
+ };
|
|
|
+
|
|
|
+ YouTubeModule.runJob(
|
|
|
+ "API_GET_CHANNELS",
|
|
|
+ {
|
|
|
+ params
|
|
|
+ },
|
|
|
+ this
|
|
|
+ )
|
|
|
+ .then(({ response }) => {
|
|
|
+ const { data } = response;
|
|
|
+
|
|
|
+ if (data.pageInfo.totalResults === 0) return next("Channel not found.");
|
|
|
+
|
|
|
+ let channelId = null;
|
|
|
+ for (const item of data.items) {
|
|
|
+ if (item.snippet.customUrl && item.snippet.customUrl.toLowerCase() === payload.customUrl.toLowerCase()) {
|
|
|
+ channelId = item.id;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!channelId) return next("Channel not found.");
|
|
|
+
|
|
|
+ return next(null, channelId);
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ next(err);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ (channelId, err) => {
|
|
|
+ if (err) {
|
|
|
+ YouTubeModule.log("ERROR", "GET_CHANNEL_ID_FROM_CUSTOM_URL", `${err.message}`);
|
|
|
+ if (err.message === "Request failed with status code 404") {
|
|
|
+ return reject(new Error("Channel not found. Is the channel public/unlisted?"));
|
|
|
+ }
|
|
|
+ return reject(new Error("An error has occured. Please try again later."));
|
|
|
+ }
|
|
|
+
|
|
|
+ return resolve({ channelId });
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Returns an array of songs taken from a YouTube playlist
|
|
|
*
|