#!/usr/bin/python # ContribChecker 1.0 command-line version # Created 12/16/2009 # Requires mwclient library 0.63b or later from sourceforge # Requires an active Internet connection # Available for re-use and modification without restriction # ========================================================= # Description: # A command-line Python script which will pull all contributions # by a given editor of English Wikipedia to a specific article # and output them as sequential tab-delimited rows. # # Usage (assuming you name this file 'check'): # check <username> <page> # # Parameters: # <username>: A Wikipedia user name (case-sensitive) # <page>: A page name from English Wikipedia (en.wikipedia.org) # Usernames and page names are case-sensitive # On UNIX-type systems, multi-word page names must be passed in single quotes # # Example: # check MastCell 'Acute myeloid leukemia' # # Output: # Output will be in sequential tab-delimited rows, one edit per row, in the form: # <timestamp>TAB<username>TAB<edit summary> (if any) # ---------------------------------------------------------------------------------- # Imports import mwclient import sys # Function: checkContribs # Parameters: userName (string), pageName (string) # Return value: None # ------------------------------------------------ def checkContribs(userName, pageName): wpHandle = mwclient.Site('en.wikipedia.org') wpPage = wpHandle.Pages[pageName] revs = wpPage.revisions(user=userName) numHits = listRevs(revs) # Finish up by printing number of edits found... if (numHits == 0): print "No edits to " + pageName + " by " + userName + " were found." else: print "Found " + str(numHits) + " edits to " + pageName + " by " + userName + "." # Function: listRevs # Parameters: revList (list of revision objects) # Return value: Number of edits in revList (int) # -------------------------------------------------- def listRevs(revlist): numRevs = 0 for rev in revlist: timestamp = rev.get(u'timestamp') timeStr = '{0}-{1}-{2} {3}:{4}'.format(timestamp.tm_mon, timestamp.tm_mday, timestamp.tm_year, str(timestamp.tm_hour).zfill(2), str(timestamp.tm_min).zfill(2)) if (rev.get(u'comment') != None): edsumStr = rev.get(u'comment') else: edsumStr = "" userStr = rev.get(u'user') printOneRev(timeStr, userStr, edsumStr) numRevs += 1 return numRevs # Return number of hits # Function: printOneRev # Parameters: timeString (string), userString (string), editsumString (string) # Return value: None # Notes: Separated this out mostly so that it's easy to adjust the output format if desired # ----------------------------------------------------------------------------------------- def printOneRev(timeString, userString, editsumString): print timeString + "\t" + userString + "\t" + editsumString # Function: printProperUsage # Parameters: None # Return value: None # Notes: Bare-bones "help" message if an incorrect number of command-line arguments are supplied # ---------------------------------------------------------------------------------------------- def printProperUsage(): print "Welcome to ContribChecker." print "This utility will check a user's contributions to a given page on English Wikipedia." print "------------------------------------------------------------------------------------" print "Proper usage: ContribChecker <username> <page>" # ------------ # MAIN PROGRAM # ------------ if (len(sys.argv) != 3): printProperUsage() else: checkContribs(sys.argv[1], sys.argv[2])