From feca5d499b48b42cd283d1a0364d068b86a88f0b Mon Sep 17 00:00:00 2001 From: Artemy Date: Thu, 3 Aug 2023 21:00:47 +0300 Subject: [PATCH] feat: all endpoints --- README.md | 21 ++++++++++ package.json | 3 +- src/index.ts | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..05e80ab --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Piped API + +This is the API wrapper for Piped in Node.js (Typescript). + +## Installation + +```bash +npm i piped-api +``` + +## Usage + +```typescript +import { PipedApi } from "piped-api"; + +const api = new PipedApi("https://ytapi.dc09.ru"); + +let trending = await api.trending("US"); + +console.log(trending[0].title); +``` diff --git a/package.json b/package.json index 572fdb6..8883d44 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "dist/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "build": "tsc" + "build": "tsc", + "prepublishOnly": "npm run build" }, "keywords": [], "author": "artegoser", diff --git a/src/index.ts b/src/index.ts index 0042a1d..d1f72f6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,14 @@ import got from "got"; -import { Video } from "./responses.interface"; +import { + Channel, + Comments, + NextPageChannel, + NextPagePlaylist, + Playlist, + Sponsors, + Streams, + Video, +} from "./responses.interface"; export class PipedAPI { host: string; @@ -27,4 +36,105 @@ export class PipedAPI { async trending(region: string): Promise { return await this._get(`/trending?region=${region}`); } + + /** + * Retrieves the streams for a given video ID. + * + * @param {string} videoId - The ID of the video. + * @return {Promise} A promise that resolves to the streams for the given video ID. + */ + async streams(videoId: string): Promise { + return await this._get(`/streams/${videoId}`); + } + + /** + * Retrieves comments for a specific video. + * + * @param {string} videoId - The ID of the video for which to retrieve comments. + * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). + * @returns {Promise} A Promise that resolves to the comments for the video. + */ + async comments(videoId: string, nextpage?: string): Promise { + return nextpage + ? await this._get(`/nextpage/comments/${videoId}?nextpage=${nextpage}`) + : await this._get(`/comments/${videoId}`); + } + + /** + * Retrieves a channel by its ID. + * + * @param {string} id - The ID of the channel to retrieve. + * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). + * @return {Promise} A Promise that resolves to the retrieved Channel object. + */ + async channel( + id: string, + nextpage?: string + ): Promise { + return nextpage + ? await this._get(`/nextpage/channel/${id}?nextpage=${nextpage}`) + : await this._get(`/channel/${id}`); + } + + /** + * Retrieves a channel by its name. + * + * @param {string} name - The name of the channel. + * @return {Promise} A promise that resolves to the channel object. + */ + async channelByName(name: string): Promise { + return await this._get(`/c/${name}`); + } + + /** + * Retrieves a user by their name. + * + * @param {string} name - The name of the user. + * @return {Promise} A Promise that resolves to the user's channel. + */ + async user(name: string): Promise { + return await this._get(`/user/${name}`); + } + + /** + * Retrieves a playlist based on its ID. + * + * @param {string} id - The ID of the playlist to retrieve. + * @param {string} nextpage - The token for the next page of results (optional). + * @return {Promise} A Promise that resolves to a Playlist or NextPagePlaylist object. + */ + async playlist( + id: string, + nextpage?: string + ): Promise { + return nextpage + ? await this._get(`/nextpage/playlists/${id}?nextpage=${nextpage}`) + : await this._get(`/playlists/${id}`); + } + + /** + * Retrieves suggestions based on the given query. + * + * @param {string} query - The query string to search for suggestions. + * @return {Promise} A promise that resolves to an array of string suggestions. + */ + async suggestions(query: string): Promise { + return await this._get(`/suggestions?query=${query}`); + } + + /** + * Retrieves sponsors based on the provided ID and category. + * + * @param {string} id - The ID of the video. + * @param {string[]} category - The category of sponsors you would like to skip. Example: ["sponsor"]. + * @return {Promise} A promise that resolves to the sponsors. + */ + async sponsors( + id: string, + category: string[] = ["sponsor"] + ): Promise { + return await this._get( + `/sponsors/${id}?category=${JSON.stringify(category)}` + ); + } }