¿Cómo recopilo todas mis notas y aspectos destacados de iBooks?

11

Tengo muchos resaltados y notas en iBooks que he leído, y me gustaría poder recopilarlos en un formato fácil de usar y manipular (por ejemplo, para escribir artículos y citar citas).

Por ejemplo, me gustaría un punto destacado como este

para producir algo (por ejemplo, en CSV) como

  

Quod me nutrit me destruit - lo que me sostiene también me destruye, 14, Tamburlane Parts One and Two, Christopher Marlowe, Anthony B. Dawson ed., Bloomsbury, enlace

Puedo ver cómo hacer esto (más o menos) laboriosamente, una nota a la vez, usando la función de "compartir" de iBook (o copiar y pegar, por supuesto) pero no veo ninguna forma de hacerlo de forma masiva , para todas mis notas de un libro, o incluso todos mis libros.

¿Hay una manera de lograr esto, con un Apple Script o utilizando Automator por ejemplo? O tal vez haya un archivo de texto o XML que contenga mis notas y resalte que podría escribir un script (en Python, preferiblemente) para analizar.

    
pregunta orome 04.11.2014 - 00:25

3 respuestas

9

iBooks no tiene soporte para AppleScript. Las anotaciones se almacenan en un archivo SQLite : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/ .

Podrías intentar analizar eso. Esta respuesta proporciona un enlace a Digested , que lee esa base de datos y luego te permite exportar tus anotaciones a Evernote, pero no sé qué formato tendrán o si quieres meterte con Evernote.

Una solución (posiblemente) simple sería abrir el libro en iBooks para iOS. A continuación, puede enviar las anotaciones a granel a usted mismo.

  1. Abre el libro
  2. Presiona el "botón de lista" para abrir la Tabla de contenido
  3. Cambia a la pestaña de Notas
  4. Presiona el botón Compartir
  5. Seleccionar Editar Notas
  6. Seleccionar todo
  7. Compartir por correo electrónico.

Editar:

En realidad, después de leer un comentario sobre reddit , parece que hay una manera para exportarlos a todos desde iBooks en OS X también:

  

Puede exportar sus notas en un correo electrónico desde Notes - > Seleccionar todo - > Compartir (debe mantener presionada la tecla Ctrl mientras hace clic con el botón derecho para conservar su selección). Sus partes resaltadas se copiarán en el correo electrónico con sus notas y se formatearán muy bien.   Curiosamente, en la Mac, a la aplicación no le importa si el libro está protegido contra copia, siempre copiará la parte resaltada. La aplicación iOS efectivamente discrimina sin embargo. Si su libro está protegido contra copia, solo se compartirá el nombre del capítulo.   Esa parece ser la única manera de hacerlo desafortunadamente. : /

Usando el trackpad de mi computadora portátil, tuve que mantener presionada ctrl + shift mientras tocaba el trackpad para abrir el menú contextual mientras mantenía la selección.

    
respondido por el fred 04.12.2014 - 17:47
3

He escrito un script para este propósito que extrae las notas de tu Mac y genera archivos de exportación de Evernote, listos para hacer doble clic. Quizás puedas modificar mi script si no se ajusta a tus propósitos de manera precisa.

En resumen, lee las bases de datos SQLite en: ./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary ./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotations

... y en este caso, los exporta al formato .enex de Evernote.

enlace

    <?php
    /*
     *  iBooks notes to Evernote converter
     *  by Joris Witteman <[email protected]>
     *  
     *  Reads the iBooks Annotations library on your Mac and exports
     *  them, tagged with their respective book title and imported in
     *  separate notebooks.
     *
     *  Usage:
     *  
     *  Move this script to the top of your personal home directory on your Mac.
     *  This is the folder that has your name, which the Finder opens if you
     *  click on the Finder icon in the Dock.
     *
     *  To export your notes to Evernote:
     *  
     *  1. Run the following command in the Terminal:
     *
     *     php ./ibooks2evernote.php
     *    
     *  2. Open the newly created "iBooks exports for Evernote" folder from your
     *     home folder, open each file in there, Evernote will open and start 
     *     importing your notes.
     *
     */




















    // Default file locations for required iBooks data 
    define('RESULT_DIRECTORY_NAME',"iBooks exports for Evernote");
    define('BOOKS_DATABASE_DIRECTORY','./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary');
    define('NOTES_DATABASE_DIRECTORY','./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation');


    if(file_exists(RESULT_DIRECTORY_NAME)){
        die("The destination folder for the exports already exists on your Mac.\nPlease move that one out of the way before proceeding.\n");
    }

    // Verify presence of iBooks database

    if(!file_exists(BOOKS_DATABASE_DIRECTORY)){
        die("Sorry, couldn't find an iBooks Library on your Mac. Have you put any books in there?\n");
    }else{
        if(!$path = exec('ls '.BOOKS_DATABASE_DIRECTORY."/*.sqlite")){
            die("Could not find the iBooks library database. Have you put any books in there?\n");
        }else{
            define('BOOKS_DATABASE_FILE',$path);
        }
    }


    // Verify presence of iBooks notes database

    if(!file_exists(NOTES_DATABASE_DIRECTORY)){
        die("Sorry, couldn't find any iBooks notes on your Mac. Have you actually taken any notes in iBooks?\n");
    }else{
        if(!$path = exec('ls '.NOTES_DATABASE_DIRECTORY."/*.sqlite")){
            die("Could not find the iBooks notes database. Have you actually taken any notes in iBooks?\n");
        }else{
            define('NOTES_DATABASE_FILE',$path);
        }
    }


    // Fire up a SQLite parser

    class MyDB extends SQLite3
    {
      function __construct($FileName)
      {
         $this->open($FileName);
      }
    }


    // Retrieve any books.

    $books = array();

    $booksdb = new MyDB(BOOKS_DATABASE_FILE);

    if(!$booksdb){
      echo $booksdb->lastErrorMsg();
    } 

    $res = $booksdb->query("
                SELECT
                    ZASSETID,
                    ZTITLE AS Title,
                    ZAUTHOR AS Author
                FROM ZBKLIBRARYASSET
                WHERE ZTITLE IS NOT NULL");

    while($row = $res->fetchArray(SQLITE3_ASSOC) ){
        $books[$row['ZASSETID']] = $row;
    }

    $booksdb->close();

    if(count($books)==0) die("No books found in your library. Have you added any to iBooks?\n");

    // Retrieve the notes.

    $notesdb = new MyDB(NOTES_DATABASE_FILE);

    if(!$notesdb){
      echo $notesdb->lastErrorMsg();
    } 

    $notes = array();

    $res = $notesdb->query("
                SELECT
                    ZANNOTATIONREPRESENTATIVETEXT as BroaderText,
                    ZANNOTATIONSELECTEDTEXT as SelectedText,
                    ZANNOTATIONNOTE as Note,
                    ZFUTUREPROOFING5 as Chapter,
                    ZANNOTATIONCREATIONDATE as Created,
                    ZANNOTATIONMODIFICATIONDATE as Modified,
                    ZANNOTATIONASSETID
                FROM ZAEANNOTATION
                WHERE ZANNOTATIONSELECTEDTEXT IS NOT NULL
                ORDER BY ZANNOTATIONASSETID ASC,Created ASC");

    while($row = $res->fetchArray(SQLITE3_ASSOC) ){
        $notes[$row['ZANNOTATIONASSETID']][] = $row;
    }

    $notesdb->close();


    if(count($notes)==0) die("No notes found in your library. Have you added any to iBooks?\n\nIf you did on other devices than this Mac, make sure to enable iBooks notes/bookmarks syncing on all devices.");


    // Create a new directory and cd into it

    mkdir(RESULT_DIRECTORY_NAME);
    chdir(RESULT_DIRECTORY_NAME);

    $i=0;
    $j=0;
    $b=0;

    foreach($notes as $AssetID => $booknotes){

        $Body = '<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export3.dtd">
        <en-export export-date="'.@strftime('%Y%m%dT%H%M%S',time()).'" application="iBooks2Evernote" version="iBooks2Evernote Mac 0.0.1">';

        $BookTitle  = $books[$AssetID]['Title'];

        $j = 0;

        foreach($booknotes as $note){

            $CappedText = null;
            $TextWithContext = null;

            // Skip empty notes
            if(strlen($note['BroaderText']?$note['BroaderText']:$note['SelectedText'])==0) continue;

            $HighlightedText = $note['SelectedText'];

            // Cap the titles to 255 characters or Evernote will blank them.

            if(strlen($HighlightedText)>255) $CappedText = substr($note['SelectedText'],0,254)."…";

            // If iBooks stored the surrounding paragraph of a highlighted text, show it and make the highlighted text show as highlighted.
            if(!empty($note['BroaderText']) && $note['BroaderText'] != $note['SelectedText']){
                $TextWithContext = str_replace($note['SelectedText'],"<span style=\"background: yellow;\">".$note['SelectedText']."</span>",$note['BroaderText']);
            }

            // Keep some counters for commandline feedback
            if($j==0)$b++;
            $i++;
            $j++;

            // Put it in Evernote's ENEX format.
            $Body .='
    <note><title>'.($CappedText?$CappedText:$HighlightedText).'</title><content><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
    <en-note>
    <div>
    <p>'.($TextWithContext?$TextWithContext:$HighlightedText).'</p>
    <p><span style="color: rgb(169, 169, 169);font-size: 12px;">From chapter: '.$note['Chapter'].'</span></p>
    </div>
    <div>'.$note['Note'].'</div>
    </en-note>
    ]]></content><created>'.@strftime('%Y%m%dT%H%M%S',@strtotime("2001-01-01 +". ((int)$note['Created'])." seconds")).'</created><updated>'.@strftime('%Y%m%dT%H%M%S',@strtotime("2001-01-01 +". ((int)$note['Modified'])." seconds")).'</updated><tag>'.$BookTitle.'.</tag><note-attributes><author>[email protected]</author><source>desktop.mac</source><reminder-order>0</reminder-order></note-attributes></note>';

        }

        $Body .='
        </en-export>
        ';

        file_put_contents($BookTitle.".enex", $Body);
    }

    echo "Done! Exported $i notes into $b separate export files in the '".RESULT_DIRECTORY_NAME."' folder.\n\n";
    
respondido por el jorisw 22.04.2015 - 19:26
3
  1. Instale el DB Browser for SQLite gratuito.
  2. Vaya a la carpeta de anotaciones de iBooks: ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
  3. Copie el archivo .sqlite en algún lugar (como Escritorio) para mantener la caja fuerte original.
  4. Abra el archivo con DB Browser.
  5. Encuentre algunas notas en su libro de destino mediante la navegación de los datos.
  6. Filtre por la ZANNOTATIONASSETID para mostrar solo las notas en el libro de destino.
  7. Copie y pegue las anotaciones que desee en Números o en la aplicación que prefiera.
respondido por el Gavin 11.07.2016 - 23:04

Lea otras preguntas en las etiquetas