Add Google Video Search metadata
## Issue 5870: Add metadata for google video search
This commit is contained in:
parent
1b6c217226
commit
166d2f9049
1 changed files with 40 additions and 3 deletions
|
@ -8,13 +8,14 @@ const {
|
||||||
SITE_DESCRIPTION,
|
SITE_DESCRIPTION,
|
||||||
SITE_NAME,
|
SITE_NAME,
|
||||||
} = require('../../config.js');
|
} = require('../../config.js');
|
||||||
const { generateEmbedUrl, generateStreamUrl } = require('../../ui/util/web');
|
const { generateEmbedUrl, generateStreamUrl, generateDirectUrl } = require('../../ui/util/web');
|
||||||
const PAGES = require('../../ui/constants/pages');
|
const PAGES = require('../../ui/constants/pages');
|
||||||
const { CATEGORY_METADATA } = require('./category-metadata');
|
const { CATEGORY_METADATA } = require('./category-metadata');
|
||||||
const { getClaim } = require('./chainquery');
|
const { getClaim } = require('./chainquery');
|
||||||
const { parseURI } = require('lbry-redux');
|
const { parseURI } = require('lbry-redux');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const moment = require('moment');
|
||||||
const removeMd = require('remove-markdown');
|
const removeMd = require('remove-markdown');
|
||||||
const { getJsBundleId } = require('../bundle-id.js');
|
const { getJsBundleId } = require('../bundle-id.js');
|
||||||
const jsBundleId = getJsBundleId();
|
const jsBundleId = getJsBundleId();
|
||||||
|
@ -166,6 +167,40 @@ function buildClaimOgMetadata(uri, claim, overrideOptions = {}) {
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildGoogleVideoMetadata(claimUri, claim) {
|
||||||
|
if (!claim.source_media_type || !claim.source_media_type.startsWith('video/')) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const { claimName } = parseURI(claimUri);
|
||||||
|
const claimTitle = escapeHtmlProperty(claim.title ? claim.title : claimName);
|
||||||
|
const claimDescription =
|
||||||
|
claim.description && claim.description.length > 0
|
||||||
|
? escapeHtmlProperty(truncateDescription(claim.description))
|
||||||
|
: `View ${claimTitle} on ${SITE_NAME}`;
|
||||||
|
const claimThumbnail = escapeHtmlProperty(claim.thumbnail_url) || OG_IMAGE_URL || `${URL}/public/v2-og.png`;
|
||||||
|
const releaseTime = claim.release_time || 0;
|
||||||
|
|
||||||
|
// https://developers.google.com/search/docs/data-types/video
|
||||||
|
const googleVideoMetadata = {
|
||||||
|
// --- Must ---
|
||||||
|
'@context': 'https://schema.org',
|
||||||
|
'@type': 'VideoObject',
|
||||||
|
name: `${claimTitle}`,
|
||||||
|
description: `${removeMd(claimDescription)}`,
|
||||||
|
thumbnailUrl: `${claimThumbnail}`,
|
||||||
|
uploadDate: `${new Date(releaseTime * 1000).toISOString()}`,
|
||||||
|
// --- Recommended ---
|
||||||
|
duration: moment.duration(claim.duration).toISOString(),
|
||||||
|
contentUrl: generateDirectUrl(claim.name, claim.claim_id),
|
||||||
|
embedUrl: generateEmbedUrl(claim.name, claim.claim_id),
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
'<script type="application/ld+json">\n' + JSON.stringify(googleVideoMetadata, null, ' ') + '\n' + '</script>\n'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
async function getClaimFromChainqueryOrRedirect(ctx, url, ignoreRedirect = false) {
|
async function getClaimFromChainqueryOrRedirect(ctx, url, ignoreRedirect = false) {
|
||||||
const { isChannel, streamName, channelName, channelClaimId, streamClaimId } = parseURI(url);
|
const { isChannel, streamName, channelName, channelClaimId, streamClaimId } = parseURI(url);
|
||||||
const claimName = isChannel ? '@' + channelName : streamName;
|
const claimName = isChannel ? '@' + channelName : streamName;
|
||||||
|
@ -231,7 +266,8 @@ async function getHtml(ctx) {
|
||||||
|
|
||||||
if (claim) {
|
if (claim) {
|
||||||
const ogMetadata = buildClaimOgMetadata(claimUri, claim);
|
const ogMetadata = buildClaimOgMetadata(claimUri, claim);
|
||||||
return insertToHead(html, ogMetadata);
|
const googleVideoMetadata = buildGoogleVideoMetadata(claimUri, claim);
|
||||||
|
return insertToHead(html, ogMetadata.concat('\n', googleVideoMetadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
return insertToHead(html);
|
return insertToHead(html);
|
||||||
|
@ -253,7 +289,8 @@ async function getHtml(ctx) {
|
||||||
|
|
||||||
if (claim) {
|
if (claim) {
|
||||||
const ogMetadata = buildClaimOgMetadata(claimUri, claim);
|
const ogMetadata = buildClaimOgMetadata(claimUri, claim);
|
||||||
return insertToHead(html, ogMetadata);
|
const googleVideoMetadata = buildGoogleVideoMetadata(claimUri, claim);
|
||||||
|
return insertToHead(html, ogMetadata.concat('\n', googleVideoMetadata));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue