discourse/lib/onebox/engine
Martin Brennan 2b04fbeb30
FIX: Use oEmbed for YouTube oneboxing (#35959)
We currently rely on Open Graph data to render YouTube oneboxes.
However, YouTube does not always give us a response with the Open Graph
data necessary, leading to empty preview HTML like this that shows
as a broken image in the composer:

```
<img src="" width="480" height="360" title=" - YouTube" style="aspect-ratio: 480 / 360;">
```

In addition, our old method of parsing YouTube script tags for JSON
which contains information for the video, introduced in

4d669d2b71,
seems to no longer work reliably, possibly due to changes in YouTube's
JS structure.

To fix this, we switch to using YouTube's oEmbed endpoint which gives us
all the metadata we need for oneboxes in JSON format, including title,
author,
thumbnail URL, and video dimensions. This approach is more robust and
less likely to break
due to changes in YouTube's page structure.

c.f.
https://meta.discourse.org/t/youtube-uris-fail-to-render-thumbnails-when-oneboxed/387673
2025-11-12 14:13:16 +10:00
..
allowlisted_generic_onebox.rb FIX: Allow oneboxes with no description (#31518) 2025-02-26 13:16:51 +10:00
amazon_onebox.rb FIX: correctly unescape title for amazon oneboxes (#33010) 2025-06-02 17:50:13 +05:30
animated_image_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
asciinema_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
audio_com_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
audio_onebox.rb DEV: Drop experimental enable_diffhtml_preview setting (#31306) 2025-02-12 15:58:30 +00:00
audioboom_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
band_camp_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
cloud_app_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
coub_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
discourse_topic_onebox.rb FEATURE: Show more context in Discourse topic oneboxes 2023-01-11 14:22:53 +01:00
facebook_media_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
five_hundred_px_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
flickr_onebox.rb DEV: Clean up requires (#34946) 2025-09-24 12:00:22 +02:00
flickr_shortened_onebox.rb DEV: Clean up requires (#34946) 2025-09-24 12:00:22 +02:00
gfycat_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
github_actions_onebox.rb FEATURE: Allow for multiple GitHub onebox tokens (#27887) 2024-07-15 13:07:36 +10:00
github_blob_onebox.rb UX: Improve git blob oneboxes (#30694) 2025-01-10 11:49:36 +00:00
github_commit_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
github_folder_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
github_gist_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
github_issue_onebox.rb FEATURE: Allow oneboxing private GitHub repo URLs and add private indicator to HTML (#27947) 2024-07-19 12:21:45 +10:00
github_pull_request_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
github_repo_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
gitlab_blob_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
google_calendar_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
google_docs_onebox.rb DEV: Replace custom Onebox blank implementation with ActiveSupport (#23827) 2023-10-07 19:54:26 +02:00
google_drive_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
google_maps_onebox.rb DEV: Update to lastest rubocop-discourse 2024-05-27 18:06:14 +02:00
google_photos_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
google_play_app_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
hackernews_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
html.rb DEV: Drop 'cache_onebox_response_body' feature (#32035) 2025-03-28 10:55:29 +00:00
image_onebox.rb FEATURE: Onebox and Download for WEBP and AVIF (#23235) 2023-08-24 16:44:06 -03:00
imgur_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
instagram_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
json.rb FEATURE: Allow oneboxing private GitHub URLs (#27705) 2024-07-10 09:39:31 +10:00
kaltura_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
loom_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
mixcloud_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
motoko_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
opengraph_image.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
pastebin_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
pdf_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
pubmed_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
reddit_media_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
replit_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
simplecast_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
sketch_fab_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
slides_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
sound_cloud_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
spotify_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
stack_exchange_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
standard_embed.rb FIX: Use oEmbed for YouTube oneboxing (#35959) 2025-11-12 14:13:16 +10:00
steam_store_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
threads_status_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
tiktok_onebox.rb FIX: Add ld+json VideoObject to each lazy video (#34678) 2025-09-03 22:01:14 +08:00
trello_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
twitch_clips_onebox.rb FEATURE: Handle newer url format for Twitch clips (#31080) 2025-01-31 10:42:46 -03:00
twitch_stream_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
twitch_video_onebox.rb DEV: Apply syntax_tree formatting to lib/* 2023-01-09 12:10:19 +00:00
twitter_status_onebox.rb DEV: Add a user agent to all HTTP requests that Discourse makes. (#31555) 2025-03-03 16:32:25 +11:00
typeform_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
video_onebox.rb DEV: Drop experimental enable_diffhtml_preview setting (#31306) 2025-02-12 15:58:30 +00:00
vimeo_onebox.rb FIX: Add ld+json VideoObject to each lazy video (#34678) 2025-09-03 22:01:14 +08:00
wikimedia_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
wikipedia_onebox.rb FIX: Wikipedia onebox images and sections (#31384) 2025-02-19 14:29:17 +10:00
wistia_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
xkcd_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
youku_onebox.rb SECURITY: Restrict allowed URL patterns 2025-02-04 13:32:34 -03:00
youtube_onebox.rb FIX: Use oEmbed for YouTube oneboxing (#35959) 2025-11-12 14:13:16 +10:00