User:DreamRimmer bot III/Task9.py
Appearance
import pywikibot
import mwparserfromhell
def run(wikicode, inside_template=False):
for node in wikicode.nodes:
if isinstance(node, mwparserfromhell.nodes.Template):
for param in node.params:
run(param.value, inside_template=True)
elif isinstance(node, mwparserfromhell.nodes.Wikilink):
if str(node.title).startswith('Category:') and not inside_template:
category_name = str(node.title)[9:].strip()
words = category_name.split()
if not any(word.lower() in {'draft', 'drafts', 'wikipedia'} for word in words):
node.title.insert(0, mwparserfromhell.nodes.Text(':'))
elif isinstance(node, mwparserfromhell.nodes.Tag):
if node.contents:
run(node.contents, inside_template)
site = pywikibot.Site('en', 'wikipedia')
search_string = r'insource:/\[\[Category:/ incategory:"All content moved from mainspace to draftspace" -insource:/\{\{[Dd]raft categories/'
pages = site.search(search_string, namespaces=[118])
for page in pages:
print(page)
current_text = page.text
code = mwparserfromhell.parse(current_text)
run(code)
new_text = str(code)
if current_text != new_text:
pywikibot.showDiff(current_text, new_text)
page.text = new_text
page.save(summary='Disable content categories per [[WP:DRAFTNOCAT]] (bot)', minor=True, bot=True)