Làm cách nào để tôi thu thập tất cả các ghi chú và nội dung nổi bật của mình từ iBooks?


14

Tôi đã có rất nhiều đánh dấu và ghi chú trong iBooks mà tôi đã đọc và muốn có thể thu thập chúng theo một định dạng dễ sử dụng và thao tác (ví dụ để viết bài và trích dẫn trích dẫn).

Ví dụ: tôi muốn một điểm nhấn như thế này

để sản xuất một cái gì đó (ví dụ: trong CSV) như

Quod tôi dinh dưỡng cho tôi số phận - thứ duy trì tôi cũng hủy hoại tôi, 14, Tamburlane Phần một và Hai, Christopher Marlowe, Anthony B. Dawson ed., Bloomsbury, https://itun.es/us/qSrZ0.l

Tôi có thể thấy cách thực hiện việc này (loại) một cách tốn công, mỗi lần một ghi chú, sử dụng tính năng "chia sẻ" của iBook (hoặc sao chép và dán) nhưng tôi không thấy cách nào để thực hiện hàng loạt ghi chú của tôi từ một cuốn sách, hoặc thậm chí tất cả các cuốn sách của tôi.

Có cách nào để thực hiện điều này, với Apple Script hoặc sử dụng Automator chẳng hạn? Hoặc có lẽ có một văn bản hoặc tệp XML chứa các ghi chú của tôi và nhấn mạnh rằng tôi có thể viết một tập lệnh (tốt nhất là bằng Python) để phân tích cú pháp.


Giải pháp, hóa ra, (như trong nhiều trường hợp), là để Apple lại phía sau và chuyển sang Kindle, nơi hỗ trợ tuyệt vời để xuất các điểm nổi bật và ghi chú.
orome

Câu trả lời:


11

iBooks không có hỗ trợ AppleScript. Các chú thích được lưu trữ trong tệp SQLite : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/.

Bạn có thể thử phân tích điều đó. Câu trả lời này cung cấp một liên kết đến Digested , đọc cơ sở dữ liệu đó và sau đó cho phép bạn xuất các chú thích của bạn sang Evernote, nhưng tôi không biết họ sẽ có định dạng nào hoặc nếu bạn muốn gây rối với Evernote.

Một giải pháp đơn giản (có thể) là mở sách trong iBooks cho iOS. Sau đó, bạn có thể gửi email các chú thích với số lượng lớn cho chính mình.

  1. Mở sách ra
  2. Nhấn "nút danh sách" để hiển thị Mục lục
  3. Chuyển sang tab Ghi chú
  4. Nhấn nút Chia sẻ
  5. Chọn Chỉnh sửa ghi chú
  6. Chọn tất cả
  7. Chia sẻ qua email.

Biên tập:

Trên thực tế, sau khi đọc một nhận xét trên reddit , dường như cũng có một cách để xuất tất cả chúng từ iBooks trên OS X:

Bạn có thể xuất ghi chú của mình trong email từ Ghi chú -> Chọn Tất cả -> Chia sẻ (bạn cần giữ ctrl trong khi nhấp chuột phải để giữ lại lựa chọn của mình). Các phần được tô sáng của bạn sẽ được sao chép vào email với các ghi chú của bạn và được định dạng độc đáo. Thật kỳ lạ, trên máy Mac, ứng dụng không quan tâm đến việc cuốn sách có được bảo vệ bản sao hay không, nó sẽ luôn sao chép phần được tô sáng. Ứng dụng iOS thực sự phân biệt đối xử mặc dù. Nếu sách của bạn được bảo vệ bản sao, thì chỉ tên chương sẽ được chia sẻ. Đó dường như là cách duy nhất để làm điều đó không may. : /

Sử dụng bàn di chuột của máy tính xách tay, tôi phải nhấn giữ ctrl + shifttrong khi nhấn vào bàn di chuột để hiển thị menu theo ngữ cảnh trong khi vẫn giữ lựa chọn.


Điều này rất hữu ích. Tôi vẫn còn cách để đưa các chú thích vào CSV hoặc hình thức thuận tiện khác. Tôi không thể tạo ra bất cứ thứ gì từ cơ sở dữ liệu SQL và thư, trong khi nhìn đẹp, không thể truy cập bằng lập trình.
orome

Có phải chỉ mình tôi hay điều này không còn có thể có trong phiên bản iBooks mới? Tôi không thấy nút Chỉnh sửa Ghi chú nữa. Trong trường hợp nào, làm cách nào để xuất tất cả các ghi chú của tôi?
sợi đốt

@incandescentman Nó dành cho tôi trong iOS 8.4.
fred

1
@incandescentman Các bước được đánh số trong câu trả lời của tôi ở trên là dành cho iOS. Phần cuối của câu trả lời Phần sau phần "Chỉnh sửa" chois của OS X. Điều đó vẫn hoạt động với tôi trên Yosemite.
fred

2
Vì vậy, bây giờ tôi đang ở el capitan, nhưng các hướng dẫn từ bình luận reddit đó vẫn hoạt động với tôi. Tôi đoán quá trình này hơi khác nhau tùy thuộc vào việc bạn đang sử dụng chuột hay bàn di chuột. Sử dụng máy tính xách tay không có bàn phím / chuột bên ngoài, sau khi tôi có các nhận xét được chọn bằng cách chọn tất cả, sau đó tôi nhấn control + shift + tap trên trackpad. Điều đó mang đến điều này: ảnh chụp màn hình . Bình luận trên các chương được chọn.
fred

3

Tôi đã viết một tập lệnh cho mục đích này để trích xuất các ghi chú từ máy Mac của bạn và xuất ra các tệp xuất Evernote, sẵn sàng để nhấp đúp. Có lẽ bạn có thể sửa đổi tập lệnh của tôi nếu nó không phù hợp với mục đích của bạn một cách chính xác.

Nói tóm lại, nó đọc các cơ sở dữ liệu SQLite trong:

... và trong trường hợp này, xuất chúng sang định dạng .enex của Evernote.

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";

3
  1. Cài đặt Trình duyệt DB miễn phí cho SQLite .
  2. Chuyển đến thư mục chú thích iBooks: ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
  3. Sao chép .sqlitetệp ở đâu đó (như Desktop) để giữ an toàn cho bản gốc.
  4. Mở tệp bằng Trình duyệt DB.
  5. Tìm một số ghi chú trong cuốn sách mục tiêu của bạn bằng cách duyệt dữ liệu.
  6. Lọc theo ZANNOTATIONASSETID để chỉ hiển thị các ghi chú trong sách đích.
  7. Sao chép và dán các chú thích bạn muốn vào Số hoặc bất kỳ ứng dụng nào bạn thích.

Apple nổi tiếng dễ sử dụng!
orome

@raxacoricofallapatorius: Nghiêm túc. Đó là một số nghiêm khắc chỉ để có được một danh sách các từ vựng tôi nhấn mạnh.
Gavin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.