جلب صور onebox محليًا

مرحباً بالجميع،

لقد قمت بإنشاء إضافة (plugin) توسع من وظائف onebox لموقع ويب يستخدمه العديد من مستخدمين منتداي.

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

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

شكراً جزيلاً مقدماً! :smiley:


ملاحظة: هنا مستودع GitHub للإضافة التي أنشأتها. سأقدّر جداً أي ملاحظات على كودي.

(هذه هي المرة الأولى التي أكتب فيها كوداً بلغة Ruby قادمًا من خلفية في NodeJS كخلفية للواجهة الخلفية).

سيقوم Onebox و Discourse بذلك بشكل أصلي دون الحاجة إلى أي إضافات إضافية.

عليك فقط التأكد من أن الموقع المستهدف يولد وسوم الميتا (og meta tags) المناسبة. إذا كان هناك أي تعديل مطلوب، فيجب أن يتم على الموقع المستهدف وليس على Discourse، إذا أردت أن يعمل هذا بشكل صحيح.

على سبيل المثال:

يولد موقع BBC هذه الوسوم الميتا لكل صفحة. وسيقوم Discourse و Onebox بسحب site_name و image و description و title وإنشاء الـ onebox.

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

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

أفترض أنك تملك السيطرة أو التأثير على هذا الموقع، ومع ذلك قد يكون هذا افتراضًا كبيرًا!

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

لا يفعل ذلك :sweat_smile:

للأسف لا :confused: وبالإضافة إلى ذلك، أرغب في تخصيص عرض الـ onebox قليلاً. وهذا لن يكون ممكنًا لو كنت أستخدم المحرك الافتراضي.

لكن…
لقد طورت بالفعل إضافة الـ onebox. وهي تقوم بكل عمل جلب البيانات وتعمل بشكل ممتاز!

السؤال هو: كيف يمكنني التأكد من أن الصورة التي يتم جلبها سيتم تخزينها محليًا؟ أفترض أنني بحاجة لكتابة بعض الكود الإضافي في الإضافة.

بعض المسارات التي يمكنك استكشافها:

يقوم معالج المنشورات المطبوق (Cooked Post Processor) بتكديس مهمة للقيام بذلك، انظر:

يوجد كود المهام هنا: discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

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

image

المعايير هنا: discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

إذا لم يكن هذا يعمل بعد، ولكنك تعرض الصور الخارجية بنجاح في الصندوق الواحد (onebox)، فإن حدسي هو أن الصور لا تستوفي المعايير اللازمة للرفع.