mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-15 06:35:20 -07:00
53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
import { getSiteUrl } from './url'
|
|
|
|
function makeFeaturedAppsString ( featuredApps ) {
|
|
return featuredApps.slice(0, 5).map(app => app.name).join(', ')
|
|
}
|
|
|
|
export function buildVideoStructuredData ( video, featuredApps, options = {} ) {
|
|
// console.log('video', video)
|
|
|
|
// Throw for missing featured apps
|
|
if ( Array.isArray(featuredApps) === false ) {
|
|
console.warn( 'featuredApps not array', featuredApps )
|
|
throw new Error('featuredApps must be an array of objects')
|
|
}
|
|
|
|
const {
|
|
siteUrl = getSiteUrl(),
|
|
} = options
|
|
|
|
const thumbnailUrls = video.thumbnail.srcset.split(',').map( srcSetImage => {
|
|
const [ imageUrl ] = srcSetImage.trim().split(' ')
|
|
|
|
return imageUrl
|
|
})
|
|
|
|
const featuredAppsString = makeFeaturedAppsString( featuredApps )
|
|
|
|
const embedUrl = new URL( `${ siteUrl }/embed/rich-results-player` )
|
|
|
|
embedUrl.searchParams.append( 'youtube-id', video.id )
|
|
embedUrl.searchParams.append( 'name', video.name )
|
|
|
|
return {
|
|
"@context": "https://schema.org",
|
|
// https://developers.google.com/search/docs/data-types/video
|
|
// https://schema.org/VideoObject
|
|
"@type": "VideoObject",
|
|
"name": video.name,
|
|
"description": `Includes the following apps: ${featuredAppsString}`,
|
|
"thumbnailUrl": thumbnailUrls,
|
|
// https://en.wikipedia.org/wiki/ISO_8601
|
|
"uploadDate": video.lastUpdated.raw,
|
|
// "duration": "PT1M54S", // Need to updaet Youtube API Request for this
|
|
// "contentUrl": "https://www.example.com/video/123/file.mp4",
|
|
"embedUrl": embedUrl.href,
|
|
// "interactionStatistic": {
|
|
// "@type": "InteractionCounter",
|
|
// "interactionType": { "@type": "http://schema.org/WatchAction" },
|
|
// "userInteractionCount": 5647018
|
|
// },
|
|
// "regionsAllowed": "US,NL"
|
|
}
|
|
}
|