Revision: 7715
Author:   siebrand
Date:     2009-11-30 11:36:45 +0000 (Mon, 30 Nov 2009)

Log Message:
-----------
[ #2894485 ] Basic.py adapted for rewrite branch. Contributed by stanlekub.

Added Paths:
-----------
    branches/rewrite/scripts/basic.py

Copied: branches/rewrite/scripts/basic.py (from rev 7713, 
trunk/pywikipedia/basic.py)
===================================================================
--- branches/rewrite/scripts/basic.py                           (rev 0)
+++ branches/rewrite/scripts/basic.py   2009-11-30 11:36:45 UTC (rev 7715)
@@ -0,0 +1,153 @@
+#!/usr/bin/python
+# -*- coding: utf-8  -*-
+"""
+This is not a complete bot; rather, it is a template from which simple
+bots can be made. You can rename it to mybot.py, then edit it in
+whatever way you want.
+
+The following parameters are supported:
+
+&params;
+
+-dry              If given, doesn't do any real changes, but only shows
+                  what would have been changed.
+
+All other parameters will be regarded as part of the title of a single page,
+and the bot will only work on that single page.
+"""
+__version__ = '$Id$'
+import pywikibot
+from pywikibot import pagegenerators
+
+# This is required for the text that is shown when you run this script
+# with the parameter -help.
+docuReplacements = {
+    '&params;': pagegenerators.parameterHelp
+}
+
+class BasicBot:
+    # Edit summary message that should be used.
+    # NOTE: Put a good description here, and add translations, if possible!
+    msg = {
+        'ar': u'روبوت: تغيير ...',
+        'cs': u'Robot změnil ...',
+        'de': u'Bot: Ändere ...',
+        'en': u'Robot: Changing ...',
+        'fr': u'Robot: Changé ...',
+        'ja':u'ロボットによる:編集',
+        'ksh': u'Bot: Ännern ...',
+        'nds': u'Bot: Änderung ...',
+        'nl': u'Bot: wijziging ...',
+        'pt': u'Bot: alterando...',
+        'sv': u'Bot: Ändrar ...',
+        'zh': u'機器人:編輯.....',
+    }
+
+    def __init__(self, generator, dry):
+        """
+        Constructor. Parameters:
+            @param generator: The page generator that determines on which pages
+                          to work on.
+            @type generator: generator.
+            @param dry: If True, doesn't do any real changes, but only shows
+                          what would have been changed.
+            @type dry: boolean.
+        """
+        self.generator = generator
+        self.dry = dry
+        self.summary = pywikibot.translate(pywikibot.getSite(), self.msg)
+
+    def run(self):
+        for page in self.generator:
+            self.treat(page)
+
+    def treat(self, page):
+        """
+        Loads the given page, does some changes, and saves it.
+        """
+        try:
+            # Load the page
+            text = page.get()
+        except pywikibot.NoPage:
+            pywikibot.output(u"Page %s does not exist; skipping." % 
page.title(asLink=True))
+            return
+        except pywikibot.IsRedirectPage:
+            pywikibot.output(u"Page %s is a redirect; skipping." % 
page.title(asLink=True))
+            return
+
+        ################################################################
+        # NOTE: Here you can modify the text in whatever way you want. #
+        ################################################################
+
+        # If you find out that you do not want to edit this page, just return.
+        # Example: This puts the text 'Test' at the beginning of the page.
+        text = 'Test ' + text
+
+        # only save if something was changed
+        if text != page.get():
+            # Show the title of the page we're working on.
+            # Highlight the title in purple.
+            pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % 
page.title())
+            # show what was changed
+            pywikibot.showDiff(page.get(), text)
+            if not self.dry:
+                choice = pywikibot.inputChoice(u'Do you want to accept these 
changes?', ['Yes', 'No'], ['y', 'N'], 'N')
+                if choice == 'y':
+                    try:
+                        page.text = text
+                        # Save the page
+                        page.save(comment=self.summary)
+                    except pywikibot.LockedPage:
+                        pywikibot.output(u"Page %s is locked; skipping." % 
page.title(asLink=True))
+                    except pywikibot.EditConflict:
+                        pywikibot.output(u'Skipping %s because of edit 
conflict' % (page.title()))
+                    except pywikibot.SpamfilterError, error:
+                        pywikibot.output(u'Cannot change %s because of spam 
blacklist entry %s' % (page.title(), error.url))
+
+
+def main():
+    # 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()
+    # The generator gives the pages that should be worked upon.
+    gen = None
+    # This temporary array is used to read the page title if one single
+    # page to work on is specified by the arguments.
+    pageTitleParts = []
+    # If dry is True, doesn't do any real changes, but only show
+    # what would have been changed.
+    dry = False
+
+    # Parse command line arguments
+    for arg in pywikibot.handleArgs():
+        if arg.startswith("-dry"):
+            dry = True
+        else:
+            # check if a standard argument like
+            # -start:XYZ or -ref:Asdf was given.
+            if not genFactory.handleArg(arg):
+                pageTitleParts.append(arg)
+
+    if pageTitleParts != []:
+        # We will only work on a single page.
+        pageTitle = ' '.join(pageTitleParts)
+        page = pywikibot.Page(pywikibot.Link(pageTitle, pywikibot.getSite()))
+        gen = iter([page])
+
+    if not gen:
+        gen = genFactory.getCombinedGenerator()
+    if gen:
+        # The preloading generator is responsible for downloading multiple
+        # pages from the wiki simultaneously.
+        gen = pagegenerators.PreloadingGenerator(gen)
+        bot = BasicBot(gen, dry)
+        bot.run()
+    else:
+        pywikibot.showHelp()
+
+if __name__ == "__main__":
+    try:
+        main()
+    finally:
+        pywikibot.stopme()



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to