Skip to content

Instantly share code, notes, and snippets.

@stu43005
Created September 22, 2021 15:37
Show Gist options
  • Save stu43005/34586c0dffdadcc3a2af598604f26689 to your computer and use it in GitHub Desktop.
Save stu43005/34586c0dffdadcc3a2af598604f26689 to your computer and use it in GitHub Desktop.
Youtube livechat navigationEndpoint parser
function endpointToUrl(navigationEndpoint, params, promise = false) {
if (!navigationEndpoint)
return null;
let url = "";
if (navigationEndpoint.commandMetadata && navigationEndpoint.commandMetadata.webCommandMetadata && navigationEndpoint.commandMetadata.webCommandMetadata.url) {
url = navigationEndpoint.commandMetadata.webCommandMetadata.url;
} else if (navigationEndpoint.searchEndpoint) {
url = "/results?search_query=" + encodeURIComponent(navigationEndpoint.searchEndpoint.query).replace(/%20/g, "+");
if (navigationEndpoint.searchEndpoint.params) { url += "&sp=" + navigationEndpoint.searchEndpoint.params; };
} else if (navigationEndpoint.watchEndpoint) {
url = "/watch?v=" + navigationEndpoint.watchEndpoint.videoId;
if (navigationEndpoint.watchEndpoint.playlistId) { url += "&list=" + navigationEndpoint.watchEndpoint.playlistId; }
if (navigationEndpoint.watchEndpoint.index) { url += "&index=" + navigationEndpoint.watchEndpoint.index; }
if (navigationEndpoint.watchEndpoint.startTimeSeconds) { url += "&t=" + navigationEndpoint.watchEndpoint.startTimeSeconds; }
} else if (navigationEndpoint.browseEndpoint) {
browseId = navigationEndpoint.browseEndpoint.browseId;
if (navigationEndpoint.browseEndpoint.canonicalBaseUrl) {
url = navigationEndpoint.browseEndpoint.canonicalBaseUrl;
} else if (browseId) {
url = browseId.substr(0, 2);
url = "FE" == url ? "FEwhat_to_watch" == browseId ? "/" : "FEmy_videos" == browseId ? "/my_videos" : "/feed/" + browseId.substr(2) : "VL" == url ? "/playlist?list=" + browseId.substr(2) : "/channel/" + browseId;
}
if (url && navigationEndpoint.browseEndpoint.query) {
url = qy(url + "/search", {
query: navigationEndpoint.browseEndpoint.query
});
}
if (url && navigationEndpoint.browseEndpoint.params) {
url = qy(url, {
params: navigationEndpoint.browseEndpoint.params
});
}
} else if (navigationEndpoint.urlEndpoint) {
return navigationEndpoint.urlEndpoint.url;
} else if (navigationEndpoint.signInEndpoint) {
url = "https://accounts.google.com/ServiceLogin";
let d = {};
C.extend(d, params || {}, {
"continue": window.location.href.split("#")[0],
action_handle_signin: true,
passive: true
});
params = d;
} else if (navigationEndpoint.uploadEndpoint) {
url = "//www.youtube.com/upload";
} else if (navigationEndpoint.liveChatEndpoint) {
url = ty(navigationEndpoint.liveChatEndpoint);
} else if (navigationEndpoint.liveChatReplayEndpoint) {
url = uy(navigationEndpoint.liveChatReplayEndpoint);
} else if (navigationEndpoint.liveChatItemContextMenuEndpoint) {
url = qy("/youtubei/v1/live_chat/get_item_context_menu", navigationEndpoint.liveChatItemContextMenuEndpoint);
} else if (navigationEndpoint.liveChatPurchaseMessageEndpoint) {
url = qy("/youtubei/v1/live_chat/get_live_chat_message_buy_flow", navigationEndpoint.liveChatPurchaseMessageEndpoint);
} else if (navigationEndpoint.openSuperStickerBuyFlowCommand) {
url = qy("/youtubei/v1/live_chat/get_live_chat_super_sticker_buy_flow", navigationEndpoint.openSuperStickerBuyFlowCommand);
} else if (navigationEndpoint.videoEditEndpoint) {
url = qy("/edit", {
video_id: navigationEndpoint.videoEditEndpoint.videoId
});
} else if (navigationEndpoint.liveDashboardEndpoint) {
url = navigationEndpoint.liveDashboardEndpoint.videoId ? qy("/live_dashboard", {
v: navigationEndpoint.liveDashboardEndpoint.videoId
}) : "/live_dashboard";
} else if (navigationEndpoint.signalNavigationEndpoint && navigationEndpoint.signalNavigationEndpoint.signal && "WEBCAM" == navigationEndpoint.signalNavigationEndpoint.signal) {
url = "/webcam";
} else if (navigationEndpoint.getPdgBuyFlowCommand) {
url = qy(navigationEndpoint.getPdgBuyFlowCommand.buyflowApiPath, {
params: navigationEndpoint.getPdgBuyFlowCommand.params
});
}
if (url || promise) {
return qy(url, params || {});
}
O(new Report("Error: Can't construct url for endpoint", "keys:" + Object.keys(navigationEndpoint).sort().join(","), navigationEndpoint));
return null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment