Como dividir los archivos de importación XML en WordPress

por | 8 febrero, 2014

scrip_import_image1

Si eres usuario de wordpress.com quizá en algún momento te interese dar el salto a un dominio y hosting propio. Para ello wordpress dispone de unas herramientas que nos exportan todo el contenido del blog en formato xml.

Así ya con WordPress en funcionamiento en nuestro servidor, solo tenemos que instalar y activar el plugin WordPress Importer y hacer la operación inversa, es decir importar el contenido del archivo XML y transferir todos los datos.

Fácil ¿verdad? Bueno, no tanto…es posible que llevéis unos cuantos años con vuestro blog, tengáis un montón de entradas, comentarios y material que subir, y el archivo no se pueda importar por exceso de tamaño, debido principalmente a alguna limitación de seguridad impuesta por el proveedor del hosting.

Existen varias soluciones para ese problema, pero una muy sencilla es dividirlo en partes más pequeñas, por debajo del limite de subida.

Esto se puede hacer de forma manual o de una manera mucho más cómoda con un script en python denominado splitter, creado por un usuario del foro de WordPress.org, llamado Eraac y que a mi me ha dado muy buen resultado.

#!/usr/bin/python

# This script is designed to take a wordpress xml export file and split it into some
# number of chunks (2 by default). The number of lines per chunk is determined by counting
# the number of occurences of a particular line, '\n' by default, and breaking up the
# such that each chunk has an equal number occurences of that line. The appropriate header
# and footer is added to each chunk.

import os
import sys
import math

if len(sys.argv) < 2 :
	print 'Please specify the name of wordpress export file you would like to split'
	sys.exit(0)

try :
	input_file = open(sys.argv[1], 'r')
	lines = input_file.readlines()
	(input_file_path, input_file_string) = os.path.split(sys.argv[1])
	(input_file_name, input_file_extension) = os.path.splitext(input_file_string)
except IOError :
	print 'Could not open file "%s".' % sys.argv[1]
	sys.exit(0)

number_of_chunks = max(int(sys.argv[2]), 2) if len(sys.argv) > 2 else 2
line_delimiter = '\n'

delimiter_count = 0
for line in lines :
	if line == line_delimiter :
		delimiter_count += 1

print ''
print 'File "%s" contains %s items' % (input_file_string, delimiter_count)

delimiter_count = 1.0*delimiter_count
delimiters_per_chunk = int(math.ceil(delimiter_count/number_of_chunks))

print 'Creating %s files with at most %s items each:' % (number_of_chunks, delimiters_per_chunk)

header = ""
footer = "\n\n\n"
chunk_number = 1
output_file_name = "%s_%s%s" % (input_file_name, chunk_number, input_file_extension)
output_file = open(output_file_name, 'w')
print '   Writing chunk %s to file %s...' % (chunk_number, output_file_name)

delimiter_count = 0
for line in lines :
	if line == line_delimiter : delimiter_count += 1

	if chunk_number is 1 and delimiter_count is 0 : header += line

	if delimiter_count > delimiters_per_chunk :
		output_file.write(footer)
		output_file.close()
		chunk_number += 1
		delimiter_count = 1

		output_file_name = "%s_%s%s" % (input_file_name, chunk_number, input_file_extension)
		output_file = open(output_file_name, 'w')
		print '   Writing chunk %s to file %s...' % (chunk_number, output_file_name)
		output_file.write(header)

	output_file.write(line)

output_file.close()
print 'Done!\n'

Ahora lo único que tenéis que hacer es copiar el texto del programa en un editor o un IDE, como puede ser Geany, guardarlo como splitter.py (o el nombre que se os ocurra) y darle permisos de ejecución, en las propiedades del archivo.

Finalmente para dividir nuestro archivo xml, tan solo tenemos que ejecutar esto en la terminal

./splitter.py nombre_archivo.xml n

donde n, es el número de veces que lo queréis dividir, por ej:

./splitter.py lamiradadelreplicante.xml 8

scrip_import_image2

9 pensamientos en “Como dividir los archivos de importación XML en WordPress

    1. tannhausser Autor

      Lo vi mencionado en algún lado, pero no encontré ninguna versión para linux

      Responder
    1. tannhausser Autor

      Si y por ahora bastante contento…aunque tuve algunos problemillas de novato, nada demasiado grave (bueno ayer me cargué el sistema de los comentarios durante un par de horas y hoy una plantilla que me gustaba para wordpress la dejé totalmente inservible…pero bueno de todo eso, se aprende XD)

      Responder
    1. tannhausser Autor

      Gracias amigo! Todavía me queda darle el toque visual y encontrar una plantilla de wordpress que me convenza, pero sin prisas que tampoco quiero estar mareando a la gente con cambios cada dos días xD

      Responder
  1. Erick

    Hola,
    estoy tratando de dividir un archivo xml de 6GB pero al ejecutar en cmd me muestra que no se conoce como un comando interno. Podrías ayudarme con eso??

    saludos.

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.