Vimeo-Embed-URLs wurden beim Parsen in E-Mails falsch interpretiert

Vimeo bietet zwei Arten von URLs an: direkte Links (https://vimeo.com/508864124/fcbbcc92fa) und Einbettungslinks (die in einem iframe verwendet werden können, aber nicht funktionieren, wenn sie direkt angeklickt werden).

Zum Beispiel:

<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
  1. Wenn dies als Benachrichtigungs-E-Mail gesendet wird, wird der direkte Link korrekt angezeigt, aber der iframe wird in einen Link mit der falschen URL umgewandelt: https://vimeo.com/508864124?h=fcbbcc92fa anstelle von https://player.vimeo.com/video/508864124?h=fcbbcc92fa

    Noch schlimmer, wenn am Ende der Einbettungs-URL ein (gültiger) Schrägstrich hinzugefügt wird, wird die Video-ID in der E-Mail entfernt: <iframe src="https://player.vimeo.com/video/508864124/?h=fcbbcc92fa" ...></iframe> wird zu https://vimeo.com/?h=fcbbcc92fa

  2. Gibt es eine Möglichkeit, die Umwandlung von iframes in URLs ganz zu umgehen? So wie wir es bereits mit Umfragen tun, die etwas sagen wie “Klicken Sie hier, um die Umfrage anzuzeigen”.

Tricky, wir haben einige spezielle Magie, um zu ändern, wie wir für E-Mail-Prozesse neu zuordnen, die wir bereinigen können, sicher.

Ich werde vorerst ein pr-welcome einfügen und die weitere Priorisierung berücksichtigen, wenn dies noch ein paar Mal vorkommt.

1 „Gefällt mir“

[quote=“Nacho Caballero, post:1, topic:231042, username:Nacho_Caballero”]
Gibt es eine Möglichkeit, die Konvertierung von Iframes in URLs vollständig zu umgehen? So wie wir es bereits mit Umfragen tun, heißt es etwas wie „Klicken Sie hier, um die Umfrage anzuzeigen“.
[/quote]Danke, Sam. Fallen Ihnen irgendwelche vorübergehenden Lösungen ein, um zu verhindern, dass Leute die URL in E-Mails sehen, ohne sie in einem [details]-Tag verstecken zu müssen?

Ehrlich gesagt, mir fallen hier nicht viele Workarounds ein, abgesehen davon, vielleicht einen Link zu erzwingen, der nicht in einer Box angezeigt wird?

https://vimeo.com/185876954
<https://vimeo.com/185876954>

https://vimeo.com/185876954
https://vimeo.com/185876954

1 „Gefällt mir“

@Nacho_Caballero Das von Ihnen bereitgestellte Beispiel eines nicht gelisteten Videos, nicht gelistete Videos haben eine andere URL-Struktur.

Und die Art und Weise, ein nicht gelistetes Video gemäß der Anfrage von Vimeo einzubetten, ist anders, siehe Use oEmbed with private videos – Vimeo Help Center

Ich denke, ein möglicher Ausweg wäre, Ihr eigenes Embedding gemäß dem obigen Dokument zu erstellen.

@sam
Und für Discourse, wäre es vielleicht besser, die Vimeo API zu verwenden, um die Einbettungs-URL zu erhalten, anstatt sie selbst zu erstellen. Siehe https://stackoverflow.com/questions/51414260/vimeo-url-ive-never-seen-before-with-two-different-ids-how-do-i-get-it-to-work. Und diese Zeilen sind relevant discourse/lib/onebox/engine/vimeo_onebox.rb at 657256a099a601a0694d11d15c42ad76988efe8c · discourse/discourse · GitHub

Wie auch immer, wenn meine Vermutung richtig ist, sollte dies nicht nur E-Mails, sondern auch das normale Posten betreffen: 1-Minute Audio Test for Stereo Speakers &amp; Headphones-2ZrWHtvSog4

Um den iframe zu erhalten, habe ich Folgendes getan:

GET https://vimeo.com/api/oembed.json?url=https://vimeo.com/508864124/fcbbcc92fa
Also habe ich Folgendes erhalten:

{\"type\":\"video\",\"version\":\"1.0\",\"provider_name\":\"Vimeo\",\"provider_url\":\"https:\\/\\/vimeo.com\\/\",\"html\":\"\u003ciframe src=\\\"https:\\/\\/player.vimeo.com\\/video\\/508864124?h=fcbbcc92fa\u0026amp;app_id=122963\\\" width=\\\"426\\\" height=\\\"240\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen; picture-in-picture\\\" allowfullscreen\u003e\u003c\\/iframe\u003e\",\"width\":426,\"height\":240,\"domain_status_code\":403,\"video_id\":508864124,\"uri\":\"\\/videos\\/508864124:fcbbcc92fa\"}

UTF-8 dekodiert: für den iframe

<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa&amp;app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>

Der iframe selbst

Bearbeiten/Aktualisieren:

Ich habe einen PR zur Behebung eingereicht. Ich glaube, das Problem lag beim Regex-Muster. Es hat Vimeo nicht richtig erfasst, wenn es nicht vom Standardtyp war. Daher habe ich das Regex-Muster entsprechend geändert.

1 „Gefällt mir“

@ghassan Mir ist gerade aufgefallen, dass dies immer noch ein Problem ist.

Wenn ein Iframe ein nicht gelistetes Video enthält, wird die URL in der E-Mail nicht korrekt umgewandelt. Zum Beispiel:

<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>

Wird in Folgendes umgewandelt (was eine 404 ist): https://vimeo.com/508864124?h=fcbbcc92fa
Anstelle der korrekten URL: https://vimeo.com/508864124/fcbbcc92fa

Vielleicht muss der Regex, den Sie in Ihrem PR hinzugefügt haben, einen zusätzlichen Schritt enthalten (wandeln Sie ?h= in / um, wenn Sie eine E-Mail senden)

Damit ich das richtig verstehe:

  • Es gibt verschiedene Formate von Vimeo-URLs. Unser Problem betrifft nur die E-Mail-Seite, richtig?
  • Um dies zu replizieren, muss man Folgendes tun:
    • URL oder iFrame in ein Thema einfügen (Was sind alle Fälle davon?)
    • Es sollte im Web wie erwartet funktionieren, aber wenn der Inhalt des Themas per E-Mail gesendet wird, wird es knifflig.

Ja. Die von Ihnen vorgenommene Regex-Änderung ermöglichte die Erkennung von Iframe-src-URLs (https://player.vimeo.com/video/508864124?h=fcbbcc92fa), sodass dies kein Problem mehr darstellt. Das Problem liegt in der E-Mail, die gesendet wird.

Wenn Sie eine einfache URL einfügen (https://vimeo.com/508864124/fcbbcc92fa), gibt es kein Problem. Es ist nur ein Problem mit dem Iframe-src (https://player.vimeo.com/video/508864124?h=fcbbcc92fa).

Das tut es derzeit.

Ja. Derzeit wird der Iframe-src (https://player.vimeo.com/video/508864124?h=fcbbcc92fa) in diesen umgewandelt: https://vimeo.com/508864124?h=fcbbcc92fa anstatt in diesen: https://vimeo.com/508864124/fcbbcc92fa

Es ist für mich immer noch schwierig, dies zu reproduzieren, da ich ein Premium-Konto benötige, um nicht gelistete Videos auf Vimeo zu haben.

Außerdem denke ich, dass Ihr obiges Video-Beispiel nur das Laden von bestimmten Domains zulässt. Können Sie auch meine Sandbox-Instanz zulassen, es zu laden: https://discuss.gsgapp.io.

Noch einmal und um ganz klar zu sein: Sie erwarten nicht, dass das Video in E-Mails abgespielt wird, aber Sie erwarten, dass die Leute, wenn sie auf die Video-Position klicken, zur richtigen URL weitergeleitet werden? Habe ich das richtig verstanden?

Erledigt :+1:

Korrekt :+1:

Danke für die Hilfe!

Aha, das Problem wurde jetzt gefunden:

Was passiert, ist, dass beim Einfügen von reinem iframe-Code der Onebox-Code umgangen werden kann. Wenn er umgangen wird, hat der resultierende iframe-Code nicht data-original-href, was der Link ist, der in der E-Mail-Vorlage verwendet wird.

Und wenn data-original-href fehlt, versucht Discourse zu erraten, um welches Video es sich handelt, und nimmt alles nach dem letzten /, was natürlich nicht den Fall eines nicht gelisteten Videos abdeckt.

Wenn Sie zum Beispiel die Entwicklertools/Element untersuchen Ihres Browsers überprüfen, sehen Sie den resultierenden iframe-Code bei Verwendung von reinem iframe-Code:

<iframe> src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen=""></iframe>

Während beim Einfügen nur der URL, d. h. wenn Discourse ihn in einen iframe umwandelt:
https://vimeo.com/508864124/fcbbcc92fa.

<iframe class="vimeo-onebox" src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa&amp;app_id=122963" data-original-href="https://vimeo.com/508864124/fcbbcc92fa" frameborder="0" allowfullscreen="" seamless="seamless" sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation"></iframe>

Beachten Sie das zusätzliche data-original-href="https://vimeo.com/508864124/fcbbcc92fa" in der zweiten Ausgabe. Man könnte vermuten, dass dieses Attribut bei Verwendung eines reinen iframes funktionieren sollte, aber das tut es wahrscheinlich nicht, weil Discourse Ihnen nicht erlaubt, beliebige Attribute hinzuzufügen…

Ich glaube, ich kann eine Lösung vorschlagen, und während ich sicherstelle, dass sie für den Fall funktioniert, dass das Video aufgelistet/öffentlich ist, bin ich auf dieses ungewöhnliche Verhalten von Vimeo gestoßen. Typischerweise folgen alle öffentlichen Videos diesem Muster vimeo.com/{id}, es funktioniert jedoch, wenn Sie einen Schrägstrich hinzufügen, d. h. vimeo.com/{id}/anything

Betrachten Sie das folgende Beispiel:

  • https://vimeo.com/767548129/estgsetgset
  • https://vimeo.com/767548129/hey-discurse
  • https://vimeo.com/767548129 Das Normale

Alle oben genannten Links führen zum selben Video, sodass die Korrektur darin bestehen kann, eine URL aus dem Iframe-src zu erstellen: vimeo.com/{_was nach dem ersten Schrägstrich kommt}/{Was von h= kommt}. Dies sollte für beide Fälle funktionieren.

Der vorgeschlagene Fix FIX: vimeo iframe url when data-original-href is missing by ghassanmas · Pull Request #18894 · discourse/discourse · GitHub, den Sie auch unter https://discuss.gsgapp.io ausprobieren können, wo ich meinen Commit “cherry-picked” habe.

Ich habe persönlich 4 Fälle getestet:

  • Einfügen der Vimeo-URL eines öffentlichen Videos
  • Einfügen der Vimeo-URL eines nicht gelisteten Videos
  • Einfügen eines iFrame-Codes eines öffentlichen Videos
  • Einfügen eines iFrame-Codes eines nicht gelisteten Videos

In allen Fällen führte dies dazu, dass die E-Mail die korrekte URL generierte.

Versuchen Sie aber bitte trotzdem, alle anderen möglichen Variationen zu testen, auf die Sie stoßen könnten, und vor allem, dass dadurch nichts anderes kaputt geht.

Ich habe die E-Mail-Vorlage getestet, indem ich mir selbst eine Direktnachricht gesendet und dann meinen E-Mail-Posteingang überprüft habe. (Da ich zwei Konten unter https://discuss.gsgapp.io registriert habe)

2 „Gefällt mir“

Danke! Ich habe es auch getestet und es funktioniert :+1:

testing:

Es wurde zusammengeführt