مساعد Onebox، استرجع تلك المعاينات بشكل موثوق!

ما الذي يفعله

يحوّل نتائج من هذا النوع:

(حيث فشل خادمك في جلب مصدر الصفحة، وبالتالي لا يمكنه استخراج الوسوم المطلوبة لبناء الـ onebox)

إلى هذا!

يوفر ببساطة مسارًا بديلًا للـ onebox للحصول على مصدر الصفحة الذي يبحث فيه عن البيانات الوصفية عندما يرفض الخادم المستهدف اتصالك.

لا يغير شيئًا في كيفية معالجة الـ onebox لمصدر الصفحة بعد ذلك للعثور على البيانات الوصفية وعرض الصندوق.

يهدف إلى تمكينك من إدخال تفاصيل ومفاتيح واجهة برمجة تطبيقات (API) تابعة لجهة خارجية لجلب الصفحة بدلاً من إجراء استدعاء HTTP عادي مباشرةً إلى الصفحة المستهدفة.

لماذا

وجدت أن خوادمى مُنعت من الوصول إلى عدد من المواقع التجارية، مما أدى إلى فشل عرض الـ oneboxes. يساعد هذا الحل فعليًا في الاستفادة من موثوقية واجهة برمجة التطبيقات التابعة لجهة خارجية، تشبه إلى حد ما خدمة البريد.

لماذا يعتبر فعالًا من حيث التكلفة

يمكنك استخدام خادم افتراضي خاص (VPS) رخيص نسبيًا، مع الحصول على وظيفة موثوقة لعرض الـ oneboxes، حتى لو كان عنوان IP الخاص بك أو وكيل المستخدم (User Agent) مدرجًا في القائمة السوداء بطريقة ما.

لن تحتاج إليه إذا

كنت تعرض محتوى جميع أهدافك بنجاح باستخدام التثبيت الافتراضي (Vanilla install) وكان جميع المستخدمين راضين.

المتطلبات المسبقة

تحتاج إلى حساب مع واجهة برمجة تطبيقات (API) مناسبة تابعة لجهة خارجية.

الإعدادات

onebox assistant api base address:  https://api.embed.rocks/api/

المثال أعلاه يستخدم embed.rocks، ولكن في المستقبل قد يتم دعم واجهات برمجة تطبيقات أخرى، ومع ذلك، فإن embed.rocks تقدم قيمة جيدة حاليًا.

onebox assistant api base query:   ?url=

onebox assistant api options:   &skip=article,description,oembed,imextra&include=source

onebox assistant api page source field:   source

ستحتاج أيضًا إلى إدخال مفتاح واجهة برمجة التطبيقات (API Key) الذي قدمته لك embed.rocks.

انظر المثال أدناه:

يسمح لك هذا الإعداد بتجاهل الاسترجاع المسبق (للتحقق مما إذا كان الزحف المباشر يعيد نتيجة) واستخدام واجهة برمجة التطبيقات من البداية.

image
الإعداد الافتراضي: OFF

أوصي بتعيين هذا الإعداد على TRUE.

هذا بالطبع أكثر تكلفة، لكنه غالبًا ما يعطي نتائج أفضل، حيث توجد حالات يتم فيها إعادة توجيه الاسترجاع المسبق إلى الصفحة الخاطئة لأنك غير موثوق به.

معلومات الدعم

تذكر، إذا كنت قد حاولت سابقًا إنشاء صندوق onebox لروابط، فإن نواة Discourse ستخزن النتيجة مؤقتًا.

يمكنك إضافة سلسلة استعلام عشوائية في النهاية للتغلب على التخزين المؤقت: https://mylink.com/todaynews?random=random

يمكنك أيضًا التحقق من استجابة واجهة برمجة التطبيقات (API) باستخدام أمر مثل:

curl -X GET "https://api.embed.rocks/api/?url=https%3A%2F%2Fnews.bbc.co.uk%0A&skip=article,description,oembed,imextra&include=source" -H "x-api-key: %%%your-api-key%%%"

يجب عليك ترميز الموقع الذي تتصل به (قيمة معلمة url) باستخدام موقع مثل هذا مثل هذا (لا نضمنه!).

قيود معروفة

  • تم اختباره حاليًا مع مزود واحد فقط ولم يتم اختباره مع الآخرين. هذا المزود هو https://embed.rocks (وليس لدي أي ارتباط به). أنا مستعد للنظر في دعم المزيد من الخدمات إذا تم تمويل العمل.

  • يتم عمل التصحيح (Monkey patching) على مستوى الطريقة (method level). هذا يتجاوز المزيد من الكود مما هو ضروري، مما يؤدي إلى زيادة خطر تعطل الإضافة بعد تحديث النواة. ومع ذلك، لا أعتقد أن هناك طريقة لتقليل هذا أكثر؟

كيفية تثبيت الإضافات

راجع الدليل هنا: Install plugins on a self-hosted site

هذا المستودع هو: https://github.com/merefield/discourse-onebox-assistant

كل التعليقات موضع ترحيب. يرجى :star: الإضافة على GitHub إذا وجدت أنها مفيدة.

41 إعجابًا

عذراً، لم أجد الفرصة لإعادة بناء موقعنا مع تفعيل هذه الإضافة، سأفعل ذلك الليلة.

@WaitroseCarpark لم أملأ أي شيء من هذا القبيل، الخطوات التي اتبعتها هي:

الخطوة 1:

الخطوة 2:

الخطوة 3:

الخطوة 4:
أجرِ اختبار الروبوت

الخطوة 5:
أضف واجهة برمجة تطبيقات oEmbed


وقع حياتك

علامة خضراء لـ oEmbed

الخطوة 6:
احصل على بيانات الاعتماد من الإعدادات > الأساسية

الخطوة 7:
احصل على رمز التطبيق

باستخدام بيانات الاعتماد المذكورة أعلاه، شغّل:

curl -X GET "https://graph.facebook.com/oauth/access_token?client_id={your-app-id}&client_secret={your-app-secret}&grant_type=client_credentials"

التي تُرجع:

{"access_token":"378384926723309|xxxxxx","token_type":"bearer"}

اختبر رمز المصادقة الخاص بك:

curl -X GET \ "https://graph.facebook.com/v9.0/instagram_oembed?url=https://www.instagram.com/p/fA9uwTtkSN/&access_token=xxxx..."

التي تُرجع:

{"version":"1.0","author_name":"diegoquinteiro","provider_name":"Instagram","provider_url":"https://www.instagram.com/","type":"rich","width":658,"html":"<blockquote class=\"instagram-media\" data-instgrm-captioned data-instgrm-permalink=\"https://www.instagram.com/p/fA9uwTtkSN/?utm_source=ig_embed&utm_campaign=loading\" ....

أضفها إلى Discourse وها أنت ذا قد انتهيت!

6 إعجابات

واو…

حسنًا، لقد نجح الأمر…

شكرًا لك يا صديقي :bowing_man:

4 إعجابات

مع تثبيت الإضافة؟ @Richie

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

@znedw شكرًا جزيلاً لك على وقتك في شرح الخطوات خطوة بخطوة (مع صور! :heart_eyes:) كيفية القيام بذلك! يعمل بشكل رائع حسب ما أستطيع رؤيته!

3 إعجابات

مع تثبيت الإضافة؟

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

لم ألاحظ في الواقع أنك قمت بإنشاء هذه الإضافة إلا الآن… لم أكن أستخدمها، آسف على اختطاف خيوطك.

لكن، سأجربها لاحقًا اليوم إذا تمكنت من العثور على بعض الوقت الإضافي…

إعجابَين (2)

قضيت حوالي نصف ساعة هذا المساء في تجربة جميع التوليفات الممكنة، روبرت @merefield

بناءً على الخطوات التي قدمها @znedw (شكرًا لك مرة أخرى يا صديقي!)، يبدو أن هذه الطريقة تعمل سواء كانت إضافة Onebox Assistant مفعلة أو معطلة (عبر لوحة الإدارة، الإضافات، مربع الاختيار).

لم أجرب إعادة بناء نظام Discourse الخاص بي مع إزالة الإضافة تمامًا.

ربما يستحق الذكر أنني لا أملك الخيار المفعّل لـ “استخدام الزحف عبر الوكيل دائمًا بغض النظر عن الاستجابة المباشرة”.

خارج الموضوع، يبدو أن amazon.co.uk تحجب جميع أنواع الطلبات مرة أخرى، سواء بشكل مباشر (مع تعطيل الإضافة) أو عبر صفحة “جرّب” في embed.rocks، والتي تواجه أيضًا مهلة زمنية :roll_eyes:

3 إعجابات

شكرًا لك. نعم، كنت أتوقع أن يعمل الأمر على الأقل دون الحاجة إلى خيار “استخدام الوكيل دائمًا”.

إعجابَين (2)

فيما يتعلق بأمازون، فأنا دائمًا أستخدم روابطهم التابعة يدويًا، وهي غير محجوبة.

إن تضمين المنتجات مباشرة (Oneboxing) يخالف شروطهم وأحكامهم إذا كنت عضوًا تابعًا.

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

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

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

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

فقط انسخ ما ورد في المنشور الأصلي (OP) حرفيًا. ستكون لديك مفتاح خاص بك.

إعجابَين (2)

كيف يمكنني التحقق من أن الإضافة تعمل وأن الاستعلامات تمر عبر https://embed.rocks؟
لقد قمت بتفعيلها، لكن الخطأ لم يختفِ.

لقد اختبرت مع هذه الفيديوهات:

https://www.youtube.com/watch?v=_2wfBNUnOVY
https://www.youtube.com/watch?v=qLNhVC296YI
إعجاب واحد (1)

يجب أن يبدأ لوحة التحكم في embed.rocks بعكس مكالماتك (مُحسّن محلي هو ميزة مرغوبة ولكن لم يتم تطبيقها بعد)

كلا الرابطين يعملان بالنسبة لي عبر الإضافة.

إذا لم يكن الأمر يعمل، جرب التحقق من هذا الخيار:

image

إعجابَين (2)

هل جميع الإعدادات التي لديك مطابقة لتلك الموجودة في الصورة التي قدمتها؟ ربما ارتكبت خطأً أثناء كتابتها. هل توجد أي خيار لنسخها؟

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

لقد أضفت النص العادي للموضوع الأصلي لك.

3 إعجابات

شكرًا لك. لقد قمت بالتحقق ووجدت أن كل شيء صحيح. لا أستطيع رؤية أي اتصال في صفحة لوحة التحكم ضمن قسم الاستخدام. هل يعني هذا أن هناك خطأ ما؟ هل يجب أن يكون عدد الاتصالات مرئيًا دائمًا؟

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

ستحتاج إلى طرح هذا السؤال على embed.rocks. قد أضيف في وقت ما سجلات إضافية إلى الإضافة مما قد يساعد. قد تتمكن من ضبط مستوى تسجيل موقعك على ‘info’ للحصول على مزيد من المعلومات، حيث توجد بالفعل مكالمات لـ Rails.logger.info

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

نعم، سيكون ذلك رائعًا. لأنني قمت الآن بتفعيل الإضافة وتكوين الإعدادات، لكن يوتيوب لا يعمل ولا توجد أي نشاطات في لوحة التحكم. لقد أرسلت بريدًا إلكترونيًا إلى دعم embed.rocks.

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

هل سيعمل هذا الإضافة بشكل صحيح إذا قمت بتخزين الملفات على Amazon S3؟
لا يزال الأمر يمثل تحديًا بالنسبة لي ولا أستطيع جعله يعمل. لا يتم تحميل مقاطع الفيديو، بل يتم حفظ الروابط فقط. ولا توجد أي معلومات في لوحة الاستخدام على Embed.rocks

لدي خادم تجريبي. تُخزَّن الملفات محليًا عليه. لكن الإضافة لا تعمل أيضًا، ولا توجد أي نشاطات في لوحة استخدام الخدمة. ومع ذلك، يتم حفظ مقاطع الفيديو على الموقع.

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

إعجابَين (2)