3 votos

Abrir archivos .memo desde la aplicación memo por defecto de Samsung

Tengo .memo archivos en mi PC desde la aplicación de notas por defecto en un teléfono Samsung de propiedad anterior. Cuando se abren en el Bloc de notas, los archivos no contienen texto plano. ¿Cómo puedo recuperar el contenido de las notas?

3voto

armandfp Puntos 700

Escribí mi propio convertidor "memo2txt" en Python. Aquí está el script (primero tendrás que instalar las librerías de Python usando pip ):

import os
import re
import glob
import zipfile
import xmltodict
from datetime import datetime

MEMO_PATH = r'i:\MY\PROGRAMMING\AndroidMemoExtracter\MemoFiles'
RESULTS_PATH = r'i:\MY\PROGRAMMING\AndroidMemoExtracter\Results'

memos = glob.glob(MEMO_PATH + '\*.memo')

for i, memo in enumerate(memos):
    print('{}/{} - {}'.format(i+1, len(memos), memo))

    try:
        # Extract *.memo file and read the content
        archive = zipfile.ZipFile(memo, 'r')
        memo_content = archive.read('memo_content.xml').decode('utf-8')
        cleanr = re.compile('&.*?;')
        memo_content = re.sub(cleanr, '', memo_content)
        memo_content = xmltodict.parse(memo_content)
        text = memo_content['memo']['contents']['content']

        # Generate filename from memo timestamp
        timestamp = int(memo_content['memo']['header']['meta'][2]['@createdTime'][:10])
        date = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H-%M-%S')
        file_name = '{}.txt'.format(date)

        # Save file as a *.txt
        with open(os.path.join(RESULTS_PATH, file_name), 'w', encoding='utf-8') as file:
            file.write(text)

    except zipfile.BadZipFile:
        continue

2voto

beeshyams Puntos 82

Utilizando el reproductor VLC o descargando Samsung Note para PC como se ha mencionado aquí

Métodos relacionados mencionados aquí para la exportación - ver Respuesta de Husni a la solución del archivo zip y otros

¿Cómo puedo exportar los memos de Samsung?

2voto

BNA Puntos 53

inspirado por beeshyams, aquí está mi versión ...

en mi Samsung J3, los memos están en una unidad MTP en algún lugar como ...

SAMSUNG Android/Phone/ShareMemo/*.memo

el xml de origen se parece a esto:

<?xml version="1.0" encoding="UTF-8"?>
<memo Version="1.0">
<header>
<meta title="==PROGRAMMING=="/>
<meta favourite="false"/>
<meta uuid="85f94ab2-77a8-XXXXXXXXXXXXXXX"/>
<meta createdTime="1551038092051"/>
</header>
<contents>
<content>&lt;p value="memo2" &gt;=====&lt;/p&gt;&lt;p&gt;https://medium.freecodecamp.org/&lt;/p&gt;&lt;p&gt;=====&lt;/p&gt;
</content>
</contents>
</memo>

Ejecuto esta transformación xslt sobre ella...

 <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

     <xsl:variable name="s1">
      <!--  https://float-middle.com/how-to-put-cdata-into-script-tag-in-xslt/  -->
      <![CDATA[
       //https://stackoverflow.com/questions/847185/convert-a-unix-timestamp-to-time-in-javascript
       //https://stackoverflow.com/questions/5292372/how-to-pass-parameters-to-a-script-tag
       var ts = document.currentScript.getAttribute('timestamp')
       document.write(""+ts+":   "+Date(ts).toLocaleString());
     ]]>
     </xsl:variable>

     <xsl:template match="/">
       <html lang="en_UK">
          <head>
           <style>
            body {background-color: powderblue;}
            #title {color: red; font-size: 300%;}
            .content {color: green;}
          </style>
          <meta charset="UTF-8"/>
           <title>
            <xsl:apply-templates select="memo/header/meta[@title]"/>
           </title>
         </head>
         <body>

          <span id='title'>
           <xsl:apply-templates select="memo/header/meta[@title]"/>
          </span>

          <xsl:text disable-output-escaping="yes">
           <![CDATA[&nbsp;&mdash;&nbsp;]]>
          </xsl:text>

          <span id='created'>
           <xsl:apply-templates select="memo/header/meta[@createdTime]"/>
          </span>

          <div class='content'>
           <xsl:apply-templates select="memo/contents"/>
          </div>

         </body>
       </html>
     </xsl:template>

     <!-- ============================================ -->

     <xsl:template match="memo/header/meta[@title]">
      <xsl:apply-templates select="@title"/>
     </xsl:template>

     <xsl:template match="@title">
      <xsl:value-of select="."/>
      <xsl:if test="string-length(.)=0">...</xsl:if>
     </xsl:template>

     <!-- ============================================ -->

     <xsl:template match="memo/header/meta[@createdTime]">
      <script type="text/javascript">
       <xsl:attribute name="timestamp">
        <xsl:value-of select="@createdTime" />
       </xsl:attribute>

       <!--  https://float-middle.com/how-to-put-cdata-into-script-tag-in-xslt/ -->
       <xsl:text disable-output-escaping="yes">
        /* &lt;![CDATA[ */
       </xsl:text>
         <xsl:value-of select="$s1" disable-output-escaping="yes"/>
       <xsl:text disable-output-escaping="yes">
        /* ]]&gt; */
       </xsl:text>
      </script>
     </xsl:template>

     <xsl:template match="@createdTime">
      <xsl:value-of select="."/>
     </xsl:template>

     <!-- ============================================ -->

     <xsl:template match="memo/contents">
      <xsl:value-of select="content" disable-output-escaping="yes"/>
      <xsl:if test="string-length(content)=0">...</xsl:if>
     </xsl:template>

 </xsl:stylesheet>

utilizando lxml de python..

import os
import glob
import zipfile
from lxml import etree

import sys

if len(sys.argv) < 3:
    print('python3 convert_memos.py <memo-dir>  <html-dir>')
    sys.exit()

MEMO_PATH = os.path.join(sys.argv[1], '')
HTML_PATH = os.path.join(sys.argv[2], '')

xslt_src = '''[see xml above]'''

memos = glob.glob(MEMO_PATH + '*.memo')

for i, memo in enumerate(memos):

    try:

        archive = zipfile.ZipFile(memo, 'r')
        src = archive.read('memo_content.xml').decode('utf-8')

        xslt = etree.XML(xslt_src)
        xml = etree.XML(str.encode(src))
        transform = etree.XSLT(xslt)
        result = transform(xml)
        root = result.getroot()

        html = etree.tostring(root, pretty_print=True).decode('utf-8')

        filename = '{}.html'.format(os.path.basename(memo))
        filename = os.path.join(HTML_PATH, filename)

        with open(filename, 'w', encoding='utf-8') as file:
            file.write('<!DOCTYPE html>')
            file.write(html)

    except Exception as e:
        print(e)

sale algo así como..

<!DOCTYPE html>
<html lang="en_UK">
  <head>
    <style>
            body {background-color: powderblue;}
            #title {color: red; font-size: 300%;}
            .content {color: green;}
          </style>
    <meta charset="UTF-8"/>
    <title>==PROGRAMMING==</title>
  </head>
  <body>
   <span id="title">
        ==PROGRAMMING==
   </span>
   &nbsp;&mdash;&nbsp;
   <span id="created">
    <script type="text/javascript" timestamp="1551038092051">
     /* <![CDATA[ */
      var ts = document.currentScript.getAttribute('timestamp')
      document.write(""+ts+":   "+Date(ts).toLocaleString());
     /* ]]> */
    </script>
   </span>
   <div class="content">
       <p value="memo2" >=====</p>
       <p>https://medium.freecodecamp.org/</p>
       <p>=====</p>
   </div>
 </body>
</html>

2voto

Estoy bifurcando la versión de @Alderven para importar los archivos multimedia, y convertir los emojis a caracteres UTF-8 adecuados. De esta manera son fáciles de importar a Notable (en el escritorio de Linux) y sincronizar de nuevo a Markor (en Android). He publicado esto en mi Github https://github.com/morciej/memo2html -- no dude en utilizarlo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X