youtubei 0.0.1-rc.9 → 1.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +50 -53
  3. package/dist/cjs/classes/Base/Base.js +10 -0
  4. package/dist/cjs/classes/Base/index.js +13 -0
  5. package/dist/cjs/classes/BaseChannel/BaseChannel.js +31 -0
  6. package/dist/cjs/classes/BaseChannel/BaseChannelParser.js +24 -0
  7. package/dist/cjs/classes/BaseChannel/ChannelPlaylists.js +57 -0
  8. package/dist/cjs/classes/BaseChannel/ChannelVideos.js +57 -0
  9. package/dist/cjs/classes/BaseChannel/index.js +16 -0
  10. package/dist/cjs/classes/BaseVideo/BaseVideo.js +34 -0
  11. package/dist/cjs/classes/BaseVideo/BaseVideoParser.js +82 -0
  12. package/dist/cjs/classes/BaseVideo/VideoRelated.js +39 -0
  13. package/dist/cjs/classes/BaseVideo/index.js +15 -0
  14. package/dist/cjs/classes/Channel/Channel.js +24 -0
  15. package/dist/cjs/classes/Channel/ChannelParser.js +55 -0
  16. package/dist/cjs/classes/Channel/index.js +14 -0
  17. package/dist/cjs/classes/Chat/Chat.js +23 -0
  18. package/dist/cjs/classes/Chat/ChatParser.js +21 -0
  19. package/dist/cjs/classes/Chat/index.js +14 -0
  20. package/dist/cjs/classes/Client/Client.js +101 -0
  21. package/dist/cjs/classes/Client/HTTP.js +59 -0
  22. package/dist/cjs/classes/Client/index.js +13 -0
  23. package/dist/cjs/classes/Comment/Comment.js +29 -0
  24. package/dist/cjs/classes/Comment/CommentParser.js +43 -0
  25. package/dist/cjs/classes/Comment/CommentReplies.js +36 -0
  26. package/dist/cjs/classes/Comment/index.js +15 -0
  27. package/dist/cjs/classes/Continuable/Continuable.js +43 -0
  28. package/dist/cjs/classes/Continuable/index.js +13 -0
  29. package/dist/{classes → cjs/classes/LiveVideo}/LiveVideo.js +84 -89
  30. package/dist/cjs/classes/LiveVideo/LiveVideoParser.js +29 -0
  31. package/dist/cjs/classes/LiveVideo/index.js +14 -0
  32. package/dist/cjs/classes/MixPlaylist/MixPlaylist.js +25 -0
  33. package/dist/cjs/classes/MixPlaylist/MixPlaylistParser.js +27 -0
  34. package/dist/cjs/classes/MixPlaylist/index.js +14 -0
  35. package/dist/cjs/classes/Playlist/Playlist.js +25 -0
  36. package/dist/cjs/classes/Playlist/PlaylistParser.js +83 -0
  37. package/dist/cjs/classes/Playlist/PlaylistVideos.js +50 -0
  38. package/dist/cjs/classes/Playlist/index.js +15 -0
  39. package/dist/cjs/classes/PlaylistCompact/PlaylistCompact.js +45 -0
  40. package/dist/cjs/classes/PlaylistCompact/PlaylistCompactParser.js +28 -0
  41. package/dist/cjs/classes/PlaylistCompact/index.js +14 -0
  42. package/dist/cjs/classes/Reply/Reply.js +23 -0
  43. package/dist/cjs/classes/Reply/ReplyParser.js +26 -0
  44. package/dist/cjs/classes/Reply/index.js +14 -0
  45. package/dist/cjs/classes/SearchResult/SearchResult.js +85 -0
  46. package/dist/cjs/classes/SearchResult/SearchResultParser.js +40 -0
  47. package/dist/cjs/classes/SearchResult/index.js +14 -0
  48. package/dist/{classes/Base.js → cjs/classes/SearchResult/proto/SearchProto.js} +2 -5
  49. package/dist/cjs/classes/SearchResult/proto/index.js +57 -0
  50. package/dist/{classes → cjs/classes/Thumbnails}/Thumbnails.js +67 -66
  51. package/dist/cjs/classes/Thumbnails/index.js +13 -0
  52. package/dist/cjs/classes/Video/Video.js +26 -0
  53. package/dist/cjs/classes/Video/VideoComments.js +53 -0
  54. package/dist/cjs/classes/Video/VideoParser.js +29 -0
  55. package/dist/cjs/classes/Video/index.js +15 -0
  56. package/dist/cjs/classes/VideoCompact/VideoCompact.js +49 -0
  57. package/dist/cjs/classes/VideoCompact/VideoCompactParser.js +36 -0
  58. package/dist/cjs/classes/VideoCompact/index.js +14 -0
  59. package/dist/cjs/classes/index.js +29 -0
  60. package/dist/{common → cjs/common}/decorators.js +14 -14
  61. package/dist/cjs/common/helper.js +45 -0
  62. package/dist/{common → cjs/common}/index.js +16 -23
  63. package/dist/{common → cjs/common}/mixins.js +14 -12
  64. package/dist/{common → cjs/common}/types.js +2 -2
  65. package/dist/{constants.js → cjs/constants.js} +10 -10
  66. package/dist/{index.js → cjs/index.js} +13 -13
  67. package/dist/esm/classes/Base/Base.js +8 -0
  68. package/dist/esm/classes/Base/index.js +1 -0
  69. package/dist/esm/classes/BaseChannel/BaseChannel.js +48 -0
  70. package/dist/esm/classes/BaseChannel/BaseChannelParser.js +24 -0
  71. package/dist/esm/classes/BaseChannel/ChannelPlaylists.js +109 -0
  72. package/dist/esm/classes/BaseChannel/ChannelVideos.js +109 -0
  73. package/dist/esm/classes/BaseChannel/index.js +4 -0
  74. package/dist/esm/classes/BaseVideo/BaseVideo.js +51 -0
  75. package/dist/esm/classes/BaseVideo/BaseVideoParser.js +93 -0
  76. package/dist/esm/classes/BaseVideo/VideoRelated.js +87 -0
  77. package/dist/esm/classes/BaseVideo/index.js +3 -0
  78. package/dist/esm/classes/Channel/Channel.js +37 -0
  79. package/dist/esm/classes/Channel/ChannelParser.js +77 -0
  80. package/dist/esm/classes/Channel/index.js +2 -0
  81. package/dist/esm/classes/Chat/Chat.js +36 -0
  82. package/dist/esm/classes/Chat/ChatParser.js +21 -0
  83. package/dist/esm/classes/Chat/index.js +2 -0
  84. package/dist/esm/classes/Client/Client.js +176 -0
  85. package/dist/esm/classes/Client/HTTP.js +112 -0
  86. package/dist/esm/classes/Client/index.js +1 -0
  87. package/dist/esm/classes/Comment/Comment.js +46 -0
  88. package/dist/esm/classes/Comment/CommentParser.js +45 -0
  89. package/dist/esm/classes/Comment/CommentReplies.js +84 -0
  90. package/dist/esm/classes/Comment/index.js +3 -0
  91. package/dist/esm/classes/Continuable/Continuable.js +125 -0
  92. package/dist/esm/classes/Continuable/index.js +1 -0
  93. package/dist/esm/classes/LiveVideo/LiveVideo.js +160 -0
  94. package/dist/esm/classes/LiveVideo/LiveVideoParser.js +29 -0
  95. package/dist/esm/classes/LiveVideo/index.js +2 -0
  96. package/dist/esm/classes/MixPlaylist/MixPlaylist.js +38 -0
  97. package/dist/esm/classes/MixPlaylist/MixPlaylistParser.js +49 -0
  98. package/dist/esm/classes/MixPlaylist/index.js +2 -0
  99. package/dist/esm/classes/Playlist/Playlist.js +38 -0
  100. package/dist/esm/classes/Playlist/PlaylistParser.js +105 -0
  101. package/dist/esm/classes/Playlist/PlaylistVideos.js +98 -0
  102. package/dist/esm/classes/Playlist/index.js +3 -0
  103. package/dist/esm/classes/PlaylistCompact/PlaylistCompact.js +90 -0
  104. package/dist/esm/classes/PlaylistCompact/PlaylistCompactParser.js +28 -0
  105. package/dist/esm/classes/PlaylistCompact/index.js +2 -0
  106. package/dist/esm/classes/Reply/Reply.js +36 -0
  107. package/dist/esm/classes/Reply/ReplyParser.js +26 -0
  108. package/dist/esm/classes/Reply/index.js +2 -0
  109. package/dist/esm/classes/SearchResult/SearchResult.js +161 -0
  110. package/dist/esm/classes/SearchResult/SearchResultParser.js +62 -0
  111. package/dist/esm/classes/SearchResult/index.js +2 -0
  112. package/dist/esm/classes/SearchResult/proto/SearchProto.js +1 -0
  113. package/dist/esm/classes/SearchResult/proto/index.js +39 -0
  114. package/dist/esm/classes/Thumbnails/Thumbnails.js +109 -0
  115. package/dist/esm/classes/Thumbnails/index.js +1 -0
  116. package/dist/esm/classes/Video/Video.js +39 -0
  117. package/dist/esm/classes/Video/VideoComments.js +101 -0
  118. package/dist/esm/classes/Video/VideoParser.js +31 -0
  119. package/dist/esm/classes/Video/index.js +3 -0
  120. package/dist/esm/classes/VideoCompact/VideoCompact.js +98 -0
  121. package/dist/esm/classes/VideoCompact/VideoCompactParser.js +36 -0
  122. package/dist/esm/classes/VideoCompact/index.js +2 -0
  123. package/dist/esm/classes/index.js +17 -0
  124. package/dist/esm/common/decorators.js +30 -0
  125. package/dist/esm/common/helper.js +61 -0
  126. package/dist/esm/common/index.js +4 -0
  127. package/dist/esm/common/mixins.js +10 -0
  128. package/dist/esm/common/types.js +1 -0
  129. package/dist/esm/constants.js +7 -0
  130. package/dist/esm/index.js +1 -0
  131. package/dist/typings/classes/Base/Base.d.ts +11 -0
  132. package/dist/typings/classes/Base/index.d.ts +1 -0
  133. package/dist/typings/classes/BaseChannel/BaseChannel.d.ts +43 -0
  134. package/dist/typings/classes/BaseChannel/BaseChannelParser.d.ts +7 -0
  135. package/dist/typings/classes/BaseChannel/ChannelPlaylists.d.ts +30 -0
  136. package/dist/typings/classes/BaseChannel/ChannelVideos.d.ts +30 -0
  137. package/dist/typings/classes/BaseChannel/index.d.ts +4 -0
  138. package/dist/typings/classes/BaseVideo/BaseVideo.d.ts +59 -0
  139. package/dist/typings/classes/BaseVideo/BaseVideoParser.d.ts +14 -0
  140. package/dist/typings/classes/BaseVideo/VideoRelated.d.ts +21 -0
  141. package/dist/typings/classes/BaseVideo/index.d.ts +3 -0
  142. package/dist/typings/classes/Channel/Channel.d.ts +33 -0
  143. package/dist/typings/classes/Channel/ChannelParser.d.ts +6 -0
  144. package/dist/typings/classes/Channel/index.d.ts +2 -0
  145. package/dist/typings/classes/Chat/Chat.d.ts +33 -0
  146. package/dist/typings/classes/Chat/ChatParser.d.ts +5 -0
  147. package/dist/typings/classes/Chat/index.d.ts +2 -0
  148. package/dist/typings/classes/Client/Client.d.ts +41 -0
  149. package/dist/typings/classes/Client/HTTP.d.ts +21 -0
  150. package/dist/typings/classes/Client/index.d.ts +1 -0
  151. package/dist/typings/classes/Comment/Comment.d.ts +51 -0
  152. package/dist/typings/classes/Comment/CommentParser.d.ts +8 -0
  153. package/dist/typings/classes/Comment/CommentReplies.d.ts +17 -0
  154. package/dist/typings/classes/Comment/index.d.ts +3 -0
  155. package/dist/typings/classes/Continuable/Continuable.d.ts +24 -0
  156. package/dist/typings/classes/Continuable/index.d.ts +1 -0
  157. package/dist/{classes → typings/classes/LiveVideo}/LiveVideo.d.ts +46 -44
  158. package/dist/typings/classes/LiveVideo/LiveVideoParser.d.ts +10 -0
  159. package/dist/typings/classes/LiveVideo/index.d.ts +2 -0
  160. package/dist/typings/classes/MixPlaylist/MixPlaylist.d.ts +29 -0
  161. package/dist/typings/classes/MixPlaylist/MixPlaylistParser.d.ts +6 -0
  162. package/dist/typings/classes/MixPlaylist/index.d.ts +2 -0
  163. package/dist/typings/classes/Playlist/Playlist.d.ts +39 -0
  164. package/dist/typings/classes/Playlist/PlaylistParser.d.ts +16 -0
  165. package/dist/typings/classes/Playlist/PlaylistVideos.d.ts +31 -0
  166. package/dist/typings/classes/Playlist/index.d.ts +3 -0
  167. package/dist/typings/classes/PlaylistCompact/PlaylistCompact.d.ts +43 -0
  168. package/dist/typings/classes/PlaylistCompact/PlaylistCompactParser.d.ts +5 -0
  169. package/dist/typings/classes/PlaylistCompact/index.d.ts +2 -0
  170. package/dist/typings/classes/Reply/Reply.d.ts +43 -0
  171. package/dist/typings/classes/Reply/ReplyParser.d.ts +5 -0
  172. package/dist/typings/classes/Reply/index.d.ts +2 -0
  173. package/dist/typings/classes/SearchResult/SearchResult.d.ts +53 -0
  174. package/dist/typings/classes/SearchResult/SearchResultParser.d.ts +13 -0
  175. package/dist/typings/classes/SearchResult/index.d.ts +2 -0
  176. package/dist/typings/classes/SearchResult/proto/SearchProto.d.ts +13 -0
  177. package/dist/typings/classes/SearchResult/proto/index.d.ts +24 -0
  178. package/dist/{classes → typings/classes/Thumbnails}/Thumbnails.d.ts +41 -42
  179. package/dist/typings/classes/Thumbnails/index.d.ts +1 -0
  180. package/dist/typings/classes/Video/Video.d.ts +24 -0
  181. package/dist/typings/classes/Video/VideoComments.d.ts +34 -0
  182. package/dist/typings/classes/Video/VideoParser.d.ts +8 -0
  183. package/dist/typings/classes/Video/index.d.ts +3 -0
  184. package/dist/typings/classes/VideoCompact/VideoCompact.d.ts +57 -0
  185. package/dist/typings/classes/VideoCompact/VideoCompactParser.d.ts +5 -0
  186. package/dist/typings/classes/VideoCompact/index.d.ts +2 -0
  187. package/dist/typings/classes/index.d.ts +17 -0
  188. package/dist/{common → typings/common}/decorators.d.ts +5 -5
  189. package/dist/typings/common/helper.d.ts +5 -0
  190. package/dist/typings/common/index.d.ts +4 -0
  191. package/dist/typings/common/mixins.d.ts +1 -0
  192. package/dist/{common → typings/common}/types.d.ts +1 -1
  193. package/dist/{constants.d.ts → typings/constants.d.ts} +7 -7
  194. package/dist/{index.d.ts → typings/index.d.ts} +1 -1
  195. package/package.json +68 -53
  196. package/CHANGELOG.md +0 -6
  197. package/dist/classes/Base.d.ts +0 -7
  198. package/dist/classes/BaseVideo.d.ts +0 -54
  199. package/dist/classes/BaseVideo.js +0 -82
  200. package/dist/classes/Channel.d.ts +0 -83
  201. package/dist/classes/Channel.js +0 -138
  202. package/dist/classes/Chat.d.ts +0 -29
  203. package/dist/classes/Chat.js +0 -31
  204. package/dist/classes/Client.d.ts +0 -30
  205. package/dist/classes/Client.js +0 -69
  206. package/dist/classes/Comment.d.ts +0 -43
  207. package/dist/classes/Comment.js +0 -42
  208. package/dist/classes/Playlist.d.ts +0 -61
  209. package/dist/classes/Playlist.js +0 -127
  210. package/dist/classes/PlaylistCompact.d.ts +0 -30
  211. package/dist/classes/PlaylistCompact.js +0 -45
  212. package/dist/classes/SearchResult.d.ts +0 -69
  213. package/dist/classes/SearchResult.js +0 -139
  214. package/dist/classes/Video.d.ts +0 -49
  215. package/dist/classes/Video.js +0 -102
  216. package/dist/classes/VideoCompact.d.ts +0 -40
  217. package/dist/classes/VideoCompact.js +0 -50
  218. package/dist/classes/index.d.ts +0 -13
  219. package/dist/classes/index.js +0 -32
  220. package/dist/common/helper.d.ts +0 -2
  221. package/dist/common/helper.js +0 -37
  222. package/dist/common/http.d.ts +0 -30
  223. package/dist/common/http.js +0 -108
  224. package/dist/common/index.d.ts +0 -5
  225. package/dist/common/mixins.d.ts +0 -2
@@ -1,42 +1,41 @@
1
- interface Thumbnail {
2
- url: string;
3
- width: number;
4
- height: number;
5
- }
6
- /**
7
- * Represents Thumbnails, usually found inside Playlist / Channel / Video, etc.
8
- *
9
- * {@link Thumbnails} is an array of {@link Thumbnail}
10
- *
11
- * @noInheritDoc
12
- */
13
- export default class Thumbnails extends Array<Thumbnail> {
14
- /** @hidden */
15
- constructor();
16
- /**
17
- * Load this instance with raw data from Youtube
18
- *
19
- * @hidden
20
- */
21
- load(thumbnails: Thumbnail[]): Thumbnails;
22
- /**
23
- * Returns thumbnail with the lowest resolution, usually the first element of the Thumbnails array
24
- *
25
- * @example
26
- * ```js
27
- * const min = video.thumbnails.min;
28
- * ```
29
- */
30
- get min(): string | undefined;
31
- /**
32
- * Returns thumbnail with the highest resolution, usually the last element of the Thumbnails array
33
- *
34
- * @example
35
- * ```js
36
- * const min = video.thumbnails.min;
37
- * ```
38
- */
39
- get best(): string | undefined;
40
- private static parseThumbnailUrl;
41
- }
42
- export {};
1
+ export interface Thumbnail {
2
+ url: string;
3
+ width: number;
4
+ height: number;
5
+ }
6
+ /**
7
+ * Represents Thumbnails, usually found inside Playlist / Channel / Video, etc.
8
+ *
9
+ * {@link Thumbnails} is an array of {@link Thumbnail}
10
+ *
11
+ * @noInheritDoc
12
+ */
13
+ export declare class Thumbnails extends Array<Thumbnail> {
14
+ /** @hidden */
15
+ constructor();
16
+ /**
17
+ * Returns thumbnail with the lowest resolution, usually the first element of the Thumbnails array
18
+ *
19
+ * @example
20
+ * ```js
21
+ * const min = video.thumbnails.min;
22
+ * ```
23
+ */
24
+ get min(): string | undefined;
25
+ /**
26
+ * Returns thumbnail with the highest resolution, usually the last element of the Thumbnails array
27
+ *
28
+ * @example
29
+ * ```js
30
+ * const min = video.thumbnails.min;
31
+ * ```
32
+ */
33
+ get best(): string | undefined;
34
+ /**
35
+ * Load this instance with raw data from Youtube
36
+ *
37
+ * @hidden
38
+ */
39
+ load(thumbnails: Thumbnail[]): Thumbnails;
40
+ private static parseThumbnailUrl;
41
+ }
@@ -0,0 +1 @@
1
+ export * from "./Thumbnails";
@@ -0,0 +1,24 @@
1
+ import { YoutubeRawData } from "../../common";
2
+ import { BaseVideo, BaseVideoProperties } from "../BaseVideo";
3
+ import { VideoComments } from "./VideoComments";
4
+ /** @hidden */
5
+ interface VideoProperties extends BaseVideoProperties {
6
+ duration?: number;
7
+ comments?: VideoComments;
8
+ }
9
+ /** Represents a Video, usually returned from `client.getVideo()` */
10
+ export declare class Video extends BaseVideo implements VideoProperties {
11
+ /** The duration of this video in second */
12
+ duration: number;
13
+ /** {@link Continuable} of videos inside a {@link Video} */
14
+ comments: VideoComments;
15
+ /** @hidden */
16
+ constructor(attr: VideoProperties);
17
+ /**
18
+ * Load this instance with raw data from Youtube
19
+ *
20
+ * @hidden
21
+ */
22
+ load(data: YoutubeRawData): Video;
23
+ }
24
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Comment } from "../Comment";
2
+ import { Continuable, ContinuableConstructorParams, FetchResult } from "../Continuable";
3
+ import { Video } from "./Video";
4
+ declare type ConstructorParams = ContinuableConstructorParams & {
5
+ video: Video;
6
+ };
7
+ /**
8
+ * {@link Continuable} of videos inside a {@link Video}
9
+ *
10
+ * @example
11
+ * ```js
12
+ * const video = await youtube.getVideo(VIDEO_ID);
13
+ * await video.comments.next();
14
+ * console.log(video.comments) // first 20 comments
15
+ *
16
+ * let newComments = await video.comments.next();
17
+ * console.log(newComments) // 20 loaded comments
18
+ * console.log(video.comments) // first 40 comments
19
+ *
20
+ * await video.comments.next(0); // load the rest of the comments in the video
21
+ * ```
22
+ *
23
+ * @param count How many times to load the next comments. Set 0 to load all comments (might take a while on a video with many comments!)
24
+ *
25
+ * @returns Loaded comments
26
+ */
27
+ export declare class VideoComments extends Continuable<Comment> {
28
+ /** The playlist this videos belongs to */
29
+ video: Video;
30
+ /** @hidden */
31
+ constructor({ client, video }: ConstructorParams);
32
+ protected fetch(): Promise<FetchResult<Comment>>;
33
+ }
34
+ export {};
@@ -0,0 +1,8 @@
1
+ import { YoutubeRawData } from "../../common";
2
+ import { Comment } from "../Comment";
3
+ import { Video } from "./Video";
4
+ export declare class VideoParser {
5
+ static loadVideo(target: Video, data: YoutubeRawData): Video;
6
+ static parseComments(data: YoutubeRawData, video: Video): Comment[];
7
+ static parseCommentContinuation(data: YoutubeRawData): string | undefined;
8
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./Video";
2
+ export * from "./VideoComments";
3
+ export * from "./VideoParser";
@@ -0,0 +1,57 @@
1
+ import { YoutubeRawData } from "../../common";
2
+ import { Base, BaseProperties } from "../Base";
3
+ import { BaseChannel } from "../BaseChannel";
4
+ import { LiveVideo } from "../LiveVideo";
5
+ import { Thumbnails } from "../Thumbnails";
6
+ import { Video } from "../Video";
7
+ /** @hidden */
8
+ interface VideoCompactProperties extends BaseProperties {
9
+ id?: string;
10
+ title?: string;
11
+ thumbnails?: Thumbnails;
12
+ duration?: number | null;
13
+ isLive?: boolean;
14
+ channel?: BaseChannel;
15
+ uploadDate?: string;
16
+ viewCount?: number | null;
17
+ }
18
+ /** Represent a compact video (e.g. from search result, playlist's videos, channel's videos) */
19
+ export declare class VideoCompact extends Base implements VideoCompactProperties {
20
+ id: string;
21
+ /** The title of the video */
22
+ title: string;
23
+ /** Thumbnails of the video with different sizes */
24
+ thumbnails: Thumbnails;
25
+ /** Description of the video (not a full description, rather a preview / snippet) */
26
+ description: string;
27
+ /** The duration of this video in second, null if the video is live */
28
+ duration: number | null;
29
+ /** Whether this video is a live now or not */
30
+ isLive: boolean;
31
+ /** The channel who uploads this video */
32
+ channel?: BaseChannel;
33
+ /** The date this video is uploaded at */
34
+ uploadDate?: string;
35
+ /** How many view does this video have, null if the view count is hidden */
36
+ viewCount?: number | null;
37
+ /** @hidden */
38
+ constructor(attr: VideoCompactProperties);
39
+ /** Whether this video is private / deleted or not, only useful in playlist's videos */
40
+ get isPrivateOrDeleted(): boolean;
41
+ /**
42
+ * Load this instance with raw data from Youtube
43
+ *
44
+ * @hidden
45
+ */
46
+ load(data: YoutubeRawData): VideoCompact;
47
+ /**
48
+ * Get {@link Video} object based on current video id
49
+ *
50
+ * Equivalent to
51
+ * ```js
52
+ * client.getVideo(videoCompact.id);
53
+ * ```
54
+ */
55
+ getVideo<T extends Video | LiveVideo>(): Promise<T>;
56
+ }
57
+ export {};
@@ -0,0 +1,5 @@
1
+ import { YoutubeRawData } from "../../common";
2
+ import { VideoCompact } from "./VideoCompact";
3
+ export declare class VideoCompactParser {
4
+ static loadVideoCompact(target: VideoCompact, data: YoutubeRawData): VideoCompact;
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./VideoCompact";
2
+ export * from "./VideoCompactParser";
@@ -0,0 +1,17 @@
1
+ export * from "./Base";
2
+ export * from "./BaseChannel";
3
+ export * from "./BaseVideo";
4
+ export * from "./Channel";
5
+ export * from "./Chat";
6
+ export * from "./Client";
7
+ export * from "./Comment";
8
+ export * from "./Continuable";
9
+ export * from "./LiveVideo";
10
+ export * from "./MixPlaylist";
11
+ export * from "./Playlist";
12
+ export * from "./PlaylistCompact";
13
+ export * from "./Reply";
14
+ export * from "./SearchResult";
15
+ export * from "./Thumbnails";
16
+ export * from "./Video";
17
+ export * from "./VideoCompact";
@@ -1,5 +1,5 @@
1
- interface Constructor<T> {
2
- new (...args: any[]): T;
3
- }
4
- export declare function extendsBuiltIn(): (target: Constructor<any>) => any;
5
- export {};
1
+ interface Constructor<T> {
2
+ new (...args: any[]): T;
3
+ }
4
+ export declare function extendsBuiltIn(): (target: Constructor<any>) => any;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import { YoutubeRawData } from "./types";
2
+ export declare const getDuration: (s: string) => number;
3
+ export declare const stripToInt: (string: string) => number | null;
4
+ export declare const getContinuationFromItems: (items: YoutubeRawData, accessors?: string[]) => string | undefined;
5
+ export declare const mapFilter: (items: YoutubeRawData, key: string) => YoutubeRawData;
@@ -0,0 +1,4 @@
1
+ export * from "./decorators";
2
+ export * from "./helper";
3
+ export * from "./mixins";
4
+ export * from "./types";
@@ -0,0 +1 @@
1
+ export declare const applyMixins: (derivedCtor: any, baseCtors: any[]) => void;
@@ -1 +1 @@
1
- export declare type YoutubeRawData = Record<string, any>;
1
+ export declare type YoutubeRawData = Record<string, any>;
@@ -1,7 +1,7 @@
1
- export declare const INNERTUBE_CLIENT_VERSION = "2.20201209.01.00";
2
- export declare const INNERTUBE_API_KEY = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
3
- export declare const BASE_URL = "www.youtube.com";
4
- export declare const I_END_POINT = "/youtubei/v1";
5
- export declare const LIVE_CHAT_END_POINT: string;
6
- export declare const WATCH_END_POINT = "/watch";
7
- export declare const COMMENT_END_POINT = "/comment_service_ajax";
1
+ export declare const INNERTUBE_CLIENT_VERSION = "2.20201209.01.00";
2
+ export declare const INNERTUBE_API_KEY = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
3
+ export declare const BASE_URL = "www.youtube.com";
4
+ export declare const I_END_POINT = "/youtubei/v1";
5
+ export declare const LIVE_CHAT_END_POINT: string;
6
+ export declare const WATCH_END_POINT = "/watch";
7
+ export declare const COMMENT_END_POINT = "/comment_service_ajax";
@@ -1 +1 @@
1
- export * from "./classes";
1
+ export * from "./classes";
package/package.json CHANGED
@@ -1,53 +1,68 @@
1
- {
2
- "name": "youtubei",
3
- "version": "0.0.1-rc.9",
4
- "description": "Simple package to get information from youtube such as videos, playlists, channels, video information & comments, related videos, up next video, and more!",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "directories": {
8
- "test": "test"
9
- },
10
- "dependencies": {},
11
- "devDependencies": {
12
- "@types/jest": "^26.0.19",
13
- "@types/node": "^14.14.12",
14
- "@typescript-eslint/eslint-plugin": "^4.9.1",
15
- "@typescript-eslint/parser": "^4.9.1",
16
- "eslint": "^7.15.0",
17
- "eslint-plugin-prettier": "^3.2.0",
18
- "jest": "^26.6.3",
19
- "jest-extended": "^0.11.5",
20
- "prettier": "^2.2.1",
21
- "ts-jest": "^26.4.4",
22
- "typescript": "^4.1.2"
23
- },
24
- "scripts": {
25
- "test": "jest",
26
- "dev": "tsc --watch",
27
- "build": "tsc",
28
- "lint:check": "eslint src && prettier -c src",
29
- "lint:fix": "eslint --fix && prettier --write src"
30
- },
31
- "repository": {
32
- "type": "git",
33
- "url": "git+https://github.com/SuspiciousLookingOwl/youtubei.git"
34
- },
35
- "keywords": [
36
- "youtube",
37
- "yt",
38
- "search",
39
- "video",
40
- "videos",
41
- "playlist",
42
- "channel",
43
- "related",
44
- "comment",
45
- "comments"
46
- ],
47
- "author": "Vincent Jonathan",
48
- "license": "MIT",
49
- "bugs": {
50
- "url": "https://github.com/SuspiciousLookingOwl/youtubei/issues"
51
- },
52
- "homepage": "https://youtubei.netlify.app"
53
- }
1
+ {
2
+ "name": "youtubei",
3
+ "version": "1.0.0-rc.3",
4
+ "description": "Simple package to get information from youtube such as videos, playlists, channels, video information & comments, related videos, up next video, and more!",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/typings/index.d.ts",
8
+ "directories": {
9
+ "test": "test"
10
+ },
11
+ "devDependencies": {
12
+ "@trivago/prettier-plugin-sort-imports": "3.2.0",
13
+ "@types/node": "14.14.12",
14
+ "@types/node-fetch": "2.6.2",
15
+ "@typescript-eslint/eslint-plugin": "4.9.1",
16
+ "@typescript-eslint/parser": "4.9.1",
17
+ "c8": "7.11.3",
18
+ "eslint": "7.15.0",
19
+ "eslint-plugin-prettier": "3.2.0",
20
+ "jest-extended": "0.11.5",
21
+ "prettier": "2.2.1",
22
+ "rimraf": "3.0.2",
23
+ "typescript": "4.1.2",
24
+ "vite": "2.9.14",
25
+ "vitest": "0.18.0"
26
+ },
27
+ "scripts": {
28
+ "dev": "tsc -w --noEmit",
29
+ "test": "vitest",
30
+ "test:coverage": "vitest run --coverage",
31
+ "build": "pnpm clean && pnpm build:cjs && pnpm build:esm && pnpm build:types",
32
+ "build:cjs": "tsc -p ./typescript/tsconfig.cjs.json",
33
+ "build:esm": "tsc -p ./typescript/tsconfig.esm.json",
34
+ "build:types": "tsc -p ./typescript/tsconfig.types.json",
35
+ "clean": "rimraf ./dist",
36
+ "lint:check": "eslint src && prettier -c src tests",
37
+ "lint:fix": "eslint --fix && prettier --write src tests"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/SuspiciousLookingOwl/youtubei.git"
42
+ },
43
+ "keywords": [
44
+ "youtube",
45
+ "yt",
46
+ "search",
47
+ "video",
48
+ "videos",
49
+ "playlist",
50
+ "channel",
51
+ "related",
52
+ "comment",
53
+ "comments",
54
+ "live",
55
+ "chat",
56
+ "live chat"
57
+ ],
58
+ "author": "Vincent Jonathan",
59
+ "license": "MIT",
60
+ "bugs": {
61
+ "url": "https://github.com/SuspiciousLookingOwl/youtubei/issues"
62
+ },
63
+ "homepage": "https://suspiciouslookingowl.github.io/youtubei",
64
+ "dependencies": {
65
+ "node-fetch": "2.6.7",
66
+ "protocol-buffers": "5.0.0"
67
+ }
68
+ }
package/CHANGELOG.md DELETED
@@ -1,6 +0,0 @@
1
- # Changelog
2
- All notable changes to this project will be documented in this file.
3
-
4
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
-
@@ -1,7 +0,0 @@
1
- /** @hidden */
2
- export interface BaseAttributes {
3
- id: string;
4
- }
5
- export default class Base implements BaseAttributes {
6
- id: string;
7
- }
@@ -1,54 +0,0 @@
1
- import { PlaylistCompact, VideoCompact, Channel, Base, BaseAttributes, Thumbnails } from ".";
2
- import { YoutubeRawData } from "../common";
3
- /** @hidden */
4
- export interface BaseVideoAttributes extends BaseAttributes {
5
- title: string;
6
- thumbnails: Thumbnails;
7
- description: string;
8
- channel: Channel;
9
- uploadDate: string;
10
- viewCount: number | null;
11
- likeCount: number | null;
12
- dislikeCount: number | null;
13
- isLiveContent: boolean;
14
- tags: string[];
15
- upNext: VideoCompact | PlaylistCompact;
16
- related: (VideoCompact | PlaylistCompact)[];
17
- }
18
- /** Represents a Video */
19
- export default class BaseVideo extends Base implements BaseVideoAttributes {
20
- /** The title of this video */
21
- title: string;
22
- /** Thumbnails of the video with different sizes */
23
- thumbnails: Thumbnails;
24
- /** The description of this video */
25
- description: string;
26
- /** The channel that uploaded this video */
27
- channel: Channel;
28
- /** The date this video is uploaded at */
29
- uploadDate: string;
30
- /** How many view does this video have, null if the view count is hidden */
31
- viewCount: number | null;
32
- /** How many like does this video have, null if the like count hidden */
33
- likeCount: number | null;
34
- /** How many dislike does this video have, null if the dislike count is hidden */
35
- dislikeCount: number | null;
36
- /** Whether this video is a live content or not */
37
- isLiveContent: boolean;
38
- /** The tags of this video */
39
- tags: string[];
40
- /** Next video / playlist recommended by Youtube */
41
- upNext: VideoCompact | PlaylistCompact;
42
- /** Videos / playlists related to this video */
43
- related: (VideoCompact | PlaylistCompact)[];
44
- /** @hidden */
45
- constructor(video?: Partial<BaseVideoAttributes>);
46
- /**
47
- * Load this instance with raw data from Youtube
48
- *
49
- * @hidden
50
- */
51
- load(data: YoutubeRawData): BaseVideo;
52
- /** @hidden */
53
- static parseRawData(data: YoutubeRawData): YoutubeRawData;
54
- }
@@ -1,82 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const _1 = require(".");
4
- /** Represents a Video */
5
- class BaseVideo extends _1.Base {
6
- /** @hidden */
7
- constructor(video = {}) {
8
- super();
9
- Object.assign(this, video);
10
- }
11
- /**
12
- * Load this instance with raw data from Youtube
13
- *
14
- * @hidden
15
- */
16
- load(data) {
17
- var _a, _b, _c, _d, _e;
18
- const videoInfo = BaseVideo.parseRawData(data);
19
- // Basic information
20
- this.id = videoInfo.videoDetails.videoId;
21
- this.title = videoInfo.videoDetails.title;
22
- this.uploadDate = videoInfo.dateText.simpleText;
23
- this.viewCount = +videoInfo.videoDetails.viewCount || null;
24
- this.isLiveContent = videoInfo.videoDetails.isLiveContent;
25
- this.thumbnails = new _1.Thumbnails().load(videoInfo.videoDetails.thumbnail.thumbnails);
26
- // Channel
27
- const { title, thumbnail } = videoInfo.owner.videoOwnerRenderer;
28
- this.channel = new _1.Channel({
29
- id: title.runs[0].navigationEndpoint.browseEndpoint.browseId,
30
- name: title.runs[0].text,
31
- thumbnails: new _1.Thumbnails().load(thumbnail.thumbnails),
32
- url: `https://www.youtube.com/channel/${title.runs[0].navigationEndpoint.browseEndpoint.browseId}`,
33
- });
34
- // Like Count and Dislike Count
35
- const topLevelButtons = videoInfo.videoActions.menuRenderer.topLevelButtons;
36
- this.likeCount =
37
- +((_a = topLevelButtons[0].toggleButtonRenderer.defaultText.accessibility) === null || _a === void 0 ? void 0 : _a.accessibilityData.label.replace(/[^0-9]/g, "")) || null;
38
- this.dislikeCount =
39
- +((_b = topLevelButtons[1].toggleButtonRenderer.defaultText.accessibility) === null || _b === void 0 ? void 0 : _b.accessibilityData.label.replace(/[^0-9]/g, "")) || null;
40
- // Tags and description
41
- this.tags =
42
- ((_d = (_c = videoInfo.superTitleLink) === null || _c === void 0 ? void 0 : _c.runs) === null || _d === void 0 ? void 0 : _d.reduce((tags, t) => {
43
- if (t.text.trim())
44
- tags.push(t.text.trim());
45
- return tags;
46
- }, [])) || [];
47
- this.description =
48
- ((_e = videoInfo.description) === null || _e === void 0 ? void 0 : _e.runs.map((d) => d.text).join("")) || "";
49
- // Up Next and related videos
50
- this.related = [];
51
- const secondaryContents = data[3].response.contents.twoColumnWatchNextResults.secondaryResults.secondaryResults
52
- .results;
53
- for (const secondaryContent of secondaryContents) {
54
- if ("compactAutoplayRenderer" in secondaryContent) {
55
- const content = secondaryContent.compactAutoplayRenderer.contents[0];
56
- if ("compactVideoRenderer" in content) {
57
- this.upNext = new _1.VideoCompact().load(content.compactVideoRenderer);
58
- }
59
- else if ("compactRadioRenderer" in content) {
60
- this.upNext = new _1.PlaylistCompact().load(content.compactRadioRenderer);
61
- }
62
- }
63
- else if ("compactVideoRenderer" in secondaryContent) {
64
- this.related.push(new _1.VideoCompact().load(secondaryContent.compactVideoRenderer));
65
- }
66
- else if ("compactRadioRenderer" in secondaryContent) {
67
- this.related.push(new _1.PlaylistCompact().load(secondaryContent.compactRadioRenderer));
68
- }
69
- }
70
- return this;
71
- }
72
- /** @hidden */
73
- static parseRawData(data) {
74
- const contents = data[3].response.contents.twoColumnWatchNextResults.results.results.contents;
75
- const primaryInfo = contents.find((c) => "videoPrimaryInfoRenderer" in c)
76
- .videoPrimaryInfoRenderer;
77
- const secondaryInfo = contents.find((c) => "videoSecondaryInfoRenderer" in c).videoSecondaryInfoRenderer;
78
- const videoDetails = data[2].playerResponse.videoDetails;
79
- return Object.assign(Object.assign(Object.assign({}, secondaryInfo), primaryInfo), { videoDetails });
80
- }
81
- }
82
- exports.default = BaseVideo;