Página 1 de 9

Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 09:36
por Casemir
Ya lo he comentado varias veces, pero usaré este tema para hablar del estado de esto.

Mi idea es suplir la carencia de funcionalidad de exportación de los foros de mi@ con unos programas que se encarguen de esta exportación e importación. Estos programas son dos, uno por cada una de estas operaciones.
  • Exportador que lea un hilo (o tal vez un subforo entero, o una categoría) del foro antiguo y guarde todos los mensajes con sus respectivos usuarios en un archivo.
  • Importador que lea ese archivo y cree los mismos mensajes en el nuevo foro.
Por ahora sólo he empezado con el exportador. El estado actual es un programa que lee una página del foro antiguo e imprime en pantalla el contenido del mensaje y el nombre del usuario que lo escribió. El mayor esfuerzo de esta parte ha sido desfrizar el código de mi@ para poder extraer los mensajes y los nombres de usuario.

Próximos pasos:
  • En vez de imprimir por pantalla, guardar los datos en un archivo formato JSON.
  • Leer no sólo esa página, sino también las subsiguientes para guardar todo el hilo entero.

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 09:41
por Victoria_Rain
Cojo número. Cuando sea posible, yo quiero :)

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 10:01
por Siralos
Casemir escribió: 17 Jul 2019, 09:36 Ya lo he comentado varias veces, pero usaré este tema para hablar del estado de esto.

Mi idea es suplir la carencia de funcionalidad de exportación de los foros de mi@ con unos programas que se encarguen de esta exportación e importación. Estos programas son dos, uno por cada una de estas operaciones.
  • Exportador que lea un hilo (o tal vez un subforo entero, o una categoría) del foro antiguo y guarde todos los mensajes con sus respectivos usuarios en un archivo.
  • Importador que lea ese archivo y cree los mismos mensajes en el nuevo foro.
Por ahora sólo he empezado con el exportador. El estado actual es un programa que lee una página del foro antiguo e imprime en pantalla el contenido del mensaje y el nombre del usuario que lo escribió. El mayor esfuerzo de esta parte ha sido desfrizar el código de mi@ para poder extraer los mensajes y los nombres de usuario.

Próximos pasos:
  • En vez de imprimir por pantalla, guardar los datos en un archivo formato JSON.
  • Leer no sólo esa página, sino también las subsiguientes para guardar todo el hilo entero.
Pero si esto ya lo hice yo!!!!

Código: Seleccionar todo

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from html2bbcode.parser import HTML2BBCode
import urllib2
import ssl
from bs4 import BeautifulSoup
import codecs
ssl._create_default_https_context = ssl._create_unverified_context

paginahilo = []

hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}
parser = HTML2BBCode()

#Primero recuperamos la pagina del hilo
hilo = 'https://webvampiro.mforos.com/464527/11512289-taller-de-magia/'
paginas = 1

for i in range(1,paginas+1):
    pagina = '%s?pag=%d' % (hilo,i)
    req = urllib2.Request(pagina, headers=hdr)
    page = urllib2.urlopen(req).read()
    soup = BeautifulSoup(page.decode('utf-8', 'ignore'), 'html.parser')
    mensajes = soup.find('table',id='ForoMensajes')
    for mensaje in soup.select('tr[class*="tabla_texto"]'):
        autor = mensaje.find('span',{'itemprop':'name'})
        if autor:
            nick = str(autor.contents[0])
            texto = mensaje.find("div", id=lambda value: value and value.startswith("e_msg_"))
            
            for cita in texto.findAll("div", {"class": "cite"}):
                cita.decompose()
            for cita in texto.findAll("div", {"class": "mia_cite"}):
                cita.decompose()
                
            texto = str(texto)
            print texto
                
            inicio = texto.find('google_ad_section_start -->') + 27
            fin = texto.find('<!-- google_ad_section_end')
            textofinal = texto[inicio:fin]
            textofinal = textofinal.replace('data-src=','src=')
            bbcode = parser.feed(textofinal)
            mensajefinal = '[quote=%s]%s[/quote]' % (nick,bbcode)
            paginahilo.append(mensajefinal)

with open('paginahilo.txt','w') as file:
    for mensaje in paginahilo:
        file.write(mensaje)
       

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 10:47
por Lothar
¿Y esto de la importación a lo bruto cómo deja el tema de los usuarios?

¿Cómo vais a gestionar los autores de los comentarios que no estén dados de alta como usuario en la base de datos de este foro?

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 10:57
por Siralos
Lothar escribió: 17 Jul 2019, 10:47 ¿Y esto de la importación a lo bruto cómo deja el tema de los usuarios?

¿Cómo vais a gestionar los autores de los comentarios que no estén dados de alta como usuario en la base de datos de este foro?
Ese es uno de los problemas. Yo por eso mi programa lo hice para que generara el tema como citas, no en base de datos.
Pero se podría hacer una asignación mi@<==>phpbb de usuarios.

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 11:04
por Lothar
[mention]Siralos[/mention], lo de guardarlos como citas es una buena solución.

Lo otro probablemente sea imposible, no ya porque no tenéis una base de datos que replicar, sino porque no tenéis permiso expreso de los cientos de usuarios que no están registrados aquí para meterlos en otra base de datos. Vamos, que yo en previsión a potenciales problemas con la GDPR no me metería en ese jardín.

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 13:46
por Sebastian_Leroux
Pregunto, tanto a Síralos como a Casemir. Vuestros respectivos códigos...

- ¿importan/importarán imágenes? ¿tanto las enlazadas desde url como las cargadas desde el PC (que eran las dos formas que te permitía subir fotos mi@?
- ¿importan/importarán formato de texto (tipo de letra, colores, párrafos, estilo)?
- ¿importan/importarán videos incrustados?

No quiero agobiar ni nada, no me malinterpreteis, sólo que a la hora de planificar la translación de hilos, molaría saber la potencialidad de las herramientas (se hagan al final o no). En cualquier caso os agradezco mucho el esfuerzo que estais poniendo en este miniproyecto :)

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 13:52
por Casemir
[mention]Siralos[/mention] de todas las veces que lo he mencionado, nadie me ha dicho que hubiera nada hecho. Le echaré un ojo cuando llegue a casa.

Mi idea es no crearlo como citas, sino como mensajes como si se hubiera escrito en el foro. Para eso obviamente necesito acceso a la base de datos, pero puedo ir probando en una instalación mía.

Los nombres de usuario se pueden buscar en la base de datos del foro, y los que no existan se crean nuevos.

No creo que pasar los mensajes sea problemático de cara a la GDPR, puesto que no hay información personal, al menos ninguna que pueda ser procesada como tal.

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 13:55
por Casemir
Sebastian_Leroux escribió: 17 Jul 2019, 13:46

- ¿importan/importarán imágenes? ¿tanto las enlazadas desde url como las cargadas desde el PC (que eran las dos formas que te permitía subir fotos mi@?
- ¿importan/importarán formato de texto (tipo de letra, colores, párrafos, estilo)?
- ¿importan/importarán videos incrustados?

Sí a todo menos a lo de las cargadas del pc, que tendría que investigarlo.

Re: Migración automática de hilos (en progreso)

Publicado: 17 Jul 2019, 14:15
por Lothar
Casemir escribió: 17 Jul 2019, 13:52 No creo que pasar los mensajes sea problemático de cara a la GDPR, puesto que no hay información personal, al menos ninguna que pueda ser procesada como tal.
Si vais a crear los mensajes como mensajes en base de datos necesitareis asociarlos a usuarios que a su vez necesitarán un correo electrónico y eso ya es un dato personal. Lo que no sé es si un nick sin emparejar con un email se considera un dato personal. Tal vez crear cuentas dummy para los usuarios que no estén dados de alta sea una solución...

El año pasado hubo algún problema en las NetCon 2018 relativo a la GDPR y el potencial uso de los datos por parte de la organización y aunque todo el mundo estaba actuando de buena fe, con la ley en la mano, lo que estaban haciendo no era legal.

No quiero ser toca narices, pero a mí ya me han puesto una denuncia a cuenta de la GDPR y tengo cierta paranoia con el tema :lol: (en un caso relativo a borrado de usuarios). Desde la web de la Agencia de protección de datos podéis informaros mejor: https://www.aepd.es/herramientas/informa.html

Más vale prevenir que tener que llamar a un abogado :lol: