User:John Bot II/Source
Appearance
# -*- coding: utf-8 -*-
# MoveIMG.py
# Moves images from wikipedia to the commons that have been approved
# by users.
#
# By CWii, 2008
#
# Uploading portion based off imagecopy.py
import os, sys, re, codecs
import urllib, httplib, urllib2
import catlib, thread, webbrowser
import time, threading
import wikipedia, config, socket
import pagegenerators, add_text
from upload import *
from image import *
moveToCommonsTemplate = {
'en': [u'Commons ok', u'Copy to Wikimedia Commons', u'Move to commons', u'Movetocommons', u'To commons', u'Copy to Wikimedia Commons by BotMultichill'],
}
def pageTextPost(url,parameters):
gotInfo = False;
while(not gotInfo):
try:
commonsHelperPage = urllib.urlopen("http://toolserver.org/~magnus/commonshelper.php", parameters)
data = commonsHelperPage.read().decode('utf-8')
gotInfo = True;
except IOError:
wikipedia.output(u'Got an IOError, let\'s try again')
except socket.timeout:
wikipedia.output(u'Got a timeout, let\'s try again')
return data
class imageTransfer (threading.Thread):
def __init__ ( self, imagePage, newname, comcat1, comcat2, comcat3, comcat4, comcat5, comcat6, hascat, user ):
self.imagePage = imagePage
self.newname = newname
self.comcat1 = comcat1
self.comcat2 = comcat2
self.comcat3 = comcat3
self.comcat4 = comcat4
self.comcat5 = comcat5
self.comcat6 = comcat6
self.hascat = hascat
self.user = user
threading.Thread.__init__ ( self )
def run(self):
tosend={'language':self.imagePage.site().language().encode('utf-8'),
'image':self.imagePage.titleWithoutNamespace().encode('utf-8'),
'newname':self.newname.encode('utf-8'),
'project':self.imagePage.site().family.name.encode('utf-8'),
'username':'',
'commonsense':'1',
'remove_categories':'1',
'ignorewarnings':'1',
'doit':'Uitvoeren'
}
tosend=urllib.urlencode(tosend)
print tosend
CH=pageTextPost('http://www.toolserver.org/~magnus/commonshelper.php', tosend)
print 'Got CH desc.'
tablock=CH.split('<textarea ')[1].split('>')[0]
CH=CH.split('<textarea '+tablock+'>')[1].split('</textarea>')[0]
CH=CH.replace(u'×', u'×')
wikipedia.output(CH);
if self.hascat:
if not self.comcat1 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat1
if not self.comcat2 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat2
if not self.comcat3 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat3
if not self.comcat4 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat4
if not self.comcat5 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat5
if not self.comcat6 == '':
CH=CH+'\n[[Category:%s]]'%self.comcat6
CH=u'{{JB2-Moved|'+ self.imagePage.site().language() + '.' + self.imagePage.site().family.name +'|time=~~~~~|user=%s}}' % self.user + CH
CH=CH.decode('utf-8')
if '[[category:' in CH.lower():
# I want every picture to be tagged with the bottemplate so i can check my contributions later.
re.sub(r'\{\{subst:Unc\}\} <!-- Remove this line once you have added categories -->', '', CH)
#urlEncoding='utf-8'
bot = UploadRobot(url=self.imagePage.fileUrl(), description=CH, useFilename=self.newname, keepFilename=True, verifyDescription=False, ignoreWarning = True, targetSite = wikipedia.getSite('commons', 'commons'))
bot.run()
#Should check if the image actually was uploaded
if wikipedia.Page(wikipedia.getSite('commons', 'commons'), u'Image:' + self.newname).exists():
#Get a fresh copy, force to get the page so we dont run into edit conflicts
imtxt=self.imagePage.get(force=True)
#Remove the move to commons templates
##if moveToCommonsTemplate.has_key(self.imagePage.site().language()):
for moveTemplate in moveToCommonsTemplate[self.imagePage.site().language()]:
imtxt = re.sub(u'(?i)\{\{' + moveTemplate + u'\}\}', u'', imtxt)
#add {{NowCommons}}
#if nowCommonsTemplate.has_key(self.imagePage.site().language()):
addTemplate = u'{{subst:ncd|%s}}' % self.newname
#else:
# addTemplate = nowCommonsTemplate['_default'] % self.newname
#if nowCommonsMessage.has_key(self.imagePage.site().language()):
commentText = u'File is now available on Wikimedia Commons.'
#else:
# commentText = nowCommonsMessage['_default']
re.sub('\|canMove=yes\|', '|canMove=botMoved|', imtxt)
wikipedia.showDiff(self.imagePage.get(), imtxt+addTemplate)
self.imagePage.put(imtxt + addTemplate, comment = commentText)
self.gen = pagegenerators.FileLinksGenerator(self.imagePage)
self.preloadingGen = pagegenerators.PreloadingGenerator(self.gen)
#If the image is uploaded under a different name, replace all instances
if self.imagePage.titleWithoutNamespace() != self.newname:
#if imageMoveMessage.has_key(self.imagePage.site().language()):
moveSummary = u'[[:Image:%s|Image]] moved to [[:commons:Image:%s|commons]].' % (self.imagePage.titleWithoutNamespace(), self.newname)
#else:
# moveSummary = imageMoveMessage['_default'] % (self.imagePage.titleWithoutNamespace(), self.newname)
imagebot = ImageRobot(generator = self.preloadingGen, oldImage = self.imagePage.titleWithoutNamespace(), newImage = self.newname, summary = moveSummary, always = True, loose = True)
imagebot.run()
return
def log(event, site):
logPage = wikipedia.Page(site,'User:John_Bot_II/Report')
pageText = logPage.get()
newText = '\n*' + event + '-- ~~~~'
logPage.put(pageText+newText,'[[WP:BOT|BOT]]: Error Report')
return
def main():
site = wikipedia.getSite()
cat = catlib.Category(site,'Images_ready_to_be_moved_by_John_Bot_II')
#gen = pagegenerators.CategorizedPageGenerator('Category:Images ready to be moved by John Bot II')
gen = pagegenerators.CategorizedPageGenerator(cat)
pgen = pagegenerators.PreloadingGenerator(gen)
wikipedia.handleArgs()
checkPage = wikipedia.Page(site,'User:John Bot II/CheckPage')
checkPageText = checkPage.get()
aUsers = checkPageText.lower().split('\n')
for page in pgen:
#page = wikipedia.Page(site,'Image:CWii2.jpg')
if page.exists() and (page.namespace() == 6) and (not page.isRedirectPage()) :
imagepage = wikipedia.ImagePage(page.site(), page.title())
#Let's process.
ptext = imagepage.get()
if not re.search('\{\{Jb2move',ptext,re.I):
#page not found
wikipedia.output('Template not found')
continue
#test = re.findall('\|canMove="(.*?)"\|', ptext, re.I)
canmoveRe = re.compile(r"\|canMove=(.*?)\|")
cmMatch = canmoveRe.search(ptext)
if cmMatch:
canMove = cmMatch.group()
canMove = canMove.strip('|').split('=')
canMove = canMove[1]
else:
canMove = ""
wikipedia.output("ERROR: Couldn't get canMove status, skiping.")
log('Could not get canMove status on [[:%s]]' % imagepage.title(), site)
#TODO: Log and error mark here
continue
if not canMove == 'yes':
wikipedia.output("Image isn't movable")
log('WTF? Image isnt movable on [[:%s]]' % imagepage.title(), site)
continue
userRe = re.compile(r"\|user=(.*?)\|")
uMatch = userRe.search(ptext)
if uMatch:
user = uMatch.group()
user = user.strip('|').split('=')
user = user[1]
else:
user = ""
wikipedia.output("ERROR: User is not given")
log('User not given. [[:%s]]' % imagepage.title(), site)
continue
if not user.lower() in aUsers:
wikipedia.output("ERROR: %s isn't on CheckPage!" % user)
log('User %s isnt given on [[:%s]]' % (user,imagepage.title()) , site)
continue
newnameRe = re.compile(r"\|newName=.*?\}\}")
newnameMatch = newnameRe.search(ptext)
if newnameMatch:
newname = newnameMatch.group()
newname = newname.strip('|}').split('=')
newname = newname[1]
else:
newname = ''
if not newname == '':
commonsImage = wikipedia.Page(wikipedia.getSite('commons','commons'),'Image:'+newname)
else:
commonsImage = wikipedia.Page(wikipedia.getSite('commons','commons'),imagepage.title())
if commonsImage.exists():
#Yarr! They be taking our names!
wikipedia.output('ERROR: The image already exists on the commons')
continue
hascatRe = re.compile(r"\|comCat\d=.*?\|")
hascatMatch = hascatRe.search(ptext)
if hascatMatch:
hascat = True
else:
hascat = False
wikipedia.output("NOTICE: No cats defined!")
if hascat:
comcat1Match = re.search(r"\|comCat1=.*?\|", ptext, re.I)
comcat2Match = re.search(r"\|comCat2=.*?\|", ptext, re.I)
comcat3Match = re.search(r"\|comCat3=.*?\|", ptext, re.I)
comcat4Match = re.search(r"\|comCat4=.*?\|", ptext, re.I)
comcat5Match = re.search(r"\|comCat5=.*?\|", ptext, re.I)
comcat6Match = re.search(r"\|comCat6=.*?\|", ptext, re.I)
if comcat1Match:
comcat1 = comcat1Match.group()
comcat1 = comcat1.strip('|').split('=')
comcat1 = comcat1[1]
else:
comcat1 = ''
if comcat2Match:
comcat2 = comcat2Match.group()
comcat2 = comcat2.strip('|').split('=')
comcat2 = comcat2[1]
else:
comcat2 = ''
if comcat3Match:
comcat3 = comcat3Match.group()
comcat3 = comcat3.strip('|').split('=')
comcat3 = comcat3[1]
else:
comcat3 = ''
if comcat4Match:
comcat4 = comcat4Match.group()
comcat4 = comcat4.strip('|').split('=')
comcat4 = comcat4[1]
else:
comcat4 = ''
if comcat5Match:
comcat5 = comcat5Match.group()
comcat5 = comcat5.strip('|').split('=')
comcat5 = comcat5[1]
else:
comcat5 = ''
if comcat6Match:
comcat6 = comcat6Match.group()
comcat6 = comcat6.strip('|').split('=')
comcat6 = comcat6[1]
else:
comcat6 = ''
else:
comcat1 = ''
comcat2 = ''
comcat3 = ''
comcat4 = ''
comcat5 = ''
comcat6 = ''
if newname == '': newname = imagepage.titleWithoutNamespace()
imageTransfer(imagepage, newname, comcat1, comcat2, comcat3, comcat4, comcat5, comcat6, hascat, user).start()
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()