jenkins-bot has submitted this change and it was merged.

Change subject: New bot to create new items. (now with pep8)
......................................................................


New bot to create new items.
(now with pep8)

Change-Id: I43a46ceaa09532a1215a9e5a4cd59d0d58b41683
---
A scripts/newitem.py
1 file changed, 113 insertions(+), 0 deletions(-)

Approvals:
  Merlijn van Deen: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/scripts/newitem.py b/scripts/newitem.py
new file mode 100644
index 0000000..3c28927
--- /dev/null
+++ b/scripts/newitem.py
@@ -0,0 +1,113 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+"""
+This script creates new items on Wikidata based on certain criteria.
+* When was the (Wikipedia) page created?
+* When was the last edit on the page?
+* Does the page contain interwiki's?
+
+"""
+#
+# (C) Multichill, 2014
+# (C) Pywikibot team, 2014
+#
+# Distributed under the terms of the MIT license.
+#
+__version__ = '$Id$'
+#
+
+import json
+import pywikibot
+from pywikibot import pagegenerators
+from datetime import datetime
+from datetime import timedelta
+
+
+class NewItemRobot:
+    """
+    A bot to create new items
+    """
+    def __init__(self, generator, pageAge, lastEdit):
+        """
+        Arguments:
+            * generator    - A generator that yields Page objects.
+            * pageAge      - The minimum number of days that has passed since 
the page was created
+            * lastEdit     - The minimum number of days that has passed since 
the page was last edited
+
+        """
+        self.generator = pagegenerators.PreloadingGenerator(generator)
+        self.repo = pywikibot.Site().data_repository()
+        self.pageAge = pageAge
+        self.pageAgeBefore = self.repo.getcurrenttime() - 
timedelta(days=self.pageAge)
+        self.lastEdit = lastEdit
+        self.lastEditBefore = self.repo.getcurrenttime() - 
timedelta(days=self.lastEdit)
+
+    def run(self):
+        """
+        Starts the robot.
+        """
+        pywikibot.output('Page age is set to %s days so only pages created 
before %s will be considered.' % (self.pageAge, self.pageAgeBefore.isoformat()))
+        pywikibot.output('Last edit is set to %s days so only pages last 
edited before %s will be considered.' % (self.lastEdit, 
self.lastEditBefore.isoformat()))
+
+        for page in self.generator:
+            pywikibot.output('Processing %s' % page)
+            item = pywikibot.ItemPage.fromPage(page)
+            if item.exists():
+                pywikibot.output('%s already has an item: %s. Doing a null 
edit on the page.' % (page, item))
+                page.put(page.get())
+            elif page.isRedirectPage():
+                pywikibot.output('%s is a redirect page. Skipping.' % page)
+            elif page.editTime() > self.lastEditBefore:
+                pywikibot.output('Last edit on %s was on %s. Too recent. 
Skipping.' % (page, page.editTime().isoformat()))
+            else:
+                (revId, revTimestamp, revUser, revComment) = 
page.getVersionHistory(reverseOrder=True, total=1)[0]
+                if revTimestamp > self.pageAgeBefore:
+                    pywikibot.output('Page creation of %s on %s is too recent. 
Skipping.' % (page, page.editTime().isoformat()))
+                elif page.langlinks():
+                    # FIXME: Implement this
+                    pywikibot.output('Found language links (interwiki links). 
Haven\'t implemented that yet so skipping.')
+                else:
+                    # FIXME: i18n
+                    summary = u'Bot: New item with sitelink from %s' % 
(page.title(asLink=True, insite=self.repo), )
+
+                    data = {'sitelinks':
+                            {item.getdbName(page.site):
+                             {'site': item.getdbName(page.site),
+                              'title': page.title()}
+                             },
+                            'labels':
+                            {page.site.lang:
+                             {'language': page.site.lang,
+                              'value': page.title()}
+                             }
+                            }
+                    pywikibot.output(summary)
+                    item.editEntity(data, summary=summary)
+                    # And do a null edit to force update
+                    page.put(page.get())
+
+
+def main():
+    pageAge = 21
+    lastEdit = 7
+
+    gen = pagegenerators.GeneratorFactory()
+
+    for arg in pywikibot.handleArgs():
+        if arg.startswith('-pageage:'):
+            pageAge = int(arg[9:])
+        elif arg.startswith('-lastedit:'):
+            lastEdit = int(arg[10:])
+        if gen.handleArg(arg):
+            continue
+
+    generator = gen.getCombinedGenerator()
+    if not generator:
+        # FIXME: Should throw some help
+        return
+
+    bot = NewItemRobot(generator, pageAge, lastEdit)
+    bot.run()
+
+if __name__ == "__main__":
+    main()

-- 
To view, visit https://gerrit.wikimedia.org/r/116284
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I43a46ceaa09532a1215a9e5a4cd59d0d58b41683
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Multichill <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to