Χρήστης:Flubot/Νέα Κλείδα
Εμφάνιση
Διαγράφει την παλιά κλείδα ταξινόμησης και βάζει στη θέση της το {{κλείδα-ελλ}} (μόνο για ελληνικές λέξεις)
# -*- coding: utf-8 -*-
u"""
Αυτό το script μεταφέρει όλους τους πολυγλωσσικούς συνδέσμους στο κάτω μέρος
της σελίδας, όλες τις κατηγορίες στο κάτω μέρος πριν από τους πολυγλωσσικούς,
και προσθέτει το πρότυπο {{κλείδα ταξινόμησης}} μόλις πριν από τις κατηγορίες.
Το πρότυπο καλείται με την κατάλληλη παράμετρο για την γλώσσα (fr, en, κλπ),
ανάλογα με το πρότυπο γλώσσας στην αρχή της σελίδας ({{=nn=}}). (Ψέματα!)
Υποστηρίζονται οι εξής παράμετροι:
¶ms;
Much of this code was stolen from cosmetic_changes.py.
"""
__version__ = '$Id: default_kleidaTaksinomhshs.py 4260 2007-09-12 22:12:11Z wikipedian $'
import wikipedia, pagegenerators, string
import sys
import re
warning = u"""Προσοχή! Αν σκοπεύετε να εκτελέσετε αυτό το μποτ κάπου αλλού εκτός από
το el.wiktionary, ξανασκεφτείτε το!"""
docuReplacements = {
'¶ms;': pagegenerators.parameterHelp,
'&warning;': warning,
}
# Summary message when using this module as a stand-alone script
msg_standalone = {
'el': u'Bot: εισαγωγή κλείδας ταξινόμησης',
}
class EpiloghKleidaTaksinomhshsToolkit:
def __init__(self, site, title, exceptions = [], debug = False):
self.site = site
self.debug = debug
self.title = title
self.exceptions = exceptions
def allagh(self, keimeno):
"""
Given a wiki source code text, returns the cleaned up version.
FIXME σύνοψη εδώ
"""
palioKeimeno = keimeno
#protypo = u'{{κλείδα-ελλ}}'
# αφαιρούμε την επόμενη κενή γραμμή μαζί με το πρότυπο αν υπάρχει
protyporegexp = u'\{\{κλείδα ταξινόμησης\|[^\}]*\}\}(\r\n\r\n|$)'
keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp)
protyporegexp1 = u'\{\{κλείδα ταξινόμησης\|[^\}]*\}\}\r\n'
keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp1)
protyporegexp2 = u'\{\{κλείδα-ελλ\}\}(\r\n\r\n|$)'
keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp2)
protyporegexp3 = u'\{\{κλείδα-ελλ\}\}(\r\n|$)'
keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp3)
keimeno = self.addKleidaTaksinomhshsProtypo(keimeno)
if self.debug:
wikipedia.showDiff(palioKeimeno, keimeno)
return keimeno
def paragwghKleidaTaksinomhshsProtypo(self):
protypo = u'{{κλείδα-ελλ}}'
return protypo
def removeKleidaTaksinomhshsProtypo(self,keimeno,protypo):
u"""
remove old template if it is there
"""
teliko_keimeno = re.sub(protypo,u'',keimeno)
return teliko_keimeno
def addKleidaTaksinomhshsProtypo(self,keimeno):
u"""
stuff provided protypo into the wikitext
right before categories and interwiki links.
"""
# βρίσκουμε σημάδι που δεν περιέχεται ήδη στο κείμενο
marker = '@@'
while marker in keimeno:
marker += '@'
site = self.site
protypo = u'{{κλείδα-ελλ}}'
kathgories = wikipedia.getCategoryLinks(keimeno, site = site)
xwris_kathgories = wikipedia.removeCategoryLinks(keimeno, site = site, marker = '')
interwiki = wikipedia.getLanguageLinks(xwris_kathgories, insite = site)
textnocatsnoiws = wikipedia.removeLanguageLinks(xwris_kathgories.replace(marker,'').strip(), site = self.site) + site.family.category_text_separator + protypo + site.family.category_text_separator
# βάζουμε τώρα τις κατηγορίες, τους συνδέσμους
me_kathgories = wikipedia.replaceCategoryLinks(textnocatsnoiws, kathgories, site = self.site)
teliko_keimeno = wikipedia.replaceLanguageLinks(me_kathgories, interwiki, site = self.site)
return teliko_keimeno
class EpiloghKleidaTaksinomhshsBot:
def __init__(self, generator, exceptions=[], acceptall = False):
self.generator = generator
self.acceptall = acceptall
self.exceptions = exceptions
# Load default summary message.
wikipedia.setAction(wikipedia.translate(wikipedia.getSite(), msg_standalone))
def checkExceptions(self, original_text):
"""
If one of the exceptions applies for the given text, returns the
substring which matches the exception. Otherwise it returns None.
"""
for exception in self.exceptions:
hit = exception.search(original_text)
if hit:
return hit.group(0)
return None
def treat(self, page):
try:
# Show the title of the page we're working on.
# Highlight the title in purple.
wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
ccToolkit = EpiloghKleidaTaksinomhshsToolkit(page.site(), page.title, debug = True)
keimeno = page.get()
match = self.checkExceptions(keimeno)
# skip all pages that contain certain texts
if match:
wikipedia.output(u'Skipping %s because it contains %s' % (page.aslink(), match))
else:
allages = ccToolkit.allagh(keimeno)
if allages != keimeno:
if not self.acceptall:
choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
if choice in ['a', 'A']:
self.acceptall = True
if self.acceptall or choice in ['y', 'Y']:
page.put(allages)
else:
wikipedia.output(u"Καμία αλλαγή δεν χρειάστηκε στο %s" % page.title())
except wikipedia.NoPage:
wikipedia.output(u"Η σελίδα %s δεν υπάρχει;!" % page.aslink())
except wikipedia.IsRedirectPage:
wikipedia.output("Η σελίδα %s είναι ανακατεύθυνση, skipping." % page.aslink())
except wikipedia.LockedPage:
wikipedia.output(u"Η σελίδα %s είναι κλειδωμένη;!" % page.aslink())
def run(self):
for page in self.generator:
self.treat(page)
original_text = page.get()
def main():
#page generator
gen = None
PageTitles = []
exceptions=[]
namespaces = []
regex = False
caseInsensitive = False
# This factory is responsible for processing command line arguments
# that are also used by other scripts and that determine on which pages
# to work on.
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg.startswith('-except:'):
exceptions.append(arg[8:])
elif arg == '-regex':
regex = True
elif arg == '-nocase':
caseInsensitive = True
elif arg.startswith('-namespace:'):
try:
namespaces.append(int(arg[11:]))
except ValueError:
namespaces.append(arg[11:])
elif arg.startswith('-page'):
if len(arg) == 5:
PageTitles.append(wikipedia.input(u'Which page do you want to change?'))
else:
PageTitles.append(arg[6:])
else:
generator = genFactory.handleArg(arg)
if generator:
gen = generator
else:
wikipedia.showHelp()
for i in range(len(exceptions)):
exception = exceptions[i]
if not regex:
exception = re.escape(exception)
if caseInsensitive:
exceptionR = re.compile(exception, re.UNICODE | re.IGNORECASE)
else:
exceptionR = re.compile(exception, re.UNICODE)
exceptions[i] = exceptionR
if PageTitles:
pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles]
gen = iter(pages)
if not gen:
wikipedia.showHelp()
elif wikipedia.inputChoice(warning + u'\nΘέλετε σίγουρα να συνεχίσετε;', ['yes', 'no'], ['y', 'N'], 'N') == 'y':
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
preloadingGen = pagegenerators.PreloadingGenerator(gen)
bot = EpiloghKleidaTaksinomhshsBot(preloadingGen, exceptions)
bot.run()
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()