こんにちは!
フォーラムではYouTube動画の埋め込みは機能しますが、次のような短い動画(URLに/shorts/が含まれるもの)は機能しません。
oneboxリクエストは404エラーを返します。
通常のYouTube動画の埋め込みは機能します。
try.discourseやmetaではこの問題は発生しません。
サイトの設定が正しく構成されていないことが原因だと推測します。
何か手がかりはありますか?
こんにちは!
フォーラムではYouTube動画の埋め込みは機能しますが、次のような短い動画(URLに/shorts/が含まれるもの)は機能しません。
oneboxリクエストは404エラーを返します。
通常のYouTube動画の埋め込みは機能します。
try.discourseやmetaではこの問題は発生しません。
サイトの設定が正しく構成されていないことが原因だと推測します。
何か手がかりはありますか?
YouTube のワンボクシングは、当社が独自に作成したものです。誰かがショート動画の互換性のために pr-welcome を提出する必要があります。Feature に移動します。
それまでの間、allowed iframes サイト設定に手動で iframe URL を追加できます。
ただし、これは背の高いものです ![]()
サーバーの場所が原因かもしれません。例えば、Youtube embeddings have stopped working for servers in Europe の場合のように。
明確化ありがとうございます!
あなたがやったように動画を表示するために、許可された iframe に追加すべき URL を教えていただけますか?縦長ではありますが、これで十分です。
動画の高さについては、iframe に CSS で max-height を設定することで、高さを低くすることができます。問題は、iframe にそれが短い(縦長の)動画であることを示す属性が何もないことです。![]()
<iframe width="672" height="1194" src="https://www.youtube.com/embed/SWeTMdyv50Q" frameborder="0" allowfullscreen="">
https://www.youtube.com/embed/
ファルコ、ありがとう。
これで合っていると思いますが、まだ少し混乱しています。
それで、許可されたiframeにこのURLを追加しました。
では、動画を表示するにはどうすればよいですか?
投稿に https://www.youtube.com/shorts/SWeTMdyv50Q と入力しても、機能しません。
<iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe> と入力しても、機能しません。
https://www.youtube.com/embed/SWeTMdyv50Q と入力すると機能しますが、YouTubeの標準的な動画の幅/高さの比率で短い動画が表示されます(これは私にとって問題ありませんが、別の比率で「embed」をURLに手動で入力したくないです)。
右クリックして「埋め込みコードをコピー」を選択します。それが「手動埋め込みコード」の意味でした。明確でなくてすみません。
また、YouTube動画のデフォルトURLであるwatch?v=に/shorts/を置き換えることで機能します。
開発者ではありませんが、おそらくそのようなもので pr-welcome が開発者にとってより簡単になるのではないでしょうか?
少しだけプルリクエストを間違えたかもしれませんが、GitHubにまだ慣れていないので、どうにかしました…マニュアルを読む必要がありますね(そして、友人が言うには、Discourseのフォークからブランチを作成する必要があるそうです…)。![]()
参考までに、lib\\onebox\\engine\\youtube_onebox.rbファイルを編集して以下を追加しました。
# https://www.youtube.com/shorts/wi2jAtpBl0Y
if uri.path["/shorts/"]
id ||= uri.path[/\\/shorts\\/([\\w\\-]+)/, 1]
end
shorts を embed に変更する方が簡単でしょうか?
よくわかりません。
通常、人々はアドレスバーからYouTubeリンクをコピー&ペーストします。
現在、YouTubeには新しい /shorts/ URLがあり、人々はこれらの /shorts/ リンクをコピー&ペーストしますが、YouTubeのワンボクシングではまだサポートされていません。
/embed/ リンクはサポートされていますが、ユーザーが実際にYouTubeで埋め込みURLを探す必要があります。しかし、ほとんど誰もそれをしません ![]()
URLを変更する方が簡単な仕事ではないかと疑問に思っています。なぜなら、youtube.com/shorts/something は youtube.com/shorts/something と全く同じであり、/embed/ を使用するとワンボクシング/埋め込みがここで問題なく機能するからです。
https://youtube.com/shorts/aQFdwUeZxkA は機能しません:
しかし、https://youtube.com/embed/aQFdwUeZxkA は機能します:
まだよく理解できません。誰がURLを変更するのですか?投稿者ですか?しかし、投稿者はURLの一部を手動で書き直したくありません(動画が埋め込まれない理由さえわからないでしょう)、ただコピー&ペーストして、うまくいってほしいだけです。
編集:それとも、DiscourseのOneboxingコードが/shorts/を/embed/に置き換えるということですか?
はい、多分そうです!私は正確にはコードの達人ではありません ![]()
はい。私は少ししかコーディングできませんが、置き換えるのはそれほど難しくないだろうと想像できます ![]()
どちらも同じ結果になりますよね?ショート動画が再生機能付きでうまく埋め込まれるということですか?
うーん…よく理解できません。![]()
これら3つの異なるリンク形式は、YouTubeで異なる表示になります。
URL形式が何であれ、コードは動画IDのみを気にします。
現在のコードは /shorts/ をサポートしておらず、機能させるための方法は複数あります。
コーディング初心者としての私の提案は、この部分を複製することです。
そして embed を shorts に置き換えます。開発環境にインストールして試したところ、完璧に動作しました。
もっとエレガントな方法があれば、ぜひ教えてください ![]()
素晴らしい仕事です、@Canapin ![]()
プルリクエストを提出したいですか?
はい、Rubyのテストファイルで苦労しています。うまくいかず、理由がわかりません。単体テストを使ったことも作ったこともないので…。
修正すべきファイルは discourse/spec/lib/onebox/engine/youtube_onebox_spec.rb at 493d437e79f88ab9829a36fa000cc6107085e424 · discourse/discourse · GitHub です。
ファイルの末尾に以下を追加してみました。
it "can parse youtube shorts results" do
preview = expect(Onebox.preview('https://www.youtube.com/watch?v=wi2jAtpBl0Y').placeholder_html)
preview.to match(/reacts/)
preview.to match(/hqdefault/)
end
また、ファイルの先頭の before do に以下を追加しました。
stub_request(:get, "https://www.youtube.com/shorts/wi2jAtpBl0Y").to_return(status: 200, body: onebox_response("youtube-shorts"))
bin/rspec spec/lib/onebox/engine/youtube_onebox_spec.rb でテストを実行しました。
しかし、追加したテストが失敗します。
現在エラーメッセージはありませんが、今後数時間は忙しくなります。
これで動作します:
https://www.youtube.com/shorts/kt7jiaGVsto