Vimeo は 2 種類の URL を提供しています。ダイレクトリンク (https://vimeo.com/508864124/fcbbcc92fa) と埋め込みリンク (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>
-
通知メールで送信すると、ダイレクトリンクは正しく表示されますが、iframe は間違った URL のリンクに置き換えられます: https://vimeo.com/508864124?h=fcbbcc92fa (正しくは https://player.vimeo.com/video/508864124?h=fcbbcc92fa)
さらに悪いことに、埋め込み URL に (有効な) 末尾のスラッシュを追加すると、メールで動画 ID が削除されます: <iframe src="https://player.vimeo.com/video/508864124/?h=fcbbcc92fa" ...></iframe> が https://vimeo.com/?h=fcbbcc92fa になります。
-
iframe から URL への変換を完全にバイパスする方法はありますか? 投票で行っているように、「投票を表示するにはここをクリック」のような表示になるようにしたいのです。
sam
(Sam Saffron)
2
わかりました。メール処理の再マッピングを改善するための特別な処理がありますので、確実にクリーンアップできます。
現時点では #pr-welcome としておきます。これがさらに数回発生した場合は、優先順位を検討します。
「いいね!」 1
サムさん、ありがとうございます。メールでURLを非表示にするために[details]タグを使わずに、URLが見えないようにする一時的な回避策はありますか?
sam
(Sam Saffron)
4
率直に言って、これを回避する方法はあまり思いつきません。せいぜい、その下にリンクを強制的に表示させるくらいでしょうか?
https://vimeo.com/185876954
<https://vimeo.com/185876954>
https://vimeo.com/185876954
https://vimeo.com/185876954
「いいね!」 1
ghassan
(Ghassan Maslamani)
5
ghassan
(Ghassan Maslamani)
6
iframeを取得するために、次のようにしました。
GET https://vimeo.com/api/oembed.json?url=https://vimeo.com/508864124/fcbbcc92fa
そして、次のような結果を得ました。
{"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デコードされたiframeは次のとおりです。
<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa&app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
iframe自体
編集/更新:
修正のためにPRを提出しました。問題は正規表現パターンにあったと思います。標準タイプではない場合にVimeoを正しくキャプチャしていませんでした。そのため、正規表現パターンをそれに応じて変更しました。
「いいね!」 1
@ghassan これがまだ問題になっていることに気づきました。
iframe に非公開の動画がある場合、メール内の URL が正しく変換されません。たとえば、次のようになります。
<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
これは次のように変換されます(404 エラーになります)。https://vimeo.com/508864124?h=fcbbcc92fa
正しい URL の代わりに:https://vimeo.com/508864124/fcbbcc92fa
おそらく、PR に追加した正規表現では、追加の手順が必要になる可能性があります(メール送信時に ?h= を / に変換するなど)。
はい。行った正規表現の変更により、iframeのsrc URL(https://player.vimeo.com/video/508864124?h=fcbbcc92fa)を認識できるようになり、それはもう問題ありません。問題は送信されるメールにあります。
プレーンなURL(https://vimeo.com/508864124/fcbbcc92fa)を貼り付けた場合は問題ありません。問題はiframeのsrc(https://player.vimeo.com/video/508864124?h=fcbbcc92fa)のみです。
現在、そのようになっています。
はい。現在、iframeのsrc(https://player.vimeo.com/video/508864124?h=fcbbcc92fa)は、https://vimeo.com/508864124/fcbbcc92faではなく、https://vimeo.com/508864124?h=fcbbcc92faに変換されてしまいます。
ghassan
(Ghassan Maslamani)
10
Vimeoで非公開動画をアップロードするにはプレミアムアカウントが必要なため、私にはまだ再現が難しいです。
また、上記の動画の例では、特定のドメインからのみ読み込みが可能になっていると思いますが、私のサンドボックスインスタンスである https://discuss.gsgapp.io からも読み込めるようにしていただけますか?
改めて明確にしますが、Eメールで動画を再生することは期待しておらず、動画の位置をクリックしたときに正しいURLにリダイレクトされることを期待している、ということでよろしいでしょうか?
ghassan
(Ghassan Maslamani)
12
問題が判明しました。
つまり、バニラ(そのままの)iframeコードを貼り付けると、oneboxコードをバイパスする可能性があり、それをバイパスすると、結果のiframeコードに data-original-href が含まれなくなります。これは、メールテンプレートで使用されるリンクです。
data-original-href が欠落している場合、Discourseは動画を推測しようとしますが、それは最後の / の後の部分になり、もちろん非公開動画の場合はカバーされません。
たとえば、ブラウザの開発者ツール/要素の検査で確認すると、バニラiframeコードを使用したときの結果の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>
<iframe src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen=""></iframe>
一方、URLのみを貼り付けてDiscourseにiframeに変換させる場合
https://vimeo.com/508864124/fcbbcc92fa。
<iframe class="vimeo-onebox" src="https://player.vimeo.com/video/508864124?h=fcbbcc92fa&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>
2番目の出力に追加された data-original-href="https://vimeo.com/508864124/fcbbcc92fa" に注目してください。バニラiframeを使用した場合にその属性を追加すれば機能するのではないかと推測できますが、おそらくDiscourseは任意の属性を追加することを許可していないため、機能しません。
ghassan
(Ghassan Maslamani)
13
解決策を提案できると思います。動画が公開されている場合に機能することを確認しながら、Vimeo のこの珍しい動作を見つけました。通常、公開されているすべての動画は vimeo.com/{id} というパターンに従いますが、スラッシュを追加すると機能します。つまり、vimeo.com/{id}/anything です。
次の例を検討してください。
https://vimeo.com/767548129/estgsetgset
https://vimeo.com/767548129/hey-discurse
https://vimeo.com/767548129 通常
上記すべてが同じ動画につながるため、修正は iframe の src から URL を作成することです。vimeo.com/{最初のスラッシュの後の部分}/{h=から取得するもの}。これにより、両方のケースで機能するはずです。
ghassan
(Ghassan Maslamani)
14
提案された修正は FIX: vimeo iframe url when data-original-href is missing by ghassanmas · Pull Request #18894 · discourse/discourse · GitHub です。また、私のコミットを cherry-pick した https://discuss.gsgapp.io でも試すことができます。
個人的には4つのケースでテストしました。
- 公開動画のVimeo URLを貼り付け
- 非公開動画のVimeo URLを貼り付け
- 公開動画のiframe vanillaを貼り付け
- 非公開動画のiframe vanillaを貼り付け
すべてのケースで、メールが正しいURLを生成しました。
いずれにしても、遭遇する可能性のある他のすべてのバリエーションをテストし、最も重要なこととして、他のものを壊さないようにしてください。
メールテンプレートをテストした方法は、自分自身にダイレクトメッセージを送信し、メール受信トレイを確認することでした。(https://discuss.gsgapp.io/ に登録した2つのアカウントを持っているため)
「いいね!」 2
ありがとうございます!テストしたところ、動作しました👍