[Pywikipedia-l] SVN: [5712] trunk/pywikipedia/articlenos.py

balasyum at svn.wikimedia.org balasyum at svn.wikimedia.org
Mon Jul 14 10:01:29 UTC 2008


Revision: 5712
Author:   balasyum
Date:     2008-07-14 10:01:28 +0000 (Mon, 14 Jul 2008)

Log Message:
-----------
Adding a script that displays the ordinal number of new articles

Added Paths:
-----------
    trunk/pywikipedia/articlenos.py

Added: trunk/pywikipedia/articlenos.py
===================================================================
--- trunk/pywikipedia/articlenos.py	                        (rev 0)
+++ trunk/pywikipedia/articlenos.py	2008-07-14 10:01:28 UTC (rev 5712)
@@ -0,0 +1,81 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+A script that displays the ordinal number of the new articles being created as visible on the Recent Changes list.
+The script doesn't make any edits, no bot account needed.
+"""
+
+# Author: Balasyum
+# http://hu.wikipedia.org/wiki/User:Balasyum
+# License : GFDL
+
+from ircbot import SingleServerIRCBot
+from irclib import nm_to_n, nm_to_h, irc_lower, ip_numstr_to_quad, ip_quad_to_numstr
+import wikipedia
+import re
+
+class ArtNoDisp(SingleServerIRCBot):
+    def __init__(self, site, channel, nickname, server, port=6667):
+        SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname)
+        self.channel = channel
+	self.site = wikipedia.getSite()
+	self.other_ns = re.compile(u'14\[\[07(' + u'|'.join(site.namespaces()) + u')')
+        self.api_url = self.site.api_address()
+        self.api_url += 'action=query&meta=siteinfo&siprop=statistics&format=xml'
+        self.api_found = re.compile(r'articles="(.*?)"')
+        self.re_edit = re.compile(r'^C14\[\[^C07(?P<page>.+?)^C14\]\]^C4 (?P<flags>.*?)^C10 ^C02(?P<url>.+?)^C ^C5\*^C ^C03(?P<user>.+?)^C ^C5\*^C \(?^B?(?P<bytes>[+-]?\d+?)^B?\) ^C10(?P<summary>.*)^C'.replace('^B', '\002').replace('^C', '\003').replace('^U', '\037'))
+
+    def on_nicknameinuse(self, c, e):
+        c.nick(c.get_nickname() + "_")
+
+    def on_welcome(self, c, e):
+        c.join(self.channel)
+
+    def on_privmsg(self, c, e):
+	pass
+
+    def on_pubmsg(self, c, e):
+        match = self.re_edit.match(e.arguments()[0])
+        if not match:
+                return
+        if not ('N' in match.group('flags')):
+                return
+        try:
+            msg = unicode(e.arguments()[0],'utf-8')
+        except UnicodeDecodeError:
+            return
+        if self.other_ns.match(msg):
+            return
+        name = msg[8:msg.find(u'14',9)]
+        text = self.site.getUrl(self.api_url)
+        entry = self.api_found.findall(text)
+        page = wikipedia.Page(site, name)
+        try:
+                text = page.get()
+        except wikipedia.NoPage:
+                return
+        except wikipedia.IsRedirectPage:
+                return
+	print entry[0], name
+
+    def on_dccmsg(self, c, e):
+	pass
+
+    def on_dccchat(self, c, e):
+	pass
+
+    def do_command(self, e, cmd):
+	pass
+
+    def on_quit(self, e, cmd):
+	pass
+
+def main():
+    site = wikipedia.getSite()
+    site.forceLogin()
+    chan = '#' + site.language() + '.' + site.family.name
+    bot = ArtNoDisp(site, chan, site.loggedInAs(), "irc.wikimedia.org")
+    bot.start()
+
+if __name__ == "__main__":
+    main()


Property changes on: trunk/pywikipedia/articlenos.py
___________________________________________________________________
Name: svn:executable
   + *





More information about the Pywikipedia-l mailing list