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:
+
+¶ms;
+
+-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 = {
+ '¶ms;': 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()
Show replies by date