تنظيف علامات html في جميع المشاركات بعد الترحيل؟

مرحبًا، كما ذُكر في سكريبت استيراد Flarum المؤقت ولكن الفعال، لقد قمت بالانتقال من Flarum إلى Discourse. هذا هو موقعي الأول وأنا معجب جدًا بعملكم، كل التقدير لكم جميعًا.

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

هل توجد طريقة ذكية لإزالة تنسيق HTML من جميع المنشورات بعد الهجرة؟
سؤال آخر: أحتاج أيضًا إلى تصحيح العديد من الروابط من http إلى https.

شكرًا لكم على مساعدتكم. بالمناسبة، سكريبت “المؤقت” الذي قدمته يجب بالتأكيد تعديله ليكون أكثر دقة في معالجة المنشورات لتنسيق منشورات Discourse (وهو ليس ضمن مهاراتي)…

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

يبدو أنك تواجه المشكلة الموضحة هنا: Fix broken images for posts created by the WP Discourse and RSS plugins. ردّي الأول في ذلك الموضوع يوضح بعض التفاصيل حول سبب المشكلة. تؤثر هذه المشكلة على الصور في المنشورات التي تم إنشاؤها باستخدام HTML. سأقوم بتحديث عنوان الموضوع ليكون واضحًا بأن المشكلة لا تقتصر على المنشورات التي تم إنشاؤها بواسطة إضافة WP Discourse أو عبر تغذية RSS فقط.

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

نعم، هذا هو الظاهرة تمامًا مع الصور التالفة داخل وسوم HTML أخرى.

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

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

أتطلع إلى رحلة التعلم.

كوين

لا، يسمح إضافة مستكشف البيانات فقط بقراءة بيانات قاعدة بيانات الموقع. ولا يسمح بالكتابة في قاعدة بيانات الموقع.

مرحبًا، لقد تمكنت من معرفة كيفية التنظيف يدويًا وإصلاح الصور التالفة. ومع ذلك، أود القيام بذلك بشكل آلي.

ما أود فعله هو إيجاد طريقة لإزالة جميع وسوم HTML مثل [P] و [/P] و [BR/].

لقد بحثت في المنتدى لكنني لم أجد شيئًا قريبًا من ذلك. كما بحثت في سكريبتات الاستيراد ولم أجد مستوردًا من Discourse إلى Discourse للبدء منه. أعتقد أنني أحتاج إلى سكريبت يقوم بما يلي:

  • الوصول إلى جدول المنشورات
  • المرور عبر جميع المنشورات
  • المرور عبر كل منشور:
    – إزالة وسوم P بالكامل
    – استبدال BR/ بفاصل سطر جديد؟
    – التعامل بذكاء مع الروابط
    – التعامل بذكاء مع الصور
  • إعادة معالجة جميع المنشورات على الأرجح.

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

سأشارك النتائج مع المجتمع بمجرد تحقيق هدفي.

كون

إليك كود يقوم بشيء مشابه:

posts=Post.where("raw like '%Sent from%using Tapatalk'")

posts.each do |post|
   post.raw.gsub!(/^Sent from my.+?using Tapatalk$/,"")
   post.save
   post.rebake!
end

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

ما تحتاجه هو شيء مثل

   post.raw.gsub!(/\/?\[p\]/ig,"\n")

لاستبدال [p] و [/p] بسطر جديد (سطر إضافي لن يضر، لكن يمكنك إزالة \n إذا كنت لا تعتقد أنك بحاجة إلى سطر جديد)، لكنني لم أجرب هذا، لذا فهو ربما خاطئ. يمكنك تجربته في موقع مثل https://rubular.com/.

عظيم، هذا وضعني تمامًا على المسار الصحيح.

أعتقد أنه في حالتي البسيطة، استخدام rake posts:remap["find","replace"] يجب أن يكون كافيًا، أليس كذلك؟

سأجربها، شكرًا جزيلاً!

قد يكون من الصعب (حتى لو كان ممكنًا) معرفة كيفية الهروب من [ باستخدام مهمة rake هذه.

عذرًا، لقد وضعت حرف “]” فقط لأنني لم أستطع معرفة كيفية وضع “<”.

أحتاج فقط إلى إزالة عدد قليل من وسوم HTML القياسية هذه.

يجب أن يكون الأمر على ما يرام إذن باستخدام إعادة التعيين؟

على الأرجح نعم. يمكنك اقتباس العناصر باستخدام علامات backticks هكذا

`<`p`>`

أو

`<p>`

للعلم فقط @koen360

عندما قمنا بنقل منتدانا، واجهنا عددًا لا يحصى من مشاكل كود BB ووسوم الترميز الناتجة عن ما يقرب من عقدين من منشورات المنتدى.

لم نستخدم وظيفة rake remap لهذه الحالات، وفي جميع الحالات، استخدمنا التقنية التي يوضحها @pfaffman في مقتطف الكود الخاص به:

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

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

مرحباً، فيما يلي محتوى سكريبت cleanup.rb الذي أ запускаه باستخدام الأمر: RAILS_ENV=development bundle exec ruby script/cleanup.rb

محتوى الملف:

require_relative '../config/environment'
pm = 0
Post.find_each do |test|
	test.raw.gsub!(/\u003c(.|\/.)\u003e/i,"")
	test.save
	test.rebake!
	pm = pm + 1
end
puts "cycled through #{pm} posts"

لقد جربت أمر d/rake posts:rebake الذي أعاد تشكيل 1757 منشوراً. أما السكريبت فيمر فقط على 1712 منشوراً، وهي المنشورات المستوردة التي تحتوي على وسوم HTML، بينما الباقي منشورات جديدة تم إنشاؤها في Discourse.

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

حاولت إعادة تشغيل البيئة وإعادة تشغيل Unicorn دون جدوى. قريب جداً… قريب جداً ;o)

هل اختبرت تعبيرك النمطي في مكان ما؟ قم بنشر منشور واحد في كل مرة للتأكد من أن النص الخام قد تم تغييره.

استخدمت اقتراحك في Rubular، والآن يظهر regexr.com كما في لقطة الشاشة أدناه. ركزت مؤقتًا على وسوم p و r فقط لحلها قبل إضافة الأنماط الأكثر تعقيدًا.

عندما أضفت جملة put إلى ملف cleanup.rb الصغير الخاص بي لطباعة محتوى المنشور الخام على واجهة سطر الأوامر (CLI)، لاحظت أنه لم يتم طباعة أي وسوم HTML على الإطلاق.

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

هل لدى أحدكم فكرة؟

تحتاج هذه العملية إلى إضافة حرف g بعد /i لتطابق وسوم متعددة. ولكن إذا كان ما تراه في أمر puts يختلف عما تراه بعد تشغيل السكربت، فليس لدي تفسير لذلك.

غريب، أحصل على:

script/cleanup.rb:9: خيار تعبير نمطي غير معروف - g

عند إضافة g إلى i مثل هذا:

require_relative ‘../config/environment’

pm = 0
Post.find_each do |test|
puts test.raw
test.raw.gsub!(/<(.|.)>/ig,“”)
test.save
test.rebake!
pm = pm + 1
end
puts “cycled through #{pm} posts”

كما أتذكر (وهكذا نقوم عادةً بمطابقة الأسطر المتعددة باستخدام gsub…)، فإن تعبيرًا نمطيًا (REGEX) في Ruby متعدد الأسطر يتطلب الحرف m:

/./m - أي حرف (معدّل m يفعّل وضع الأسطر المتعددة)

انظر:

أتمنى أن يكون ذلك مفيدًا.

شكرًا لك، لقد نجح الأمر من جانب التعبير النمطي (regexp).

يبدو أن هناك أمرين لا يمكنني تفسيرهما باستخدام هذا السكربت:

# استدعِه بهذه الطريقة:
# RAILS_ENV=development bundle exec ruby script/cleanup.rb -> cleanup.log

require_relative '../config/environment'
pm = 0
Post.find_each do |test|
	puts test.raw
	test.raw.gsub!(/<(.|\.)>/im,"")
	test.save
	test.rebake!
	pm = pm + 1
end
puts "cycled through #{pm} posts"
  1. بعد تشغيل هذا السكربت عدة مرات، يستمر ملف cleanup.log في احتواء 10 أمثلة على <p> ضمن حوالي 21000 سطر من مواد المنشورات الخام. ومن الغريب أن هذه لا يتم حذفها أبدًا.
  2. والأغرب من ذلك (في رأيي) هو أنه عند تشغيل Unicorn والوصول إلى الموقع على جهاز الكمبيوتر المحلي، لا تزال أرى وسوم HTML في جميع المنشورات التي أفحصها في العرض الخام للمحرر.

يبدو لي أنني ربما لا أنظر إلى نفس البيئة؟ هل ينظر Unicorn إلى بيئة إنتاج محلية بينما يطبق سكريبتي التغييرات على بيئة التطوير؟

أحاول جعل هذا يعمل باستخدام بيئة التطوير أولاً عبر دليل Docker محليًا قبل الانتقال إلى موقعي المباشر.

يجب أن يكون هناك شيء كبير مبتدئًا أغفله. :sweat_smile: