تم تحليل روابط تضمين Vimeo بشكل غير صحيح في البريد الإلكتروني

يوفر Vimeo نوعين من الروابط: روابط مباشرة (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>
  1. عند إرسال هذا كبريد إلكتروني للإشعارات، يظهر الرابط المباشر بشكل صحيح، ولكن يتم استبدال إطار iframe برابط بعنوان URL غير صحيح: https://vimeo.com/508864124?h=fcbbcc92fa بدلاً من https://player.vimeo.com/video/508864124?h=fcbbcc92fa

    والأسوأ من ذلك، إذا تمت إضافة شرطة مائلة لاحقة (صالحة) في رابط التضمين، تتم إزالة معرف الفيديو في البريد الإلكتروني: <iframe src="https://player.vimeo.com/video/508864124/?h=fcbbcc92fa" ...></iframe> يصبح https://vimeo.com/?h=fcbbcc92fa

  2. هل هناك طريقة لتجاوز تحويل إطار iframe إلى عنوان URL تمامًا؟ تمامًا كما نفعل بالفعل مع الاستطلاعات، حيث يظهر شيء مثل “انقر هنا لرؤية الاستطلاع”

مخادع، لدينا بعض السحر الخاص لتعديل كيفية إعادة تعييننا للطهي لعمليات البريد الإلكتروني التي يمكننا تنظيفها، بالتأكيد.

سنضع pr-welcome في الوقت الحالي وننظر في تحديد أولويات أخرى إذا ظهر هذا عدة مرات أخرى.

إعجاب واحد (1)

شكراً لك يا سام. هل يمكنك التفكير في أي حلول مؤقتة لمنع الأشخاص من رؤية عنوان URL في البريد الإلكتروني دون الحاجة إلى إخفائه في علامة [details]؟

بصراحة، لا أستطيع التفكير في العديد من الحلول البديلة هنا بخلاف ربما فرض رابط غير مدمج تحته؟

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

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

إعجاب واحد (1)

@Nacho_Caballero المثال الذي قدمته لفيديو غير مدرج، الفيديوهات غير المدرجة لها بنية عنوان URL مختلفة.

وطريقة تضمين فيديو غير مدرج حسب طلب Vimeo مختلفة، راجع Use oEmbed with private videos – Vimeo Help Center

أعتقد أن هناك طريقة للتغلب على ذلك قد تكون بإنشاء التضمين الخاص بك باستخدام المستند أعلاه.

@sam
وبالنسبة لـ discourse، هل سيكون من الأفضل ربما استخدام واجهة برمجة تطبيقات Vimeo للحصول على عنوان URL لمصدر التضمين بدلاً من بنائه. راجع https://stackoverflow.com/questions/51414260/vimeo-url-ive-never-seen-before-with-two-different-ids-how-do-i-get-it-to-work. وتلك الأسطر ذات صلة discourse/lib/onebox/engine/vimeo_onebox.rb at 657256a099a601a0694d11d15c42ad76988efe8c · discourse/discourse · GitHub

على أي حال، إذا كان تخميني صحيحًا، فيجب أن يؤثر هذا على النشر المعتاد وليس فقط البريد الإلكتروني: 1-Minute Audio Test for Stereo Speakers &amp; Headphones-2ZrWHtvSog4

للحصول على الـ 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&amp;app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>

الـ iframe نفسه

تعديل/تحديث:

لقد قدمت طلب سحب (PR) للإصلاح، أعتقد أن المشكلة كانت في نمط التعبير العادي (regex). لم يلتقط الـ 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

ربما يحتاج التعبير العادي الذي أضفته في طلب السحب الخاص بك إلى خطوة إضافية (تحويل ?h= إلى / عند إرسال بريد إلكتروني)

للتوضيح فقط،

  • هناك أنواع مختلفة من تنسيقات عناوين URL الخاصة بـ Vimeo، مشكلتنا الوحيدة هي جانب البريد الإلكتروني، صحيح؟
  • لتكرار هذا، يحتاج المرء إلى القيام بما يلي:
    • لصق عنوان URL أو iframe في الموضوع (ما هي جميع حالات هذا)
    • يجب أن يعمل كما هو متوقع على الويب ولكن إذا تم إرسال بريد إلكتروني بمحتوى الموضوع، فإن الأمر يصبح صعبًا

نعم. التغيير الذي أجريته على التعبير النمطي جعل من الممكن التعرف على عناوين URL الخاصة بـ iframe src (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?h=fcbbcc92fa بدلاً من هذا: https://vimeo.com/508864124/fcbbcc92fa

لا يزال من الصعب عليّ إعادة إنتاجه لأنني بحاجة إلى حساب مميز للفيديوهات غير المدرجة على Vimeo.

أعتقد أيضًا أن مثال الفيديو الخاص بك أعلاه يسمح فقط بالتحميل من نطاقات معينة، هل يمكنك السماح لنسخة الاختبار الخاصة بي بتحميله أيضًا: https://discuss.gsgapp.io.

مرة أخرى، ولأكون واضحًا تمامًا، أنت لا تتوقع تشغيل الفيديو في البريد الإلكتروني، ولكنك تتوقع عندما ينقر الأشخاص على موضع الفيديو أن يتم توجيههم إلى عنوان URL الصحيح؟ هل أنا على حق في ذلك؟

تم :+1:

صحيح :+1:

شكرا للمساعدة!

أها، وجدت المشكلة الآن:

إذًا ما يحدث هو أنه عند لصق كود 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&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>

لذا لاحظ data-original-href="https://vimeo.com/508864124/fcbbcc92fa" الإضافي في الناتج الثاني، قد يخمن المرء أنه إذا كان هذا السمة عند استخدام iframe عادي فسيعمل، ولكنه لا يعمل ربما لأن discourse لا يسمح لك بإضافة أي سمة تريدها…

أعتقد أنه يمكنني اقتراح حل، وبينما أضمن أنه سيعمل في حالة إدراج الفيديو/جعله عامًا، توصلت إلى هذا السلوك غير المعتاد لـ Vimeo. عادةً ما تتبع جميع مقاطع الفيديو العامة هذا النمط vimeo.com/{id}، ومع ذلك، سيعمل إذا أضفت شرطة مائلة، أي vimeo.com/{id}/anything

ضع في اعتبارك المثال التالي:

  • https://vimeo.com/767548129/estgsetgset
  • https://vimeo.com/767548129/hey-discurse
  • https://vimeo.com/767548129 الحالة العادية

كل ما سبق يؤدي إلى نفس الفيديو، لذا يمكن أن يكون الحل هو إنشاء عنوان URL من مصدر iframe، vimeo.com/{ما يأتي بعد الشرطة المائلة الأولى}/{ما يأتي من h=}. هذا سيجعله يعمل في كلتا الحالتين.

الإصلاح المقترح FIX: vimeo iframe url when data-original-href is missing by ghassanmas · Pull Request #18894 · discourse/discourse · GitHub ، يمكنك أيضًا تجربته على https://discuss.gsgapp.io حيث قمت باختيار التزامي.

لقد اختبرت شخصيًا 4 حالات:

  • لصق عنوان URL لفيديو عام من Vimeo
  • لصق عنوان URL لفيديو غير مدرج من Vimeo
  • لصق iframe vanilla لفيديو عام
  • لصق iframe vanilla لفيديو غير مدرج

في جميع الحالات، أدى ذلك إلى قيام البريد الإلكتروني بإنشاء عنوان URL الصحيح.

ولكن على أي حال، يرجى محاولة الاختبار لجميع الاختلافات الممكنة الأخرى التي قد تواجهها، والأهم من ذلك، أنه لا يكسر أشياء أخرى.

الطريقة التي اختبرت بها قالب البريد الإلكتروني هي أنني كنت أرسل لنفسي رسالة مباشرة، ثم أتحقق من صندوق الوارد للبريد الإلكتروني. (نظرًا لأن لدي حسابين مسجلين على https://discuss.gsgapp.io)

إعجابَين (2)

شكرا لك! لقد اختبرته أيضًا وهو يعمل :+1:

اختبار:

لقد تم دمجه