L'intégration/l'encapsulation des vidéos "short" de Youtube ne fonctionne pas

Salut !

L’intégration des vidéos Youtube fonctionne sur mes forums, mais pas les vidéos courtes (celles avec /shorts/ dans l’URL) comme celle-ci :

La requête onebox renvoie une erreur 404.

L’intégration des vidéos Youtube classiques fonctionne.
Je ne rencontre pas ce problème sur try.discourse ou meta.
Je suppose que cela vient d’un paramètre du site mal configuré.

Une idée ?


Le oneboxing YouTube est quelque chose que nous avons créé sur mesure. Quelqu’un doit soumettre une demande de pr-welcome pour la compatibilité avec les Shorts. Passage à Feature

En attendant, vous pouvez toujours ajouter l’URL de l’iframe manuelle au paramètre de site allowed iframes :

C’est un grand format cependant :rofl:

3 « J'aime »

C’est peut-être à cause de l’emplacement du serveur, comme c’était/est le cas ici Youtube embeddings have stopped working for servers in Europe

1 « J'aime »

Merci pour la clarification !

Pourriez-vous me dire quelle URL je dois ajouter dans les iframes autorisées afin d’afficher la vidéo comme vous l’avez fait ? Cela ferait parfaitement l’affaire pour l’instant, même si elle est effectivement haute.


Quant à la hauteur de la vidéo, il est possible de la rendre moins haute en définissant une max-height avec CSS sur l’iframe. Le problème est que l’iframe n’a aucun attribut qui spécifie qu’il s’agit d’une vidéo courte (verticale). :confused:

<iframe width="672" height="1194" src="https://www.youtube.com/embed/SWeTMdyv50Q" frameborder="0" allowfullscreen="">

https://www.youtube.com/embed/

Merci Falco.

Je pense que je m’en approche, mais je suis encore un peu confus.

J’ai donc ajouté cette URL dans les iframes autorisés.

Mais alors, que dois-je faire pour que la vidéo apparaisse ?

Si j’écris dans mon post https://www.youtube.com/shorts/SWeTMdyv50Q, cela ne fonctionnera pas.
Si j’écris <iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe>, cela ne fonctionnera pas.
Si j’écris https://www.youtube.com/embed/SWeTMdyv50Q, cela fonctionnera, mais affichera la courte vidéo avec le rapport largeur/hauteur standard des vidéos YouTube (ce qui me convient, bien que je préférerais avoir un autre rapport et ne pas avoir à écrire manuellement « embed » dans l’URL) :

Faites un clic droit sur une vidéo YouTube Shorts et sélectionnez « Copier le code d’intégration ». C’est ce que je voulais dire par « code d’intégration manuel », désolé de ne pas avoir été clair.

2 « J'aime »

De plus, remplacer /shorts/ par watch?v=, l’URL par défaut d’une vidéo Youtube, fonctionne.

Ainsi, sur Youtube, sur https://www.youtube.com/shorts/SWeTMdyv50Q, faire un clic droit → Copier l’URL de la vidéo fonctionnera car cela renvoie https://youtu.be/SWeTMdyv50Q qui est correctement affiché sur Discourse (avec le rapport largeur/hauteur habituel cependant).

2 « J'aime »

Je ne suis pas développeur mais je suppose que quelque chose comme ça pourrait faciliter les choses pour un développeur qui voudrait faire un pr-welcome ?

2 « J'aime »

Je l’ai fait, bien que j’aie peut-être un peu foiré ma pull request car pour une raison quelconque, je ne suis toujours pas habitué à GitHub… Je dois vraiment lire le manuel (et, un ami me dit, créer des branches à partir de ma fork Discourse…). :upside_down_face:

Juste pour information, j’ai juste édité le fichier lib\\onebox\\engine\\youtube_onebox.rb pour ajouter

# https://www.youtube.com/shorts/wi2jAtpBl0Y
if uri.path["/shorts/"]
  id ||= uri.path[/\\/shorts\\/([\\w\\-]+)/, 1]
end
1 « J'aime »

Serait-il plus facile de simplement changer shorts en embed ?

Je ne suis pas sûr de ce que vous voulez dire.

Les gens copient-collent généralement leur lien Youtube depuis leur barre d’adresse.

Maintenant, Youtube a une nouvelle URL /shorts/, les gens copieront-colleront ces liens /shorts/ et ils ne sont pas encore pris en charge par le oneboxing de Youtube.

Les liens /embed/ le sont, mais ils nécessitent que l’utilisateur recherche l’URL d’intégration sur Youtube, ce que pratiquement personne ne fait :thinking:

1 « J'aime »

Je me demande juste s’il serait plus facile de changer cette URL ? Parce que youtube.com/shorts/something est exactement la même chose que youtube.com/embed/something, et avec /embed/ l’intégration/l’incorporation fonctionne très bien ici.

https://youtube.com/shorts/aQFdwUeZxkA ne fonctionne pas :

Mais https://youtube.com/embed/aQFdwUeZxkA fonctionne :

Je ne vous suis toujours pas. Qui changerait l’URL ? L’afficheur ? Mais l’afficheur ne veut pas réécrire manuellement une partie d’une URL (il ne saura même pas pourquoi la vidéo ne s’intègre pas), il veut juste copier-coller, et voilà, ça marche.


Edit : ou voulez-vous dire que le code Oneboxing de Discourse remplacerait /shorts/ par /embed/ ?

Oui, peut-être ! Je ne suis pas exactement un sorcier du code :smile:

Oui. Et je ne sais pas coder un peu mais je pouvais imaginer que remplacer simplement ne peut pas être si difficile :wink:

2 « J'aime »

Ces deux méthodes ont le même résultat, n’est-ce pas ? Qu’une vidéo shorts soit ensuite joliment intégrée avec une fonctionnalité de lecture ?

Eh bien… je ne suis pas sûr de comprendre. :sweat_smile:

  1. mène à

Ces trois formats de lien différents mènent à des affichages différents sur YouTube.

Quel que soit le format de l’URL, le code ne s’intéresse qu’à l’ID de la vidéo :

Le code ne prend actuellement pas en charge /shorts/ et il existe plusieurs façons de le faire fonctionner.

Ma suggestion, en tant que néophyte en codage, est de dupliquer cette partie :

et de remplacer embed par shorts. Je l’ai essayé sur mon installation de développement et cela fonctionne parfaitement.

S’il existe une manière plus élégante de le faire, je serais heureux de la connaître :slight_smile:

2 « J'aime »

Excellent travail @Canapin :clap:

Souhaitez-vous soumettre une pull request pour cela ?

Oui, j’ai juste du mal avec le fichier de test ruby. Ça ne fonctionne pas et je ne sais pas pourquoi. Je n’ai jamais utilisé/créé de tests unitaires auparavant donc…

Le fichier qui devrait être modifié est discourse/spec/lib/onebox/engine/youtube_onebox_spec.rb at 493d437e79f88ab9829a36fa000cc6107085e424 · discourse/discourse · GitHub

J’ai essayé d’ajouter ceci en bas du fichier :

  it \"peut analyser les résultats de youtube shorts\" do
    preview = expect(Onebox.preview('https://www.youtube.com/watch?v=wi2jAtpBl0Y').placeholder_html)
    preview.to match(/reacts/)
    preview.to match(/hqdefault/)
  end

Et j’ai aussi ajouté ceci au début du fichier, dans before do :

stub_request(:get, "https://www.youtube.com/shorts/wi2jAtpBl0Y").to_return(status: 200, body: onebox_response("youtube-shorts"))

J’ai exécuté les tests avec bin/rspec spec/lib/onebox/engine/youtube_onebox_spec.rb
Mais le test que j’ai ajouté échoue.

Je n’ai pas le message d’erreur pour le moment et je serai occupé pendant les prochaines heures cependant.

Fonctionne maintenant :

https://www.youtube.com/shorts/kt7jiaGVsto

1 « J'aime »