تضمين مقاطع فيديو "قصيرة" على يوتيوب لا يعمل

أهلاً!

تضمين فيديوهات يوتيوب يعمل على منتدياتي، ولكنه لا يعمل مع الفيديوهات القصيرة (تلك التي تحتوي على /shorts/ في الرابط) مثل هذا:

طلب onebox يُرجع خطأ 404.

تضمين فيديوهات يوتيوب العادية يعمل.
لا أواجه هذه المشكلة على try.discourse أو meta.
أفترض أن المشكلة تأتي من إعداد موقع غير مُكوّن بشكل صحيح.

أي فكرة؟


يوتيوب oneboxing هو شيء قمنا بإنشائه خصيصًا. يحتاج شخص ما إلى تقديم pr-welcome لتوافق shorts. الانتقال إلى Feature
في هذه الأثناء، يمكنك دائمًا إضافة عنوان URL الخاص بـ iframe يدويًا إلى إعداد الموقع allowed iframes:

إنه طويل جدًا :rofl:

3 إعجابات

ربما يكون ذلك بسبب موقع الخادم، كما كان/هو هنا Youtube embeddings have stopped working for servers in Europe

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

شكرا للتوضيح!

هل يمكنك فقط إخباري بعنوان URL الذي يجب أن أضيفه في iframes المسموح بها لكي يتم عرض الفيديو كما فعلت؟ سيؤدي ذلك إلى إنجاز المهمة بشكل مثالي في الوقت الحالي، حتى لو كان طويلاً بالفعل.


بالنسبة لارتفاع الفيديو، من الممكن جعله أقل ارتفاعًا عن طريق تعيين max-height باستخدام CSS على iframe. المشكلة هي أن iframe ليس لديه أي سمة من أي نوع تحدد أنه فيديو قصير (عمودي). :confused:


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

شكرا فالكو.

أعتقد أنني اقتربت، لكنني ما زلت مرتبكًا بعض الشيء.

لذلك، أضفت عنوان URL هذا في الإطارات المضمنة المسموح بها.

إذًا، ماذا يجب أن أفعل لكي يظهر الفيديو؟

إذا كتبت في منشوري https://www.youtube.com/shorts/SWeTMdyv50Q، فلن يعمل.
إذا كتبت <iframe>https://www.youtube.com/shorts/SWeTMdyv50Q</iframe>، فلن يعمل.
إذا كتبت https://www.youtube.com/embed/SWeTMdyv50Q، فسيعمل، ولكنه سيعرض الفيديو القصير بنسبة العرض إلى الارتفاع القياسية لفيديو يوتيوب (وهو أمر جيد بالنسبة لي، على الرغم من أنني أفضل الحصول على نسبة أخرى وعدم الاضطرار إلى كتابة “embed” يدويًا في عنوان URL):

انقر بزر الماوس الأيمن على فيديو Shorts وحدد “نسخ رمز التضمين”. هذا ما قصدته بـ “رمز التضمين اليدوي”، آسف لعدم توضيحي.

إعجابَين (2)

أيضًا، استبدال /shorts/ بـ watch?v=، وهو عنوان URL الافتراضي لمقطع فيديو على يوتيوب، يعمل.

لذلك، في يوتيوب، على https://www.youtube.com/shorts/SWeTMdyv50Q، سيؤدي النقر بزر الماوس الأيمن → نسخ عنوان URL للفيديو إلى العمل لأنه يُرجع https://youtu.be/SWeTMdyv50Q والذي يتم عرضه بشكل صحيح في Discourse (بنسبة العرض إلى الارتفاع الواسعة العادية على الرغم من ذلك).

إعجابَين (2)

أنا لست مطورًا ولكني أخمن أن شيئًا كهذا قد يجعل pr-welcome أسهل لشخص مطور؟

إعجابَين (2)

لقد فعلتها على الرغم من أنني ربما أفسدت طلب السحب الخاص بي قليلاً لأنه لسبب ما، ما زلت غير معتاد على GitHub… أحتاج حقًا إلى قراءة الدليل (ويخبرني صديق، إنشاء فروع من تفرعي في Discourse…). :upside_down_face:

للعلم فقط، لقد قمت للتو بتحرير الملف lib\\onebox\\engine\\youtube_onebox.rb لإضافة

# https://www.youtube.com/shorts/wi2jAtpBl0Y
if uri.path["/shorts/"]
  id ||= uri.path[/\\/shorts\\/([\\w\\-]+)/, 1]
end
إعجاب واحد (1)

هل سيكون من الأسهل فقط تغيير shorts إلى embed؟

لست متأكدًا مما تقصده.

عادةً ما يقوم الأشخاص بنسخ ولصق رابط يوتيوب الخاص بهم من شريط العناوين الخاص بهم.

الآن لدى يوتيوب عنوان URL جديد /shorts/، سيقوم الأشخاص بنسخ ولصق هذه الروابط /shorts/ وهي غير مدعومة بعد بواسطة يوتيوب oneboxing.

الروابط /embed/ مدعومة، لكنها تتطلب من المستخدم البحث فعليًا في يوتيوب عن عنوان URL المضمن، وهو ما لا يفعله أحد تقريبًا :thinking:

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

أتساءل فقط عما إذا كان سيكون من الأسهل تغيير هذا الرابط؟ لأن youtube.com/shorts/something هو نفس الشيء تمامًا مثل youtube.com/embed/something، ومع /embed/ يعمل تضمين/تضمين الروابط بشكل جيد هنا.

https://youtube.com/shorts/aQFdwUeZxkA لا يعمل:

لكن https://youtube.com/embed/aQFdwUeZxkA يعمل:

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


تعديل: أم تقصد أن كود Oneboxing الخاص بـ Discourse سيستبدل /shorts/ بـ /embed/؟

نعم، ربما! لست ساحر أكواد بالضبط :ابتسامة:

نعم. وأنا لا أستطيع البرمجة قليلاً ولكن يمكنني تخيل أن الاستبدال البسيط لن يكون صعبًا جدًا :wink:

إعجابَين (2)

كلاهما لهما نفس النتيجة النهائية، أليس كذلك؟ أن يتم تضمين مقطع فيديو قصير بشكل جيد مع وظيفة التشغيل؟

حسنًا… لست متأكدًا من أنني أفهم. :sweat_smile:

  1. يؤدي إلى

هذه التنسيقات الثلاثة المختلفة للروابط تؤدي إلى عروض مختلفة على يوتيوب.

مهما كان تنسيق عنوان URL، فإن الكود يهتم فقط بمعرف الفيديو:

الكود حاليًا لا يدعم /shorts/ وهناك طرق متعددة لجعله يعمل.

اقتراحي، كشخص مبتدئ في البرمجة، هو تكرار هذا الجزء:

واستبدال embed بـ shorts. لقد جربتها على تثبيتي التطويري وهي تعمل بشكل مثالي.

إذا كانت هناك طريقة أكثر أناقة للقيام بذلك، فسأكون سعيدًا بمعرفتها :slight_smile:

إعجابَين (2)

عمل رائع يا @Canapin :clap:

هل هذا شيء تود تقديمه كطلب سحب (pull request)؟

نعم، أنا فقط أواجه صعوبة في ملف اختبار الـ 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

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