Jump to content

User:YpnBot/Vital article talk pages/source

From Wikipedia, the free encyclopedia
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()