User:YpnBot/Vital article talk pages/source
Appearance
import pywikibot
import pagegenerators
import re
site = pywikibot.getSite('en', 'wikipedia')
number = 0
vitalPages = [
['Wikipedia:Vital articles/Level/1', 1, '', ''],
['Wikipedia:Vital articles/Level/2', 2, '', ''],
['Wikipedia:Vital articles', 3, '', ''],
['Wikipedia:Vital articles/Expanded/People', 4, 'People', ''],
['Wikipedia:Vital articles/Expanded/History', 4, 'History', ''],
['Wikipedia:Vital articles/Expanded/Geography', 4, 'Geography', ''],
['Wikipedia:Vital articles/Expanded/Arts', 4, 'Art', ''],
['Wikipedia:Vital articles/Expanded/Philosophy and religion', 4, 'Philosophy', ''],
['Wikipedia:Vital articles/Expanded/Anthropology, psychology, and everyday life', 4, '', ''],
['Wikipedia:Vital articles/Expanded/Society and social sciences', 4, 'Society', ''],
['Wikipedia:Vital articles/Expanded/Biology and health sciences', 4, 'Science', 'Biology'],
['Wikipedia:Vital articles/Expanded/Physical sciences', 4, 'Science', 'Physics'],
['Wikipedia:Vital articles/Expanded/Technology', 4, 'Technology', ''],
['Wikipedia:Vital articles/Expanded/Mathematics', 4, 'Mathematics', '']
]
patterns = {
'link' : re.compile(r'\[\[(.*?)[\]\|]'),
'vital' : re.compile(r'\{\{[Vv](ital article|A|a)'),
'fa' : re.compile(r'\{\{[Ff]eatured article\}\}'),
'ga' : re.compile(r'\{\{[Gg]ood article\}\}'),
'a' : re.compile(r'\|\s*[Cc]lass\s*\=\s*[Aa]'),
'b' : re.compile(r'\|\s*[Cc]lass\s*\=\s*[Bb]'),
'c' : re.compile(r'\|\s*[Cc]lass\s*\=\s*[Cc]'),
'start' : re.compile(r'\|\s*[Cc]lass\s*\=\s*[Ss]tart'),
'stub' : re.compile(r'\|\s*[Cc]lass\s*\=\s*[Ss]tub'),
'stubTemp' : re.compile(r'\{\{[Ss]tub\}\}')
}
sections2 = {
'Art' : 'Art',
'Geography' : 'Geography',
'History' : 'History',
'Everyday life' : '',
'Mathematics' : 'Mathematics',
'Philosophy' : 'Philosophy',
'Science' : 'Science',
'Society' : 'Society',
'Technology' : 'Technology'
}
sections3 = {
'People' : 'People',
'History' : 'History',
'Geography' : 'Geography',
'Arts and culture' : 'Art',
'Philosophy and religion' : 'Philosophy',
'Everyday life' : '',
'Society and social sciences' : 'Society',
'Health and medicine' : 'Science',
'Science' : 'Science',
'Technology' : 'Technology',
'Mathematics' : 'Mathematics'
}
def addTemplates(listPages, topic, level, subpage='') :
print 'level:' + str(level)
print 'topic:' + str(topic)
print 'number:' + str(number)
for page in listPages :
if page.namespace() == 0 :
if page.isRedirectPage() :
page = page.getRedirectTarget()
#print page.title()
talkPage = page.toggleTalkPage()
if not patterns['vital'].search(talkPage.text) :
articleClass = ''
if patterns['fa'].search(page.text) :
articleClass = 'FA'
elif patterns['a'].search(talkPage.text) :
articleClass = 'A'
elif patterns['ga'].search(page.text) :
articleClass = 'GA'
elif patterns['b'].search(talkPage.text) :
articleClass = 'B'
elif patterns['c'].search(talkPage.text) :
articleClass = 'C'
elif patterns['start'].search(talkPage.text) :
articleClass = 'Start'
elif patterns['stub'].search(talkPage.text) :
articleClass = 'Stub'
elif patterns['stubTemp'].search(page.text) :
articleClass = 'Stub'
templateToAdd = '{{Vital article|level=' + str(level)
if topic :
templateToAdd = templateToAdd + '|topic=' + topic
if articleClass :
templateToAdd = templateToAdd + '|class=' + articleClass
if subpage :
templateToAdd = templateToAdd + '|subpage=' + subpage
templateToAdd = templateToAdd + '}}'
talkPageText = talkPage.text
if re.search(r'\{\{(W|w)ikiProject', talkPageText) :
talkPageText = re.sub(r'\{\{(W|w)ikiProject', templateToAdd + '\n{{\\1ikiProject', talkPageText, count=1)
else :
talkPageText = templateToAdd + '\n' + talkPageText
global number
talkPage.put(talkPageText, 'added {{[[Template:Vital article|Vital article]]}}')
number = number + 1
def run() :
print 'Running'
for vitalPage in vitalPages :
vitalPageName = pywikibot.Page(site, vitalPage[0])
level = vitalPage[1]
topic = vitalPage[2]
if level == 1 or (level == 4 and topic) : # don't search by section
listPages = pagegenerators.LinkedPageGenerator(vitalPageName)
subpage = vitalPage[3]
addTemplates(listPages, topic, level, subpage)
elif level == 2 :
for sectionName, topicName in sections2.iteritems() :
section = re.search(r'==\s*'+sectionName+r'.*\n((.|\s)+?)(\=|\Z)', vitalPageName.text).group(1)
listPageNames = re.findall(patterns['link'], section)
listPages = []
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
addTemplates(listPages, topicName, 2)
elif level == 3 :
for sectionName, topicName in sections3.iteritems() :
section = re.search(r'==\s*'+sectionName+r'.*\n((.|\s)+?)[^=]\=\=[^=]', vitalPageName.text).group(1)
if topicName :
listPageNames = re.findall(patterns['link'], section)
listPages = []
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
addTemplates(listPages, topicName, 3)
else :
subSection = re.search(r'===\s*Language.*\n((.|\s)+?)[^=]\=\=\=[^=]', section).group(1)
listPageNames = re.findall(patterns['link'], subSection)
listPages = []
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
addTemplates(listPages, 'Language', 3)
listPageNames = re.findall(patterns['link'], section)
listPages = []
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
addTemplates(listPages, 'Life', 3)
else : # Level 4, Life+Language
print 'step 0.2'
print vitalPageName.text
print 'step 0.3'
section = re.search(r'\=\=\s*Language.*\n((.|\s)+?)[^=]\=\=[^=]', vitalPageName.text).group(1)
print 'step 0.7'
listPageNames = re.findall(patterns['link'], section)
listPages = []
print 'step 1'
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
print 'step 2'
addTemplates(listPages, 'Language', 4)
listPageNames = re.findall(patterns['link'], vitalPageName.text)
listPages = []
for pageName in listPageNames :
listPages.append(pywikibot.Page(site, pageName))
addTemplates(listPages, 'Life', 4)
run()