add innerTube API, types and tests

This commit is contained in:
Michael C
2022-09-14 00:33:52 -04:00
parent 072324f0ab
commit 3c09033267
3 changed files with 103 additions and 0 deletions

29
src/utils/innerTubeAPI.ts Normal file
View File

@@ -0,0 +1,29 @@
import axios from "axios";
import { innerTubeVideoDetails } from "../types/innerTubeApi.model";
export async function getPlayerData(videoID: string): Promise<innerTubeVideoDetails> {
// start subrequest
const url = "https://www.youtube.com/youtubei/v1/player";
const data = {
context: {
client: {
clientName: "WEB",
clientVersion: "2.20211129.09.00"
}
},
videoId: videoID
};
const result = await axios.post(url, data, {
timeout: 3500
});
if (result.status === 200) {
return result.data.videoDetails;
} else {
return Promise.reject(result.status);
}
}
export const getLength = (videoID: string): Promise<number> =>
getPlayerData(videoID)
.then(pData => Number(pData.lengthSeconds))
.catch(err => err);