Incorporamento/oneboxing di video "short" di Youtube non funzionante

Ciao!

L’incorporamento dei video di Youtube funziona sui miei forum, ma non i video brevi (quelli con /shorts/ nell’URL) come questo:

La richiesta onebox restituisce un errore 404.

L’incorporamento dei video normali di Youtube funziona.
Non riscontro questo problema su try.discourse o meta.
Suppongo che derivi da un’impostazione del sito non configurata correttamente.

Qualche idea?


Youtube oneboxing è qualcosa che abbiamo creato noi. Qualcuno deve inviare una pr-welcome per la compatibilità con shorts. Spostamento in Feature

Nel frattempo puoi sempre aggiungere l’URL manuale dell’iframe all’impostazione del sito allowed iframes:

È uno alto però :rofl:

3 Mi Piace

Forse è a causa della posizione del server, come lo era/è qui Youtube embeddings have stopped working for servers in Europe

1 Mi Piace

Grazie per il chiarimento!

Potresti dirmi quale URL dovrei aggiungere negli iframe consentiti per far apparire il video come hai fatto tu? Farebbe perfettamente al caso mio per ora, anche se è effettivamente alto.


Per quanto riguarda l’altezza del video, è possibile renderlo meno alto impostando un max-height con CSS sull’iframe. Il problema è che l’iframe non ha alcun attributo che specifichi che si tratta di un video corto (verticale). :confused:

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

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

Grazie Falco.

Immagino di essere vicino, ma sono ancora un po’ confuso.

Quindi, ho aggiunto questo URL negli iframe consentiti.

Ma poi, cosa devo fare per far apparire il video?

Se scrivo nel mio post https://www.youtube.com/shorts/SWeTMdyv50Q, non funzionerà.
Se scrivo <iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe>, non funzionerà.
Se scrivo https://www.youtube.com/embed/SWeTMdyv50Q, funzionerà, ma visualizzerà il video corto con il rapporto larghezza/altezza standard dei video di YouTube (che va bene per me, anche se preferirei avere un altro rapporto e non dover scrivere manualmente “embed” nell’URL):

Fai clic con il pulsante destro del mouse su un video di Shorts e seleziona “Copia codice di incorporamento”. Questo è ciò che intendevo per “codice di incorporamento manuale”, scusa se non sono stato chiaro.

2 Mi Piace

Inoltre, sostituire /shorts/ con watch?v=, l’URL predefinito di un video di Youtube, funziona.

Quindi, su Youtube, su https://www.youtube.com/shorts/SWeTMdyv50Q, facendo clic con il pulsante destro del mouse → Copia URL video funzionerà poiché restituisce https://youtu.be/SWeTMdyv50Q che viene visualizzato correttamente su Discourse (anche se con il normale rapporto largo).

2 Mi Piace

Non sono uno sviluppatore, ma immagino che qualcosa del genere potrebbe rendere il pr-welcome più facile per qualcuno che lo è?

2 Mi Piace

L’ho fatto, anche se potrei aver combinato un piccolo pasticcio con la mia pull request perché per qualche motivo non mi sono ancora abituato a GitHub… Devo davvero leggere il manuale (e, mi dice un amico, creare branch dal mio fork di Discourse…). :upside_down_face:

Solo per informazione, ho appena modificato il file lib\\onebox\\engine\\youtube_onebox.rb per aggiungere

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

Sarebbe più facile cambiare shorts in embed?

Non sono sicuro di cosa intendi.

Le persone di solito copiano e incollano il loro link Youtube dalla barra degli indirizzi.

Ora Youtube ha un nuovo URL /shorts/, le persone copieranno e incolleranno questi link /shorts/ e non sono ancora supportati dal oneboxing di Youtube.

I link /embed/ lo sono, ma richiedono all’utente di cercare effettivamente su Youtube l’URL di incorporamento, cosa che praticamente nessuno fa :thinking:

1 Mi Piace

Mi stavo solo chiedendo se sarebbe un lavoro più facile cambiare quell’URL? Perché youtube.com/shorts/something è esattamente lo stesso di youtube.com/embed/something, e con /embed/ il oneboxing/embedding funziona benissimo qui.\n\nhttps://youtube.com/shorts/aQFdwUeZxkA non funziona:\n\nhttps://youtube.com/shorts/aQFdwUeZxkA?feature=share\n\nMa https://youtube.com/embed/aQFdwUeZxkA funziona:\n\nYouTube

Non ti seguo ancora. Chi cambierebbe l’URL? L’autore del post? Ma l’autore del post non vuole riscrivere manualmente parte di un URL (non saprebbe nemmeno perché il video non viene incorporato), vuole solo copiare e incollare, e voilà, funziona.


Modifica: o intendi che il codice Oneboxing di Discourse sostituirebbe /shorts/ con /embed/?

Sì, forse! Non sono esattamente un mago del codice :smile:

Sì. E non so programmare un po’ ma potrei immaginare che sostituirlo non possa essere così difficile :wink:

2 Mi Piace

Entrambi hanno lo stesso risultato finale, giusto? Che un video shorts venga poi incorporato correttamente con funzionalità di riproduzione?

Beh… non sono sicuro di aver capito. :sweat_smile:

  1. http://youtu.be/SWeTMdyv50Q porta a

Questi tre diversi formati di link portano a diverse visualizzazioni su Youtube.

Qualunque sia il formato dell’URL, il codice si preoccupa solo dell’ID del video:

Il codice attualmente non supporta /shorts/ e ci sono diversi modi per farlo funzionare.

Il mio suggerimento, da neofita del codice, è di duplicare questa parte:

e sostituire embed con shorts. L’ho provato sulla mia installazione di sviluppo e funziona perfettamente.

Se c’è un modo più elegante per farlo, sarei felice di saperlo :slight_smile:

2 Mi Piace

Ottimo lavoro @Canapin :clap:

È qualcosa per cui vorresti inviare una pull request?

Sì, sto solo avendo difficoltà con il file di test ruby. Non funziona e non so perché. Non ho mai usato/creato unit testing prima, quindi…

Il file che dovrebbe essere modificato è discourse/spec/lib/onebox/engine/youtube_onebox_spec.rb at 493d437e79f88ab9829a36fa000cc6107085e424 · discourse/discourse · GitHub

Ho provato ad aggiungere questo in fondo al file:

  it \"può analizzare i risultati di 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

E ho anche aggiunto questo all’inizio del file, in before do:

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

Ho eseguito i test con bin/rspec spec/lib/onebox/engine/youtube_onebox_spec.rb
Ma il test che ho aggiunto fallisce.

Al momento non ho il messaggio di errore e sarò impegnato per le prossime ore.

Funziona ora:

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

1 Mi Piace