You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
oEmbed is a format for allowing an embedded representation of a URL on third party sites. The simple API allows a website to display embedded content (such as photos or videos) when a user posts a link to that resource, without having to parse the resource directly.
Usage
API endpoints and URL schemes are provided in pairs, such that one instance of the middleware serves exactly one URL scheme. You can read more about this in the specification.
importoembedfrom'koa-oembed'importRouterfrom'koa-router'// or any other router libraryconstrouter=newRouter();// This creates the api-url pair https://example.com/oembed -> https://example.com/photos/*router.get('/oembed',oembed('https://example.com/photos/*'),function(ctx){// We handle oembed requests here through utilities in ctx.oembedconstphotoId=ctx.oembed.match[1]// regex match of first wildcard. // match[0] is the fully matched url; 1, 2, 3... store wildcard matches// Some generic validationif(!checkIfExists(photoId)){ctx.throw(404)}ctx.oembed.photo({// As per spec, these three props are requiredurl: `https://example.com/photo/${photoId}.jpg`,width: 300,height: 200,// any additional data below is optionalprovider_url: 'https://example.com'})})
API
Creating middleware
importoembedfrom'koa-oembed'constmiddleware=oembed(urlScheme,/* URL scheme. May include wildcards. */options: {/* Optional options object */format: 'json'|'xml',/* Indicates a fixed api format. */asterisksRequired: boolean,/* Indicates that matched * patterns must contain at least one character. Defaults to false. */caseSensitive: boolean/* Indicates that the search should be case sensitive. Defaults to false. */})
ctx.oembed
ctx.oembed={match: [],/* Regex match object. */format: 'json'|'xml',/* Format of response. */photo({ url, width, height, ...data}),/* Send photo response. */video({ html, width, height, ...data}),/* Send video response. */link({ ...data}),/* Send link response with any data. */rich({ html, width, height, ...data})/* Send rich content response. */}