Szerkesztő:DhanakBot/catremove.py

A Wikipédiából, a szabad enciklopédiából
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Ez a bot egy kategóriát szed ki bizonyos lapokból.

A következő argumentumokat ismeri:

    -cat:kategória     az adott kategória szócikkeit járja be

    -links:lapnév      minden lapot bejár, ami a lapnév lapról hivatkozva van

    -file:textfájl     a textfájlban hivatkozott lapokat járja be
                       (csak a [[lapnév]] fomájú hivatkozásokat tekinti)

Minden más paraméter a kiszedendő kategória címeként értelmeződik.
"""

import sys, re
import wikipedia, pagegenerators, catlib


class CategoryRemovalBot:
    def __init__(self, generator, removeCategory):
        self.generator = generator
        self.removeCategory = removeCategory

    def run(self):
        answer = ''
        
        for page in self.generator:
            try:
                text = page.get()
            except wikipedia.NoPage:
                wikipedia.output(u'HIBA: Nem találom a %s lapot' % page.title())
                continue
            except wikipedia.IsRedirectPage:
                continue

            categories = page.categories()
            for cat in categories:
                if cat.title() == u"Kategória:" + self.removeCategory:
                    categories.remove(cat)
                    text = wikipedia.replaceCategoryLinks(text, categories)
                    break
            else:
                wikipedia.output(u"A %s kategória nem található a %s lapon!" %
                                 (self.removeCategory, page.title()))
                continue

            if text != page.get():
                wikipedia.output(u"\n>>> %s <<<" % page.title())
                wikipedia.showDiff(page.get(), text)
                if answer != 'm':
                    answer = wikipedia.input(u"Módosítsam a %s lapot [(i)gen/(N)em/(m)ind]?" %
                                             page.title())
                if answer == 'i' or answer == 'm':
                    page.put(text, u"Bot: %s kategória eltávolítása" % self.removeCategory)

def main():
    gen = None
    removeCat = []
    
    for arg in sys.argv[1:]:
        arg = wikipedia.argHandler(arg, 'catremove')
        if arg:
            if arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), u"Kategória:" + arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            elif arg.startswith('-links:'):
                page = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(page)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            else:
                removeCat.append(arg)

    if not removeCat or not gen:
        wikipedia.showHelp('catremove')
    else:
        gen = pagegenerators.PreloadingGenerator(gen)
        CategoryRemovalBot(gen, ' '.join(removeCat)).run()


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