Recent changes Random page
GAMING
more wikis
 
Gaming
Entertainment
Science Fiction
Biggest wikis
Hobbies
Music
See more...

User:Dantman/Pywikipediabot/Dantman-UserClone-Bot.py

Wikia - creating communities

Jump to: navigation, search
# -*- coding: utf-8  -*-
"""
This bot is used by Dantman to mirror his userpages across wikia.
"""

import sys, re
import wikipedia, pagegenerators, catlib, config

msg = {
       'en':u'Automatic Bot Userpage Cloning',
       }

def main():
	#Setup Familys for Wikia Involved
	anime = wikipedia.getSite(code=u'en', fam=u'anime')
	wikipedia.setAction(wikipedia.translate(anime, msg))
	siteList = []
	pageList = [u'User:Dantman']
	
	#Page Listing
	page = wikipedia.Page(anime, u'Dantman/UserClone/Pages', None, 2)#2=User Namespace
	try:
		text = page.get()
		r = re.compile(u'^.*<!-- \|\|START\|\| -->\n?', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n?<!-- \|\|END\|\| -->.*$', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n', re.UNICODE | re.MULTILINE | re.DOTALL)
		pagelist = re.split(r, text)
		r = re.compile(u'^#|^\s*$', re.UNICODE | re.MULTILINE | re.DOTALL)
		for p in pagelist:
			if not re.match(r, p):
				pageList.append(u'User:Dantman/%s' % p)
	except wikipedia.NoPage:
		return False;

	#Get Project Wiki Listing
	wikiaIds = [u'wikia']
	page = wikipedia.Page(anime, u'Bots/Wiki', None, 4)#4=Project Namespace
	try:
		text = page.get()
		r = re.compile(u'^.*<!-- \|\|START\|\| -->\n?', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n?<!-- \|\|END\|\| -->.*$', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n', re.UNICODE | re.MULTILINE | re.DOTALL)
		wikilist = re.split(r, text)
		r = re.compile(u'^#|^\s*$', re.UNICODE | re.MULTILINE | re.DOTALL)
		for wiki in wikilist:
			if not re.match(r, wiki):
				wikiaIds.append(wiki)
	except wikipedia.NoPage:
		return False;
	page = wikipedia.Page(anime, u'Dantman/UserClone/Wiki', None, 2)#2=User Namespace
	try:
		text = page.get()
		r = re.compile(u'^.*<!-- \|\|START\|\| -->\n?', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n?<!-- \|\|END\|\| -->.*$', re.UNICODE | re.DOTALL)
		text = re.sub(r, u'', text)
		r = re.compile(u'\n', re.UNICODE | re.MULTILINE | re.DOTALL)
		wikilist = re.split(r, text)
		r = re.compile(u'^#|^\s*$', re.UNICODE | re.MULTILINE | re.DOTALL)
		for wiki in wikilist:
			if not re.match(r, wiki):
				wikiaIds.append(wiki)
	except wikipedia.NoPage:
		return False;
	
	for wiki in wikiaIds:
		siteList.append(wikipedia.getSite(code=u'en', fam=wiki))
	
	for page in pageList:
		wikipedia.output(u'Doing Page %s' % page)
		pagePage = wikipedia.Page(anime, page)
		pageSource = pagePage.get()
		
		for site in siteList:
			sitePage = wikipedia.Page(site, page)
			siteSource = u''
			try:
				siteSource = sitePage.get()
			except wikipedia.NoPage:
				wikipedia.output(u'Site %s has no %s page, creating it' % (site, page))
			if siteSource != pageSource:
				wikipedia.output(u'Site \'%s\' page status: Needs Updating' % site)
				wikipedia.output(u'Updating page on %s' % site)
				sitePage.put(pageSource)
			else:
				wikipedia.output(u'Site \'%s\' page status: Ok' % site)


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()
.