Usuario:Chewie/cuenta creaciones.py

Este script recibe un dump de la tabla de metadatos de revisiones comprimido en gzip y crea un diccionario que mapea un usuario con la lista de artículos que ha creado.

import re
import gzip
import sys

# Lo que debe recibir este script es un dump en XML de la tabla stub-meta-history,
# comprimido con gzip
f = gzip.open(sys.argv[1])

title_pattern = re.compile('<title>(.*)</title>')
username_pattern = re.compile('<username>(.*)</username>')
ip_pattern = re.compile('<ip>(.*)</ip>')

# Este diccionario acabará teniendo un usuario (o IP) como índice y una lista
# de artículos como valor
user_creations = {}

title_found = False
for line in f:
    title = re.findall(title_pattern, line)
    if title:
        title_string = title[0]
        title_found = True
    elif title_found:
        username = re.findall(username_pattern, line)
        if username:
            username_string = username[0]
            if user_creations.has_key(username_string):
                user_creations[username_string].append(title_string)
            else:
                user_creations[username_string] = [title_string,]
            title_found = False
        else:
            ip = re.findall(ip_pattern, line)
            if ip:
                ip_string = ip[0]
                if user_creations.has_key(ip_string):
                    user_creations[ip_string].append(title_string)
                else:
                    user_creations[ip_string] = [title_string,]
                title_found = False

f.close()

# Aquí habría que hacer algo útil con user_creations