#!/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])