Youtube "short" Videos Typ Einbettung/Oneboxing funktioniert nicht

Hallo!

YouTube-Videoeinbettungen funktionieren in meinen Foren, aber keine Kurzvideos (die mit /shorts/ in der URL) wie dieses:

Die Onebox-Anfrage gibt einen 404-Fehler zurück.

Reguläre YouTube-Videoeinbettungen funktionieren.
Ich habe dieses Problem nicht auf try.discourse oder meta.
Ich vermute, es liegt an einer nicht richtig konfigurierten Website-Einstellung.

Irgendwelche Hinweise?


Youtube Oneboxing ist etwas, das wir speziell entwickelt haben. Jemand muss einen pr-welcome für die Shorts-Kompatibilität einreichen. In der Zwischenzeit können Sie immer die manuelle iframe-URL zu den allowed iframes Site-Einstellungen hinzufügen:

Es ist allerdings ein langes Teil :rofl:

3 „Gefällt mir“

Vielleicht liegt es am Standort des Servers, so wie es hier war/ist Youtube embeddings have stopped working for servers in Europe

1 „Gefällt mir“

Vielen Dank für die Klarstellung!

Könnten Sie mir bitte sagen, welche URL ich zu den erlaubten iframes hinzufügen soll, damit das Video so angezeigt wird, wie Sie es getan haben? Es würde vorerst perfekt funktionieren, auch wenn es tatsächlich hoch ist.


Was die Videohöhe betrifft, ist es möglich, sie durch Festlegen einer max-height mit CSS auf dem iframe zu reduzieren. Das Problem ist, dass der iframe kein Attribut irgendeiner Art hat, das angibt, dass es sich um ein kurzes (vertikales) Video handelt. :confused:

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

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

Danke, Falco.

Ich glaube, ich bin nah dran, aber ich bin immer noch etwas verwirrt.

Ich habe also diese URL zu den erlaubten iframes hinzugefügt.

Was muss ich dann tun, damit das Video erscheint?

Wenn ich in meinen Beitrag schreibe https://www.youtube.com/shorts/SWeTMdyv50Q, funktioniert es nicht.
Wenn ich schreibe <iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe>, funktioniert es nicht.
Wenn ich schreibe https://www.youtube.com/embed/SWeTMdyv50Q, funktioniert es, zeigt aber das kurze Video mit dem Standard-Seitenverhältnis von YouTube-Videos an (was für mich in Ordnung ist, obwohl ich es vorziehen würde, ein anderes Seitenverhältnis zu haben und nicht manuell „embed“ in die URL schreiben zu müssen):

Klicken Sie mit der rechten Maustaste auf ein Shorts-Video und wählen Sie „Einbettungscode kopieren“. Das meinte ich mit „manueller Einbettungscode“, Entschuldigung, dass ich mich nicht klar ausgedrückt habe.

2 „Gefällt mir“

Außerdem funktioniert der Ersatz von /shorts/ durch watch?v=, die Standard-URL eines YouTube-Videos.

Wenn Sie also auf YouTube unter \u003chttps://www.youtube.com/shorts/SWeTMdyv50Q\u003e mit der rechten Maustaste klicken -\u003e Videolink kopieren wählen, funktioniert dies, da es https://youtu.be/SWeTMdyv50Q zurückgibt, was auf Discourse korrekt angezeigt wird (allerdings mit dem normalen breiten Verhältnis).

2 „Gefällt mir“

Ich bin kein Entwickler, aber ich vermute, dass etwas wie das die pr-welcome für jemanden, der einer ist, einfacher machen könnte?

2 „Gefällt mir“

Ich habe es zwar geschafft, aber ich habe meinen Pull Request vielleicht ein wenig vermasselt, weil ich aus irgendeinem Grund noch nicht an GitHub gewöhnt bin… Ich muss wirklich das Handbuch lesen (und, sagt mir ein Freund, Zweige von meiner Discourse-Fork erstellen…). :upside_down_face:

Nur zur Information, ich habe gerade die Datei lib\\onebox\\engine\\youtube_onebox.rb bearbeitet, um Folgendes hinzuzufügen:

# https://www.youtube.com/shorts/wi2jAtpBl0Y
if uri.path["/shorts/"]
  id ||= uri.path[/\\/shorts\\/([\\w\\-]+)/, 1]
end
1 „Gefällt mir“

Wäre es einfacher, shorts in embed zu ändern?

Ich bin mir nicht sicher, was Sie meinen.

Normalerweise kopieren und fügen Leute ihre YouTube-Links aus ihrer Adressleiste ein.

Jetzt hat YouTube neue /shorts/-URLs. Leute werden diese /shorts/-Links kopieren und einfügen, und sie werden noch nicht vom YouTube-Oneboxing unterstützt.

/embed/-Links werden unterstützt, aber sie erfordern, dass der Benutzer tatsächlich auf YouTube nach der Einbettungs-URL sucht, was so gut wie niemand tut :thinking:

1 „Gefällt mir“

Ich frage mich nur, ob es einfacher wäre, diese URL zu ändern? Denn youtube.com/shorts/etwas ist genau dasselbe wie youtube.com/embed/etwas, und mit /embed/ funktioniert Oneboxing/Embedding hier einwandfrei.

https://youtube.com/shorts/aQFdwUeZxkA funktioniert nicht:

Aber https://youtube.com/embed/aQFdwUeZxkA funktioniert:

Ich folge dir immer noch nicht. Wer würde die URL ändern? Der Poster? Aber der Poster möchte nicht manuell einen Teil einer URL umschreiben (er würde nicht einmal wissen, warum das Video nicht eingebettet wird), er möchte nur kopieren und einfügen, und zack, es funktioniert.


Bearbeiten: Oder meinst du, dass der Oneboxing-Code von Discourse /shorts/ durch /embed/ ersetzen würde?

Ja, vielleicht! Ich bin nicht gerade ein Code-Zauberer :smile:

Ja. Und ich kann nicht ein bisschen programmieren, aber ich könnte mir vorstellen, dass das Ersetzen nicht so schwer ist :wink:

2 „Gefällt mir“

Beides hat das gleiche Endergebnis, oder? Dass ein Shorts-Video dann schön mit Wiedergabefunktion eingebettet wird?

Nun… ich bin mir nicht sicher, ob ich das verstehe. :sweat_smile:

  1. führt zu

Diese drei verschiedenen Linkformate führen zu unterschiedlichen Anzeigen auf YouTube.

Unabhängig vom URL-Format kümmert sich der Code nur um die Video-ID:

Der Code unterstützt derzeit nicht /shorts/ und es gibt mehrere Möglichkeiten, ihn zum Laufen zu bringen.

Mein Vorschlag als Neuling in der Programmierung ist, diesen Teil zu duplizieren:

und embed durch shorts zu ersetzen. Ich habe es auf meiner Entwicklungsinstallation ausprobiert und es funktioniert perfekt.

Wenn es eine elegantere Möglichkeit gibt, würde ich mich freuen, sie zu erfahren :slight_smile:

2 „Gefällt mir“

Tolle Arbeit @Canapin :clap:

Möchtest du einen Pull-Request dafür einreichen?

Ja, ich habe nur Schwierigkeiten mit der Ruby-Testdatei. Sie funktioniert nicht und ich weiß nicht warum. Ich habe noch nie Unit-Tests verwendet/erstellt, also…

Die Datei, die geändert werden sollte, ist discourse/spec/lib/onebox/engine/youtube_onebox_spec.rb at 493d437e79f88ab9829a36fa000cc6107085e424 · discourse/discourse · GitHub

Ich habe versucht, dies am Ende der Datei hinzuzufügen:

  it \"kann YouTube Shorts-Ergebnisse parsen\" do
    preview = expect(Onebox.preview('https://www.youtube.com/watch?v=wi2jAtpBl0Y').placeholder_html)
    preview.to match(/reacts/)
    preview.to match(/hqdefault/)
  end

Und auch dies am Anfang der Datei, in before do:

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

Ich habe die Tests mit bin/rspec spec/lib/onebox/engine/youtube_onebox_spec.rb ausgeführt.
Aber der von mir hinzugefügte Test schlägt fehl.

Ich habe die Fehlermeldung gerade nicht zur Hand und bin in den nächsten Stunden auch beschäftigt.

Funktioniert jetzt:

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

1 „Gefällt mir“