как я избавлялся от экстремизма в блоге
4228 단어 tutorialjavascriptwebdev
первым вариантом был скрипт, которому можно скормить статьи и регуляркой добавить сноски всем упоминаниям экстремистски продуки. с этой идеи начал, этой идеей и закончил.
워드프레스 хранит статьи в базе, доступ из админки по вкладке
записи
. встроенные нструменты позволяют экспортировать и импортировать контент из базы в удобном xml
형식, осталось разобраться со структурой. для парсинга разогнал библиотеку fast-xml-parser
:const data = fs.readFileSync(path.join(__dirname, fileName), 'utf8')
const parser = new XMLParser()
let jObj = parser.parse(data)
рассмотрев дерево, выделил нужные мне ветки:
wp:postmeta
è content:encoded
, дело за малым. пишем простую регулярку, выискивающую подстроку, которая не начинается с simвола [
(используется для markdown тегов), 이미 одно вхождение из набора названий запрещенных продуктов (название1|название2|название3)
и любое окончание для русской вариации [а-яА-Я]*
. для туллтипов использовался wordpress 플랫폼 Shortcodes Ultimate . поскольку реплейсить придется для нескольких веток, выносим эту исторую в отдельную функцию и обрабатываем корнер кейсы:let replaceWithToolbar = str => str.replace(/[^\[|\/](meta|instagram|facebook|инстаграм|мета|фейсбук)[а-яА-Я]*/gi, (subStr, _, subStrIndex) => {
let nextSymbol = str[subStrIndex + subStr.length]
if(str[subStrIndex - 3] + str[subStrIndex - 2] + str[subStrIndex - 1] + str[subStrIndex] === 'www.') return subStr
let space = '<code style="letter-spacing: -7px;"> </code>'
let start = subStr[0]
let end = nextSymbol === ' ' ? space : ''
let updatedStr = subStr.substring(1)
let tooltipText =
subStr.includes('нстагра') || subStr.includes('ейсб') || subStr.includes('nstagr') || subStr.includes('aceboo')
? 'Продукт принадлежит организации, признанной экстремистской на территории Российской Федерации.'
: 'Организация признана экстремистской на территории Российской Федерации.'
return `${start}${space}[su_tooltip text="${tooltipText}" text_align="center"]${updatedStr}[/su_tooltip]${end}`
})
остается только грязно обновить исходные ветки на получившиеся:
let metasArray = jObj.rss.channel.item['wp:postmeta']
let newMetasArray = metasArray.map(m => {
if(m['wp:meta_key'] === '_crb_description' || m['wp:meta_key'] === '_crb_short_description') {
let newMeta = replaceWithToolbar(m['wp:meta_value'])
m['wp:meta_value'] = newMeta
}
return m
})
jObj.rss.channel.item['wp:postmeta'] = newMetasArray
let content = jObj.rss.channel.item['content:encoded']
let newContent = replaceWithToolbar(content)
jObj.rss.channel.item['content:encoded'] = newContent
после чего билдим дерево в новый xml и пишем в 파일:
const builder = new XMLBuilder({ processEntities:false })
const xmlContent = builder.build(jObj)
fs.writeFileSync(path.join(__dirname, `output_${fileName}`), xmlContent)
ну, вроде подстраховались!
исходный 코드: https://github.com/arkatriymfalnaya/avoid-extremism
Reference
이 문제에 관하여(как я избавлялся от экстремизма в блоге), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/scumdograscalhouse/kak-ia-ot-ekstriemizma-izbavlialsia-3f3d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)