Herramienta conversión Pivot X a PM Wiki

Herramienta que me ha permitido recuperar mi antiguo BLOG PivotX, olvidado en un directorio del servidor, sin uso y lleno de polvo. De nuevo jugando con python para seguir experimentando.

  1.  
  2. import os
  3. import re
  4.  
  5. def listar_ficheros(directorio):
  6.     """Devuelve una lista con todos los archivos de un directorio y sus subdirectorios."""
  7.     lista_ficheros = []
  8.     for raiz, _, archivos in os.walk(directorio):
  9.         for archivo in archivos:
  10.             lista_ficheros.append(os.path.join(raiz, archivo))  # Ruta completa del archivo
  11.     return lista_ficheros
  12.  
  13. def sanitizar(p_str):
  14.     cx = p_str  
  15.     cx = cx.replace('</p>',"")
  16.     cx = cx.replace('
  17.  
  18. ',r'%0a')
  19.     cx = cx.replace('\\
  20. ',r'%0a')
  21.     cx = cx.replace('
  22.  
  23. ! ','!')    
  24.     cx = cx.replace('<h2>','!!')
  25.     cx = cx.replace('<h3>','!!!')
  26.     cx = cx.replace('<h4>','!!!!')  
  27.     cx = cx.replace('
  28. ','')    
  29.     cx = cx.replace('</h2>','')
  30.     cx = cx.replace('</h3>','')
  31.     cx = cx.replace('</h4>','')  
  32.     cx = cx.replace('
  33.  
  34. ! ','!')    
  35.     cx = cx.replace('<H2>','!!')
  36.     cx = cx.replace('<H3>','!!!')
  37.     cx = cx.replace('<H4>','!!!!')  
  38.     cx = cx.replace('
  39. ','')    
  40.     cx = cx.replace('</H2>','')
  41.     cx = cx.replace('</H3>','')
  42.     cx = cx.replace('</H4>','')          
  43.     cx = cx.replace(''''',"'''")
  44.    cx = cx.replace(''''',"'''")
  45.    cx = cx.replace(''''',"'''")
  46.     cx = cx.replace(''''',"'''")
  47.    cx = cx.replace('''',"''")
  48.    cx = cx.replace('''',"''")  
  49.    cx = cx.replace(';s:8:"category','')
  50.    cx = cx.replace(r'\n',r'%0a')  
  51.  
  52.    pattern = r'<img[^>]*src=["\'](.*?)["\'][^>]*>'
  53.     cx = re.sub(pattern, r" %width=50pct%\1 ", cx)  
  54.     cx = cx.replace('../images/','Path:/uploads/BLOG/')
  55.  
  56.     pattern = r'<a\s+href="([^"]+)"[^>]*>(.*?)</a>'
  57.     cx = re.sub(pattern, r'[[\1|\2]]', cx)
  58.  
  59.     return cx
  60.  
  61. def open_file(p_name):
  62.     with open(p_name, "r", encoding="windows-1250") as archivo:
  63.         return archivo.readlines()
  64.  
  65.     fin.close()
  66.     return lineas
  67.  
  68.  
  69. files = listar_ficheros('pivot/')
  70. fmain = open('pm/BLOG.Main',"w",encoding='utf-8')
  71. fmaind = 'version=pmwiki-2.4.4 ordered=1 urlencoded=1' + os.linesep + \
  72.          'agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0' + os.linesep + \
  73.          'charset=UTF-8' + os.linesep + \
  74.          'name=BLOG.Main' + os.linesep + \
  75.          'text=(:title Listado de publicaciones:)'
  76. lista = []
  77. fmainl = ''
  78.  
  79. files.sort( )
  80. for file in files:
  81.     data = "".join( open_file(file) )
  82.     patron = r's:\d+:"([\s\S]+?)";'
  83.     resultado = re.findall(patron,data)
  84.     ax = 0
  85.     data_fecha = ''
  86.     data_body  = ''
  87.     data_intro = ''
  88.     data_title = ''
  89.     for ii in resultado:
  90.         if ii == 'publish_date':
  91.             data_fecha = resultado[ax+1]
  92.         if ii == 'body':
  93.             data_body  = resultado[ax+1]
  94.         if ii == 'title':
  95.            data_title  = resultado[ax+1]
  96.            data_title = data_title.replace('";s:8:"subtitle','')
  97.         if ii == 'introduction':
  98.            data_intro  = resultado[ax+1]
  99.  
  100.         ax += 1
  101.  
  102. #Ya tengo todo formado
  103.     fname = 'BLOG.' + data_fecha.replace('-','')
  104.     if data_fecha == '':
  105.         fname = 'BLOG.ParaRevisar'+file.replace('pivot/','')    
  106.         fname = fname.replace(r'.php','')
  107.     if data_title == '':
  108.         data_title = fname
  109.     fdata = 'version=pmwiki-2.4.4 ordered=1 urlencoded=1' + os.linesep + \
  110.             'agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0' + os.linesep + \
  111.             'charset=UTF-8' + os.linesep + \
  112.             'name=' + fname  + os.linesep + \
  113.             'text=(:title '+ data_title +':)'
  114.     lista.append( '[[' + fname +' | '+ data_fecha +' '+ data_title +']]')
  115. #    fmainl = fmainl + os.linesep + '[[' + fname +' | '+ data_fecha +' '+ data_title +']]'
  116.     final = os.linesep + os.linesep + '----' + os.linesep + 'Publicado en ' + data_fecha + os.linesep + 'Referencia: ' + file
  117.     data_body = data_intro + data_body + final
  118.  
  119.     data_body = sanitizar(data_body)
  120.  
  121.     data_body = r'%0a' + data_body.replace(os.linesep,r'%0a')
  122.     fdata = fdata + data_body
  123.  
  124.     fout = open('pm/'+fname,"w",encoding="utf-8")  
  125.     fout.write(fdata)
  126.     fout.close()
  127.  
  128. #    break
  129. lista.sort()
  130. for al in lista:
  131.     fmainl = fmainl + os.linesep + al
  132. fmainl = fmainl.replace(os.linesep,r'%0a')
  133. fmain.write(fmaind+fmainl)
  134. fmain.close()