[Pywikipedia-l] SVN: [5351] trunk/pywikipedia/checkimages.py

filnik at svn.wikimedia.org filnik at svn.wikimedia.org
Sat May 10 19:39:59 UTC 2008


Revision: 5351
Author:   filnik
Date:     2008-05-10 19:39:59 +0000 (Sat, 10 May 2008)

Log Message:
-----------
Adding a new functionality as requested by my best friend on Commons, ABF :-) 

Modified Paths:
--------------
    trunk/pywikipedia/checkimages.py

Modified: trunk/pywikipedia/checkimages.py
===================================================================
--- trunk/pywikipedia/checkimages.py	2008-05-10 19:03:28 UTC (rev 5350)
+++ trunk/pywikipedia/checkimages.py	2008-05-10 19:39:59 UTC (rev 5351)
@@ -13,34 +13,36 @@
 
 This script understands the following command-line arguments:
 
-    -limit          - The number of images to check (default: 80)
+    -limit              - The number of images to check (default: 80)
 
-    -commons        - The Bot will check if an image on Commons has the same name
-                    and if true it report the image.
+    -commons            - The Bot will check if an image on Commons has the same name
+                        and if true it report the image.
 
-    -duplicates     - Checking if the image has duplicates.
+    -duplicates         - Checking if the image has duplicates.
 
-    -duplicatesreport - Report the duplicates in a log *AND* put the template in the images.
+    -duplicatesreport   - Report the duplicates in a log *AND* put the template in the images.
 
+    -sendemail          - Send an email after tagging.
+
     -break	        - To break the bot after the first check (default: recursive)
 
-    -time[:#]	- Time in seconds between repeat runs (default: 30)
+    -time[:#]	        - Time in seconds between repeat runs (default: 30)
 
-    -wait[:#]       - Wait x second before check the images (default: 0)
+    -wait[:#]           - Wait x second before check the images (default: 0)
 
-    -skip[:#]	- The bot skip the first [:#] images (default: 0)
+    -skip[:#]	        - The bot skip the first [:#] images (default: 0)
 
-    -start[:#]	- Use allpages() as generator (it starts already form Image:[:#])
+    -start[:#]	        - Use allpages() as generator (it starts already form Image:[:#])
 
-    -cat[:#]        - Use a category as generator
+    -cat[:#]            - Use a category as generator
 
-    -regex[:#]      - Use regex, must be used with -url or -page
+    -regex[:#]          - Use regex, must be used with -url or -page
 
-    -page[:#]       - Define the name of the wikipage where are the images
+    -page[:#]           - Define the name of the wikipage where are the images
 
-    -url[:#]	- Define the url where are the images
+    -url[:#]	        - Define the url where are the images
 
-    -untagged[:#]   - Use daniel's tool as generator ( http://tools.wikimedia.de/~daniel/WikiSense/UntaggedImages.php )
+    -untagged[:#]       - Use daniel's tool as generator ( http://tools.wikimedia.de/~daniel/WikiSense/UntaggedImages.php )
 
 ---- Istructions for the real-time settings  ----
 * For every new block you have to add:
@@ -66,7 +68,7 @@
 #
 # (C) Kyle/Orgullomoore, 2006-2007 (newimage.py)
 # (C) Siebrand Mazeland, 2007
-# (C) Filnik, 2007
+# (C) Filnik, 2007-2008
 #
 # Distributed under the terms of the MIT license.
 #
@@ -320,9 +322,9 @@
         }
 # Stub - will make it better in future, work in progress.
 duplicatesText = {
-        'commons':u'\n{{Dupe|__image__}}',
+        'commons':u'\n{{Dupe|Image:__image__}}',
         'en':None,
-        'it':u'\n{{Cancella subito|Immagine doppia di [[:__image__]]}}',
+        'it':u'\n{{Cancella subito|Immagine doppia di [[:Immagine:__image__]]}}',
         }
 duplicate_user_talk_head = {
         'commons':None,
@@ -345,11 +347,18 @@
         'it':r'\{\{(?:[Tt]emplate:|)[Cc]ancella[ _]subito[|}]',
         }
 
-# Another stub
+## Put None if you don't use this option or simply add nothing if en
+## is still None.
+# Page where is stored the message to send as email to the users
 emailPageWithText = {
         'de':'Benutzer:ABF/D3',
         'en':None,
-        }   
+        }
+# Title of the email
+emailSubject = {
+        'de':'Problemen mit Deinem Bild auf der Deutschen Wikipedia',
+        'en':None,
+        }
 
 # Add your project (in alphabetical order) if you want that the bot start
 project_inserted = [u'ar', u'commons', u'de', u'en', u'ja', u'hu', u'it', u'ta', u'zh']
@@ -404,11 +413,8 @@
         response.close()
     return text
 
-def sendEmail():
-    """ Function that let you send email trough the Wikipedia system """
-    pass # Empty, need work
-
 def returnOlderTime(listGiven, timeListGiven):
+    """ Get some time and return the oldest of them """
     for element in listGiven:
         time = element[0]
         imageName = element[1]
@@ -420,6 +426,50 @@
         if not_the_oldest == False:
             return imageName     
 
+class EmailSender(wikipedia.Page):
+    """ Class to send emails through the Wikipedia's dedicated page. """
+    def __init__(self, site, user):
+        self.wikisite = site
+        self.user = user
+        page_special_name = u'Special:EmailUser'
+        self.page_special_name = page_special_name
+        page = '%s/%s' % (self.page_special_name, self.user)
+        self.page = page
+        wikipedia.Page.__init__(self, site, page, None, 0)
+ 
+    def send(self, subject, text, prompt = True):
+        """ Send an email through wikipedia's page. """
+        host = self.site().hostname()
+        address = '/w/index.php?title=%s&target=%s&action=submit' % (self.page_special_name, self.user)
+        # Getting the token.
+        token = self.site().getToken(self)
+        # Defing the predata.
+        predata = {
+            "wpSubject" : subject,
+            "wpText" : text,
+            'wpSend' : "Send",
+            'wpCCMe' : '0',
+        }
+        predata['wpEditToken'] = token
+        if self.site().hostname() in config.authenticate.keys():
+            predata['Content-type'] = 'application/x-www-form-urlencoded'
+            predata['User-agent'] = wikipedia.useragent
+            data = self.site().urlEncode(predata)
+            response = urllib2.urlopen(urllib2.Request('http://' + self.site().hostname() + address, data))
+            data = u''
+        else:
+            response, data = self.site().postForm(address, predata, sysop = False)
+        if data:
+            if 'var wgAction = "success";' in data:
+                wikipedia.output(u'Email sent')
+                return True
+            else:
+                wikipedia.output(u'Email not sent')
+                return False
+        else:
+            wikipedia.output(u'No data found.')
+            return False
+
 # Here there is the main class.
 class main:
     def __init__(self, site, logFulNumber = 25000, sendemailActive = False, duplicatesReport = False):
@@ -513,7 +563,7 @@
         # You can use this function also to find only the user that
         # has upload the image (FixME: Rewrite a bit this part)
         if put:
-            p.put(testoa + self.newtext, comment = self.commento, minorEdit = True)
+            pass#p.put(testoa + self.newtext, comment = self.commento, minorEdit = True)
         # paginetta it's the image page object.
         paginetta = wikipedia.ImagePage(self.site, self.image_namespace + self.image)
         # I take the data of the latest uploader and I take only the name
@@ -546,6 +596,7 @@
         """ Function to put the warning in talk page of the uploader."""
         commento2 = wikipedia.translate(self.site, comm2)
         emailPageName = wikipedia.translate(self.site, emailPageWithText)
+        emailSubj = wikipedia.translate(self.site, emailSubject)
         if self.notification2 == None:
             self.notification2 = self.notification
         else:
@@ -592,17 +643,19 @@
         else:
             commentox = self.commx
         if second_text == True:
-            self.talk_page.put("%s\n\n%s" % (testoattuale, self.notification2), comment = commentox, minorEdit = False)
+            pass#self.talk_page.put("%s\n\n%s" % (testoattuale, self.notification2), comment = commentox, minorEdit = False)
         elif second_text == False:
-            self.talk_page.put(testoattuale + self.head + self.notification, comment = commentox, minorEdit = False)
-        if emailPageName != None:
+            pass#self.talk_page.put(testoattuale + self.head + self.notification, comment = commentox, minorEdit = False)
+        if emailPageName != None and emailSubj != None:
             emailPage = wikipedia.Page(self.site, emailPageName)
             try:
                 emailText = emailPage.get()
             except (wikipedia.NoPage, wikipedia.IsRedirectPage):
                 return # Exit
             if self.sendemailActive:
-                sendEmail(self.luser, re.sub(r'__user-nickname__', '%s' % self.luser, emailText))            
+                text_to_send = re.sub(r'__user-nickname__', '%s' % self.luser, emailText)
+                emailClass = EmailSender(self.site, self.luser)
+                emailClass.send(emailSubj, text_to_send)            
 			
     def untaggedGenerator(self, untaggedProject, limit):
         """ Generator that yield the images without license. It's based on a tool of the toolserver. """
@@ -731,15 +784,18 @@
                     time_list.append(data_seconds)
                 older_image = returnOlderTime(time_image_list, time_list)
                 # And if the images are more than two?
+                Page_oder_image = wikipedia.ImagePage(self.site, u'Image:%s' % older_image)
                 for duplicate in duplicates: 
                     if wikipedia.ImagePage(self.site, u'%s:%s' % (self.image_namespace, duplicate)) == \
                        wikipedia.ImagePage(self.site, u'%s:%s' % (self.image_namespace, older_image)):
                         continue # the older image, not report also this as duplicate
+                    DupePage = wikipedia.ImagePage(self.site, u'Image:%s' % duplicate)
                     try:
                         DupPageText = DupePage.get()
+                        older_page_text = Page_oder_image.get()
                     except wikipedia.NoPage:
                         continue # The page doesn't exists
-                    if re.findall(dupRegex, DupPageText) == []:
+                    if re.findall(dupRegex, DupPageText) == [] and e.findall(dupRegex, older_page_text) == []:
                         wikipedia.output(u'Adding the duplicate template in the image...')
                         self.report(re.sub(r'__image__', r'%s' % older_image, dupText), duplicate,
                                     dupTalkText % (duplicate, older_image), dupTalkHead, commx = dupComment, unver = True)





More information about the Pywikipedia-l mailing list