Gli URL di incorporamento di Vimeo sono stati analizzati in modo errato nelle email

Vimeo fornisce due tipi di URL: collegamenti diretti (https://vimeo.com/508864124/fcbbcc92fa) e collegamenti per l’incorporamento (che possono essere utilizzati in un iframe, ma non funzioneranno se cliccati direttamente)

Ad esempio:

<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. Quando questo viene inviato come email di notifica, il collegamento diretto appare correttamente, ma l’iframe viene sostituito con un collegamento con l’URL errato: https://vimeo.com/508864124?h=fcbbcc92fa invece di https://player.vimeo.com/video/508864124?h=fcbbcc92fa

    Ancora peggio, se viene aggiunta una barra finale (valida) nell’URL di incorporamento, l’ID del video viene rimosso nell’email: <iframe src="https://player.vimeo.com/video/508864124/?h=fcbbcc92fa" ...></iframe> diventa https://vimeo.com/?h=fcbbcc92fa

  2. Esiste un modo per aggirare del tutto la conversione da iframe a URL? Proprio come facciamo già con i sondaggi, dice qualcosa come “Clicca qui per vedere il sondaggio”

Difficile, abbiamo una magia speciale per modificare il modo in cui rimappiamo il cotto per i processi di posta elettronica che possiamo ripulire, di sicuro.

Per ora metterò un pr-welcome e considererò un’ulteriore prioritizzazione se questo dovesse ripresentarsi alcune altre volte.

1 Mi Piace

Grazie, Sam. Ti vengono in mente delle soluzioni temporanee per evitare che le persone vedano l’URL via email senza doverlo nascondere in un tag [details]?

Onestamente, non riesco a pensare a molte soluzioni alternative, a parte forse forzare un link non oneboxed sotto di esso?

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

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

1 Mi Piace

@Nacho_Caballero L’esempio che hai fornito di un video non in elenco, i video non in elenco hanno una struttura URL diversa.

E il modo per incorporare un video non in elenco secondo la richiesta di Vimeo è diverso, vedi Use oEmbed with private videos – Vimeo Help Center

Penso che una soluzione potrebbe essere creare il tuo embed utilizzando il documento sopra.

@sam
E per Discourse, sarebbe forse meglio usare l’API di Vimeo per ottenere l’URL sorgente dell’embed invece di costruirlo. Vedi https://stackoverflow.com/questions/51414260/vimeo-url-ive-never-seen-before-with-two-different-ids-how-do-i-get-it-to-work. E quelle righe sono pertinenti discourse/lib/onebox/engine/vimeo_onebox.rb at 657256a099a601a0694d11d15c42ad76988efe8c · discourse/discourse · GitHub

Comunque, se la mia speculazione è corretta, questo dovrebbe interessare la pubblicazione tipica e non solo le email: 1-Minute Audio Test for Stereo Speakers &amp; Headphones-2ZrWHtvSog4

Per ottenere l’iframe ho fatto:

GET https://vimeo.com/api/oembed.json?url=https://vimeo.com/508864124/fcbbcc92fa
Quindi ho ottenuto

{\"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\"}

Decodificato UTF-8: per l’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>

L’iframe stesso

Modifica/Aggiornamento:

Ho inviato una PR per correggere, penso che il problema fosse con il pattern regex. Non catturava correttamente vimeo quando non era del tipo standard. Pertanto ho modificato il pattern regex di conseguenza.

1 Mi Piace

@ghassan Ho appena notato che questo è ancora un problema.

Se un iframe contiene un video non in elenco, l’URL non viene trasformato correttamente nell’email. Ad esempio:

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

Viene trasformato in questo (che è un 404): https://vimeo.com/508864124?h=fcbbcc92fa
Invece dell’URL corretto: https://vimeo.com/508864124/fcbbcc92fa

Forse la regex che hai aggiunto nel tuo PR necessita di un passaggio aggiuntivo (trasformare ?h= in / quando si invia un’email)

Quindi, solo per essere chiari,

  • Ci sono diversi tipi di formato di URL di Vimeo, il nostro unico problema riguarda l’email, giusto?
  • Per replicare questo, cosa bisogna fare:
    • Incollare l’URL o l’iframe sull’argomento (Quali sono tutti i casi di questo)
    • Dovrebbe funzionare come previsto sul web, ma se viene inviato un’email con il contenuto dell’argomento, allora diventa complicato

Sì. La modifica del regex che hai apportato ha reso possibile riconoscere gli URL iframe src (https://player.vimeo.com/video/508864124?h=fcbbcc92fa), quindi non è più un problema. Il problema riguarda l’email che viene inviata.

Se incolli un URL semplice (https://vimeo.com/508864124/fcbbcc92fa), non ci sono problemi. È un problema solo con l’iframe src (https://player.vimeo.com/video/508864124?h=fcbbcc92fa).

Attualmente lo fa.

Sì. Attualmente, l’iframe src (https://player.vimeo.com/video/508864124?h=fcbbcc92fa) viene convertito in questo: https://vimeo.com/508864124?h=fcbbcc92fa invece di questo: https://vimeo.com/508864124/fcbbcc92fa

È ancora difficile per me da riprodurre perché ho bisogno di un account premium per avere video non in elenco su Vimeo.

Inoltre, penso che il tuo esempio di video sopra consenta solo il caricamento da determinati domini, puoi consentire anche alla mia istanza sandbox di caricarlo: https://discuss.gsgapp.io.

Ancora una volta e per essere cristallino, non ti aspetti che il video venga riprodotto via email, ma ti aspetti che quando le persone fanno clic sulla posizione del video vengano indirizzate all’URL corretto? Ho capito bene?

Fatto :+1:

Corretto :+1:

Grazie per l’aiuto!

Aha, ho trovato il problema ora:

Quindi, quello che succede è che quando incolli il codice iframe vanilla, potresti bypassare il codice onebox e, se lo passi, il codice iframe risultante non avrà data-original-href, che è il link utilizzato nel modello di email.

E quando data-original-href è mancante, discourse cerca di indovinare il video, che è qualunque cosa dopo l’ultima /, il che ovviamente non copre il caso di un video non quotato.

Ad esempio, se controlli gli strumenti per sviluppatori/ispezioni l’elemento dal tuo browser, il codice iframe risultante quando si utilizza il codice iframe vanilla:

<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>

Mentre quando incolli solo l’URL, ovvero, lascia che discourse lo converta in iframe
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>

Quindi nota l’data-original-href="https://vimeo.com/508864124/fcbbcc92fa" aggiuntivo nel secondo output, si potrebbe ipotizzare che se l’attributo quando si utilizza iframe vanilla allora dovrebbe funzionare, ma probabilmente non funziona perché discourse non ti permette di aggiungere qualsiasi attributo desideri…

Penso di poter suggerire una soluzione e, pur garantendo che funzionerebbe per il caso in cui il video sia elencato/pubblico, ho riscontrato questo comportamento insolito di Vimeo. In genere, tutti i video pubblici seguono questo schema vimeo.com/{id}, tuttavia funzionerà se si aggiunge uno slash, ad esempio vimeo.com/{id}/qualsiasi_cosa

Considera il seguente esempio:

  • https://vimeo.com/767548129/estgsetgset
  • https://vimeo.com/767548129/hey-discurse
  • https://vimeo.com/767548129 Il normale

Tutti gli esempi sopra riportati portano allo stesso video, quindi la correzione può consistere nel creare un URL dall’iframe src, vimeo.com/{ciò che viene dopo il primo slash}/{Ciò che proviene da h=}. Questo dovrebbe farlo funzionare per entrambi i casi.

La correzione proposta FIX: vimeo iframe url when data-original-href is missing by ghassanmas · Pull Request #18894 · discourse/discourse · GitHub, puoi anche provarla su https://discuss.gsgapp.io dove ho selezionato il mio commit.

Ho testato personalmente per 4 casi:

  • Incollando l’URL di Vimeo di un video pubblico
  • Incollando l’URL di Vimeo di un video non in elenco
  • Incollando l’iframe vanilla di un video pubblico
  • Incollando l’iframe vanilla di un video non in elenco

In tutti i casi ha portato all’email che generava l’URL corretto.

Ma comunque, prova a testare tutte le altre possibili variazioni che potresti incontrare e, soprattutto, che non rompa altre cose.

Il modo in cui ho testato il template dell’email è stato inviarmi un messaggio diretto e poi controllare la casella di posta elettronica. (Poiché ho due account registrati su https://discuss.gsgapp.io)

2 Mi Piace

Grazie! L’ho testato anch’io e funziona :+1:

testing:

È stato unito