Como dividir los archivos de importación XML en WordPress

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

8 thoughts on “Como dividir los archivos de importación XML en WordPress”

  1. Francisco Javier de la Torre Inguanzo says:

    Cuando migré a WordPress tuve un problema similar, en aquellos días usé un programa que se llama WXR File Splitter …

    http://linuxmanr4.com/2011/11/26/migrando-de-blogsome-a-wordpress/

    Funcionó bastante bien 🙂

    1. tannhausser says:

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

  2. victorhck says:

    Xose eres un crack!!
    Entonces tienes wordpress hospedado en un hosting??

    ‘ve phun !!

    1. tannhausser says:

      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)

  3. manuti says:

    Enhorabuena por el salto de calidad.
    Y el script me lo llevo a GitHub para tenerlo a mano para el futuro.
    https://github.com/manuti/wp-split-xml

    1. tannhausser says:

      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

  4. javier says:

    gracias,por el tutorial

    1. tannhausser says:

      De nada @javier. Me alegra que te haya servidor.

Deja un comentario