Как мне собрать все свои заметки и основные моменты из iBooks?

У меня есть много выделений и заметок в iBooks, которые я прочитал, и я хотел бы иметь возможность собрать их в одном удобном для использования и манипулируемом формате (например, для написания статей и цитирования цитат).

Например, я хотел бы выделить, как это

создать что-то (например, в CSV), например

Quod me nutrit me destruit – то, что поддерживает меня, также и разрушает меня,14, Tamburlane Parts One and Two, Christopher Marlowe, изд. Энтони Б. Доусона, Bloomsbury, https://itun.es/us/qSrZ0.l

Я вижу, как это сделать (вроде как) кропотливо, по одной заметке за раз, используя функцию «совместного использования» iBook (или копирование и вставка, конечно), но я не вижу никакого способа сделать это массово, для всех моих заметок из книги или даже всех моих книг.

Есть ли способ сделать это, например, с помощью Apple Script или Automator? Или, возможно, есть текстовый или XML-файл, содержащий мои заметки и выделение, который я мог бы написать скрипт (предпочтительно на Python) для анализа.

Оказывается, решение (как и во многих случаях) состоит в том, чтобы оставить Apple и перейти на Kindle, который отлично поддерживает экспорт основных моментов и заметок.

Ответы (4)

iBooks не поддерживает AppleScript. Аннотации хранятся в файле SQLite : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/.

Вы можете попытаться разобрать это. Этот ответ дает ссылку на Digested , которая считывает эту базу данных, а затем позволяет вам экспортировать ваши аннотации в Evernote, но я не знаю, какое у них форматирование или хотите ли вы возиться с Evernote.

Одним (возможно) простым решением было бы открыть книгу в iBooks для iOS. Затем вы можете отправить аннотации по электронной почте самому себе.

  1. Открыть книгу
  2. Нажмите «кнопку списка», чтобы открыть оглавление.
  3. Перейдите на вкладку «Примечания».
  4. Нажмите кнопку «Поделиться».
  5. Выберите «Редактировать примечания».
  6. Выбрать все
  7. Поделитесь по электронной почте.

Редактировать:

На самом деле, после прочтения комментария на Reddit , похоже, есть способ экспортировать их все из iBooks в OS X:

Вы можете экспортировать свои заметки по электронной почте из «Заметки» -> «Выбрать все» -> «Поделиться» (вам нужно удерживать Ctrl, когда вы щелкаете правой кнопкой мыши, чтобы сохранить свой выбор). Ваши выделенные части будут скопированы в электронное письмо с вашими заметками и красиво отформатированы. Как ни странно, на Mac приложение не заботится о том, защищена ли книга от копирования — оно всегда будет копировать выделенную часть. Однако приложение для iOS действительно различает. Если ваша книга защищена от копирования, то будет опубликовано только название главы. Кажется, это единственный способ сделать это, к сожалению. :/

Используя трекпад моего ноутбука, мне пришлось удерживать нажатой ctrl + shift, нажимая на трекпад, чтобы вызвать контекстное меню, сохраняя при этом выбор.

Это очень полезно. Я все еще далек от преобразования аннотаций в CSV или другую удобную форму. Я ничего не могу сделать из базы данных SQL, а почта, хотя и красивая, программно недоступна.
Мне кажется, или в новой версии iBooks это уже невозможно? Я больше не вижу кнопку «Редактировать заметки». В таком случае, как мне экспортировать все мои заметки?
@incandescentman Это доступно для меня в iOS 8.4.
@fred Я имею в виду OSX Yosemite
@incandescentman Пронумерованные шаги в моем ответе выше были для iOS. Последняя часть ответа — раздел после «Редактировать» — предназначена для OS X. Это все еще работает для меня на Yosemite.
@fred (1) Я могу выбирать заметки только по одной главе за раз, я должен делать это отдельно для каждой главы; (2) У меня нет опции «Поделиться», только «Копировать», а также «Facebook», «Twitter» и «Сообщения». Скриншот
Итак, я сейчас на el capitan, но указания из этого комментария на Reddit все еще работают для меня. Я предполагаю, что процесс немного отличается в зависимости от того, используете ли вы мышь или трекпад. Используя ноутбук без внешней клавиатуры / мыши, после того, как я выбрал комментарии с помощью «Выбрать все», я нажимаю «control» + «shift» + «тап» на трекпаде. Это вызывает это: скриншот . Комментарии по главам выбираются.
Ага, понятно. Вы должны вручную щелкнуть, чтобы развернуть ▶ для каждого заголовка главы, чтобы сначала отобразить примечания, прежде чем выбрать все. Тогда это работает. Спасибо!
По какой-то причине опция «Почта» недоступна в моем контекстном меню. Может быть, это потому, что «Почта» не является почтовым приложением по умолчанию на моем Mac. Думаю, мне придется прибегнуть к iBooks на iOS, чтобы сделать экспорт.
  1. Установите бесплатный браузер БД для SQLite .
  2. Перейдите в папку аннотаций iBooks:~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
  3. Скопируйте .sqliteфайл куда-нибудь (например, на рабочий стол), чтобы сохранить оригинал в безопасности.
  4. Откройте файл с помощью браузера БД.
  5. Найдите несколько заметок в целевой книге, просмотрев данные.
  6. Отфильтруйте по ZANNOTATIONASSETID, чтобы отобразить только заметки в целевой книге.
  7. Скопируйте и вставьте нужные аннотации в Numbers или любое другое приложение, которое вы предпочитаете.
Знаменитая простота использования Apple!
@raxacoricofallapatorius: Серьезно. Это какая-то чепуха, чтобы получить список слов из словаря, которые я выделил.

Для этой цели я написал скрипт, который извлекает заметки с вашего Mac и выводит файлы экспорта Evernote, готовые для двойного щелчка. Возможно, вы могли бы изменить мой сценарий, если он не соответствует вашим целям.

Короче говоря, он читает базы данных SQLite в: ./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary ./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotations.

... и в этом случае экспортирует их в формат Evernote .enex.

https://github.com/jorisw/ibooks2evernote/

    <?php
    /*
     *  iBooks notes to Evernote converter
     *  by Joris Witteman <joris@jor.is>
     *  
     *  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>joris@jor.is</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";

У меня тоже была эта проблема, и я создал небольшой инструмент, который берет все заметки и основные моменты из iBooks и экспортирует их в файлы Markdown.

Установка

ibooks-notes-exporter доступен в OS X (процессоры Intel и M-серии). Он распространяется через менеджер пакетов homebrew .

Запустите эти команды в своем терминале


> brew tap 57uff3r/mac-apps
> brew install 57uff3r/mac-apps/ibooks_notes_exporter

Применение

Прежде всего, вы должны получить список всех ваших книг с примечаниями и основными моментами.

❯ ibooks_notes_exporter books
+----------------------------------+-----------------+----------------------------------------------------------------------------------+
| SINGLEBOOK ID                    | NUMBER OF NOTES | TITLE AND AUTHOR                                                                 |
+----------------------------------+-----------------+----------------------------------------------------------------------------------+
| 4BAE5DA3C95788753173EAE8C63E6034 |               1 | Lorem impsum — John Doe                                                          |
| 7C3FA4F94689D97444BB4E0FD97D7197 |              54 | Hamlet — william shakespeare                                                     |
+----------------------------------+-----------------+----------------------------------------------------------------------------------+

И тогда вы можете экспортировать все свои заметки из книги в файл уценки.

❯ ibooks_notes_exporter export 4BAE5DA3C95788753173EAE8C63E6034 > ./LoremImpsum.md

Я также опубликовал исходный код на GitHub .