Skip to content

Commit

Permalink
feat(VideoInfo): add game_info and category (#333)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rydann authored Mar 3, 2023
1 parent ce53ac1 commit 214aa14
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/parser/classes/RichMetadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Text from './misc/Text.js';
import Thumbnail from './misc/Thumbnail.js';
import NavigationEndpoint from './NavigationEndpoint.js';
import { YTNode } from '../helpers.js';

class RichMetadata extends YTNode {
static type = 'RichMetadata';

thumbnail: Thumbnail[];
title: Text;
subtitle?: Text;
call_to_action: Text;
icon_type?: string;
endpoint: NavigationEndpoint;

constructor(data: any) {
super();

this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.title = new Text(data.title);
this.subtitle = new Text(data.subtitle);
this.call_to_action = new Text(data.callToAction);

if (data.callToActionIcon?.iconType) {
this.icon_type = data.callToActionIcon?.iconType;
}

this.endpoint = new NavigationEndpoint(data.endpoint);
}
}

export default RichMetadata;
15 changes: 15 additions & 0 deletions src/parser/classes/RichMetadataRow.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import Parser from '../index.js';
import { YTNode } from '../helpers.js';

class RichMetadataRow extends YTNode {
static type = 'RichMetadataRow';

contents;

constructor(data: any) {
super();
this.contents = Parser.parseArray(data.contents);
}
}

export default RichMetadataRow;
6 changes: 6 additions & 0 deletions src/parser/map.ts
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,10 @@ import { default as RichItem } from './classes/RichItem.js';
export { RichItem };
import { default as RichListHeader } from './classes/RichListHeader.js';
export { RichListHeader };
import { default as RichMetadata } from './classes/RichMetadata.js';
export { RichMetadata };
import { default as RichMetadataRow } from './classes/RichMetadataRow.js';
export { RichMetadataRow };
import { default as RichSection } from './classes/RichSection.js';
export { RichSection };
import { default as RichShelf } from './classes/RichShelf.js';
Expand Down Expand Up @@ -900,6 +904,8 @@ const map: Record<string, YTNodeConstructor> = {
RichGrid,
RichItem,
RichListHeader,
RichMetadata,
RichMetadataRow,
RichSection,
RichShelf,
SearchBox,
Expand Down
14 changes: 14 additions & 0 deletions src/parser/youtube/VideoInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import MicroformatData from '../classes/MicroformatData.js';
import PlayerMicroformat from '../classes/PlayerMicroformat.js';
import PlayerOverlay from '../classes/PlayerOverlay.js';
import RelatedChipCloud from '../classes/RelatedChipCloud.js';
import RichMetadata from '../classes/RichMetadata.js';
import RichMetadataRow from '../classes/RichMetadataRow.js';
import SegmentedLikeDislikeButton from '../classes/SegmentedLikeDislikeButton.js';
import ToggleButton from '../classes/ToggleButton.js';
import TwoColumnWatchNextResults from '../classes/TwoColumnWatchNextResults.js';
Expand Down Expand Up @@ -58,6 +60,7 @@ class VideoInfo {

primary_info?: VideoPrimaryInfo | null;
secondary_info?: VideoSecondaryInfo | null;
game_info?;
merchandise?: MerchandiseShelf | null;
related_chip_cloud?: ChipCloud | null;
watch_next_feed?: ObservedArray<YTNode> | null;
Expand Down Expand Up @@ -98,6 +101,7 @@ class VideoInfo {
channel: info.microformat?.is(PlayerMicroformat) ? info.microformat?.channel : null,
is_unlisted: info.microformat?.is_unlisted,
is_family_safe: info.microformat?.is_family_safe,
category: info.microformat?.is(PlayerMicroformat) ? info.microformat?.category : null,
has_ypc_metadata: info.microformat?.is(PlayerMicroformat) ? info.microformat?.has_ypc_metadata : null,
start_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.start_timestamp : null
},
Expand All @@ -122,6 +126,16 @@ class VideoInfo {
const secondary_results = two_col?.secondary_results;

if (results && secondary_results) {
if (info.microformat?.is(PlayerMicroformat) && info.microformat?.category === 'Gaming') {
const row = results.firstOfType(VideoSecondaryInfo)?.metadata?.rows?.firstOfType(RichMetadataRow);
if (row?.is(RichMetadataRow)) {
this.game_info = {
title: row?.contents?.firstOfType(RichMetadata)?.title,
release_year: row?.contents?.firstOfType(RichMetadata)?.subtitle
};
}
}

this.primary_info = results.firstOfType(VideoPrimaryInfo);
this.secondary_info = results.firstOfType(VideoSecondaryInfo);
this.merchandise = results.firstOfType(MerchandiseShelf);
Expand Down

0 comments on commit 214aa14

Please sign in to comment.