| There is no RationalWiki without you. We are a small non-profit with no staff – we are hundreds of volunteers who document pseudoscience and crankery around the world every day. We will never allow ads because we must remain independent. We cannot rely on big donors with corresponding big agendas. We are not the largest website around, but we believe we play an important role in defending truth and objectivity. If everyone seeing this today donates $5, we will meet our goal for 2019. |
Fighting pseudoscience isn't free. We are 100% user-supported! Help and donate $5, $20 or whatever you can today with |
User:MordantMaenad/scripts/masscat.py
From RationalWiki
< User:MordantMaenad(Redirected from User:Blue/scripts/masscat.py)
"""
Nifty little interface for mass-adding, mass-removing, or mass-replacing of categories. An application of the pywikipedia library.
Lets you input a list of pages for the particular action you choose.
"""
import wikipedia
from Tkinter import *
site = wikipedia.getSite('en', 'rationalwiki')
class App:
def __init__(self, master):
master.title("Category interface")
master.maxsize(424,627)
master.minsize(424,627)
self.catboxlbl = Label(master, text="Category:")
self.catboxlbl.grid(column=1, padx=3, pady=5, row=1, columnspan=1)
self.catbox = Entry(master)
self.catbox.grid(column=2, padx=6, pady=5, row=1, columnspan=1)
self.lb = Label(master, text="Enter the names of categories here, separated by newlines:")
self.lb.grid(column=1, padx=6, pady=5, row=2, columnspan=3)
self.entrybox = Text(master, height=30, width=50)
self.entrybox.grid(column=1, padx=8, pady=5, row=3, columnspan=3)
self.addb = Button(master, text="Add this cat", command=self.addcat, width=15, height=1)
self.addb.grid(column=1, padx=5, pady=5, row=4)
self.removeb = Button(master, text="Remove this cat", command=self.removecat, width=15, height=1)
self.removeb.grid(column=2, padx=5, pady=5, row=4)
self.replaceb = Button(master, text="Swap this cat for:", command=self.swapcat, width=15, height=1)
self.replaceb.grid(column=3, padx=5, pady=5, row=4)
self.swapbox = Entry(master)
self.swapbox.grid(column=3, padx=3, pady=1, row=5)
def interpret(self, text):
result = []
for line in text.splitlines(1):
if line.endswith('\n'):
result.append(line[:-1])
else:
result.append(line)
return result
def addcat(self):
contents = self.entrybox.get(1.0, END)
cat = unicode(self.catbox.get())
pages = self.interpret(contents)
for page in pages:
try:
rwpage = wikipedia.Page(site, unicode(page))
text = rwpage.get()
except:
continue
if u'[[Category:' + cat + u']]' not in text and u'[[category:' + cat + u']]' not in text:
text += u'\n[[Category:' + cat + u']]'
rwpage.put(text, u'Bot: added [[:Category:' + cat + u']] using [[User:Blue/scripts/masscat.py|BlueCat]]', False, True)
def removecat(self):
contents = self.entrybox.get(1.0, END)
cat = unicode(self.catbox.get())
pages = self.interpret(contents)
for page in pages:
try:
rwpage = wikipedia.Page(site, unicode(page))
text = rwpage.get()
except:
continue
if u'[[Category:' + cat + u']]' in text or u'[[category:' + cat + u']]' in text:
text = text.replace(u'[[Category:' + cat + u']]', u'')
text = text.replace(u'[[category:' + cat + u']]', u'')
rwpage.put(text, u'Bot: removed category [[:Category:' + cat + u']] using [[User:Blue/scripts/masscat.py|BlueCat]]', False, True)
def swapcat(self):
contents = self.entrybox.get(1.0, END)
cat = unicode(self.catbox.get())
newcat = self.swapbox.get()
if newcat != '':
pages = self.interpret(contents)
for page in pages:
try:
rwpage = wikipedia.Page(site, unicode(page))
text = rwpage.get()
except:
continue
if u'[[Category:' + cat + u']]' in text or u'[[category:' + cat + u']]' in text:
text = text.replace(u'[[Category:' + cat + u']]', u'[[Category:' + newcat + u']]')
text = text.replace(u'[[category:' + cat + u']]', u'[[Category:' + newcat + u']]')
rwpage.put(text, u'Bot: replaced category [[:Category:' + cat + u']] with [[:Category:' + newcat + u']] using [[User:Blue/scripts/masscat.py|BlueCat]]', False, True)
root = Tk()
app = App(root)
root.mainloop()