Χρήστης: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()