Tüm notlarımı ve vurgularımı iBooks'tan nasıl toplayabilirim?


15

Okuduğum iBooks'ta çok fazla vurgulama ve not aldım ve bunları kullanımı ve kullanımı kolay bir formatta (örneğin kağıt yazma ve alıntılar için) toplamak istiyorum.

Örneğin, böyle bir vurgu isterim

gibi bir şey üretmek (örneğin, CSV'de)

Beni beslemem için beni besle - beni ayakta tutan da beni yok ediyor, 14, Tamburlane Bölüm Bir ve İki, Christopher Marlowe, Anthony B. Dawson ed., Bloomsbury, https://itun.es/us/qSrZ0.l

İBook'un "paylaşım" özelliğini kullanarak (veya elbette kopyalayıp yapıştırarak) bunu her seferinde zahmetli bir şekilde nasıl yapacağımı görebiliyorum, ancak toplu olarak yapmanın herhangi bir yolunu görmüyorum, herkes için bir kitaptaki notlarımın, hatta tüm kitaplarımın.

Bunu bir Apple Script veya Automator kullanarak başarmanın bir yolu var mı? Veya notlarımı içeren ve ayrıştırmak için bir komut dosyası (tercihen Python'da) yazabileceğimi vurgulayan bir metin veya XML dosyası vardır.


Çözüm, ortaya çıkıyor (birçok durumda olduğu gibi), Apple'ı geride bırakmak ve vurguları ve notları dışa aktarmak için büyük desteği olan Kindle'a geçmek.
orome

Yanıtlar:


11

iBooks'un AppleScript desteği yoktur. Ek açıklamaları SQLite dosyada saklanır : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/.

Bunu ayrıştırmayı deneyebilirsiniz. Bu yanıt , bu veritabanını okuyan ve ek açıklamalarınızı Evernote'a dışa aktarmanıza izin veren Digested'e bir bağlantı verir , ancak hangi biçimlendirmeye sahip olacaklarını veya Evernote ile uğraşmak istiyorsanız bilmiyorum.

(Muhtemelen) basit bir çözüm, kitabı iOS için iBooks'ta açmak olacaktır. Daha sonra ek açıklamaları toplu olarak kendinize e-postayla gönderebilirsiniz.

  1. Kitabı aç
  2. İçindekiler tablosunu açmak için "liste düğmesine" basın
  3. Notlar sekmesine geçme
  4. Paylaş düğmesine basın
  5. Notları Düzenle'yi seçin
  6. Hepsini seç
  7. E-mail ile paylaş.

Düzenle:

Aslında, reddit hakkında bir yorum okuduktan sonra , hepsini OS X'teki iBooks'tan dışa aktarmanın bir yolu var gibi görünüyor:

Notlarınızı bir e-postada Notlar -> Tümünü Seç -> Paylaş'tan dışa aktarabilirsiniz (seçiminizi korumak için sağ tıklarken ctrl tuşunu basılı tutmanız gerekir). Vurgulanan bölümleriniz notlarınızla birlikte e-postaya kopyalanacak ve güzel bir şekilde biçimlendirilecektir. Garip bir şekilde, Mac'te uygulama kitabın kopya korumalı olup olmadığını umursamıyor - her zaman vurgulanan kısmı kopyalar. İOS uygulaması gerçekten de ayrımcılık yapıyor. Kitabınız kopyalamaya karşı korumalıysa, yalnızca bölüm adı paylaşılacaktır. Ne yazık ki bunu yapmanın tek yolu gibi görünüyor. : /

Dizüstü bilgisayarımın izleme dörtgenini kullanarak ctrl + shift, içeriği korurken içerik menüsünü açmak için izleme dörtgenine dokunurken basılı tutmak zorunda kaldım .


Bu çok yardımcı. Ek açıklamaları bir CSV veya başka bir uygun forma sokmaktan hala bir yolum yok. SQL veritabanından hiçbir şey yapamıyorum ve güzel görünümlü iken posta programlı olarak erişilemiyor.
orome

Sadece ben mi, yoksa iBooks'un yeni sürümünde bu artık mümkün değil mi? Artık Notları Düzenle düğmesini görmüyorum. Bu durumda, tüm notlarımı nasıl dışa aktarırım?
incandescentman

@incandescentman iOS 8.4'te benim için orada.
fred

1
@incandescentman Yukarıdaki cevabımdaki numaralı adımlar iOS içindi. Cevabın son bölümü — "Düzenle" den sonraki bölüm - OS X için. Bu benim için hala Yosemite'de çalışıyor.
fred

2
Yani, şimdi el capitan'dayım, ama bu reddit yorumundan gelen talimatlar hala benim için çalışıyor. Sanırım bu işlem, bir fare veya izleme paneli kullanmanıza bağlı olarak biraz farklılık gösterir. Harici klavye / fare olmadan dizüstü bilgisayarı kullanarak, tümünü seç kullanılarak yorumları seçtikten sonra, izleme dörtgenindeki control + shift + tap tuşlarına basarım. Bu getiriyor: ekran görüntüsü . Bölümler arasındaki yorumlar seçilir.
fred

3

Bu amaçla Mac'inizden notları alan ve Evernote dışa aktarma dosyalarını çıktı alan, çift tıklamaya hazır bir komut dosyası yazdım. Belki senaryonu amaçlarına tam olarak uymuyorsa değiştirebilirsin.

Kısacası, SQLite veritabanlarını şurada okur: ./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary ./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotations

... ve bu durumda, bunları Evernote'un .enex biçimine dışa aktarır.

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. SQLite için ücretsiz DB Tarayıcısını kurun .
  2. İBooks ek açıklamalar klasörüne gidin: ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
  3. .sqliteOrijinali güvende tutmak için dosyayı bir yere (Masaüstü gibi) kopyalayın .
  4. Dosyayı DB Tarayıcısı ile açın.
  5. Verilere göz atarak hedef kitabınızdaki bazı notları bulun.
  6. Yalnızca hedef kitaptaki notları göstermek için ZANNOTATIONASSETID öğesine göre filtreleyin.
  7. İstediğiniz ek açıklamaları kopyalayıp Sayılar'a veya istediğiniz herhangi bir uygulamaya yapıştırın.

Apple'ın ünlü kullanım kolaylığı!
orome

@raxacoricofallapatorius: Cidden. Vurguladığım kelime kelimelerinin bir listesini almak için bu biraz serttir.
Gavin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.