iBooks에서 노트와 하이라이트를 모두 수집하려면 어떻게합니까?


14

iBook에서 읽은 많은 강조 표시와 메모를 가지고 있으며 사용하고 조작하기 쉬운 형식으로 수집하고 싶습니다 (예 : 논문 작성 및 인용문 인용).

예를 들어, 나는 이와 같은 하이라이트를 원합니다

CSV 등의 무언가를 생성

감옥 나 푸드 나 destruit -., 14, Tamburlane 부품 1, 2, 크리스토퍼 말로, 안토니 B. 도슨은 에드를 또한 나를 지탱 저를 파괴하는 것으로, 블룸 스 버리, https://itun.es/us/qSrZ0.l

iBook의 "공유"기능 (또는 복사 및 붙여 넣기)을 사용하여 한 번에 한 노트 씩이 작업을 힘들게 수행하는 방법을 볼 수 있지만 일괄 적으로 수행 할 수있는 방법은 없습니다. 책이나 내 모든 책에서 내 노트의.

예를 들어 Apple Script 또는 Automator를 사용하여이를 수행 할 수있는 방법이 있습니까? 또는 내 노트와 강조 표시가 포함 된 텍스트 또는 XML 파일이 구문 분석을 위해 스크립트를 작성하는 것이 좋습니다 (Python으로 작성하는 것이 좋습니다).


해결책은 (많은 경우와 마찬가지로) Apple을 뒤로두고 Kindle로 전환하여 강조 표시 및 메모 내보내기를 크게 지원하는 것입니다.
orome

답변:


11

iBooks는 AppleScript를 지원하지 않습니다. 주석이 SQLite는 파일에 저장됩니다 : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/.

당신은 그것을 파싱하려고 할 수 있습니다. 이 답변Digested 링크를 제공합니다. 이 데이터베이스는 데이터베이스를 읽은 다음 주석을 Evernote로 내보낼 수 있지만 어떤 형식을 가질 것인지 또는 Evernote를 망칠 지 모르겠습니다.

간단한 해결책 중 하나는 iOS 용 iBooks에서 책을 여는 것입니다. 그런 다음 주석을 대량으로 이메일로 보낼 수 있습니다.

  1. 책을여십시오
  2. "목록 버튼"을 눌러 목차를 불러옵니다.
  3. 메모 탭으로 전환
  4. 공유 버튼을 누릅니다
  5. 메모 편집을 선택하십시오.
  6. 모두 선택
  7. 이메일을 통해 공유하십시오.

편집하다:

실제로 reddit에 대한 의견을 읽은 후 OS X의 iBooks에서 모두를 내보내는 방법이있는 것 같습니다.

메모-> 모두 선택-> 공유에서 전자 메일로 메모를 내보낼 수 있습니다 (선택을 유지하려면 마우스 오른쪽 버튼을 클릭 한 상태에서 Ctrl 키를 누르고 있어야 함). 강조 표시된 부분이 메모와 함께 이메일에 복사되고 멋지게 형식화됩니다. 이상하게도 Mac에서는 응용 프로그램이 책이 복사 방지되어 있는지 여부를 신경 쓰지 않습니다. 강조 표시된 부분은 항상 복사됩니다. iOS 응용 프로그램은 실제로 차별적입니다. 책이 복사 방지 된 경우 장 이름 만 공유됩니다. 불행히도 그렇게하는 유일한 방법 인 것 같습니다. : /

랩톱의 트랙 패드를 사용 ctrl + shift하여 선택을 유지하면서 상황에 맞는 메뉴를 표시하기 위해 트랙 패드를 탭하는 동안 누르고 있어야했습니다.


이것은 매우 도움이됩니다. 주석을 CSV 또는 다른 편리한 형식으로 가져 오는 방법은 여전히 ​​멀리 있습니다. SQL 데이터베이스에서 아무것도 만들 수 없으며 메일은 멋지게 보이지만 프로그래밍 방식으로 액세스 할 수 없습니다.
orome

나만 아니면 새로운 버전의 iBook에서 더 이상 가능하지 않습니까? 더 이상 노트 수정 버튼이 표시되지 않습니다. 어떤 경우에 모든 노트를 내보내려면 어떻게해야합니까?
백열 자

@incandescentman iOS 8.4에 있습니다.
fred

1
@incandescentman 위의 답변에서 번호가 매겨진 단계는 iOS 용이었습니다. 답변의 마지막 부분 인 "편집"섹션은 OS X 용입니다. 요세미티에서는 여전히 작동합니다.
fred

2
그래서 나는 지금 엘 캐피 탄에 있지만 그 레딧 의견의 지시는 여전히 나에게 효과적입니다. 마우스를 사용하는지 트랙 패드를 사용하는지에 따라 프로세스가 약간 다릅니다. 외장 키보드 / 마우스없이 랩톱을 사용하는 경우 모두 선택을 사용하여 주석을 선택한 후 트랙 패드에서 control + shift + tap을 누릅니다. : 즉,이납니다 스크린 샷 . 여러 장의 주석이 선택되었습니다.
프레드

3

이 목적으로 Mac에서 노트를 추출하고 Evernote 내보내기 파일을 출력하여 두 번 클릭 할 수있는 스크립트를 작성했습니다. 아마도 자신의 목적에 맞지 않으면 내 스크립트를 수정할 수 있습니다.

간단히 말해 ./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary ./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotations에서 SQLite 데이터베이스를 읽습니다.

...이 경우에는 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";

3
  1. SQLite 용 무료 DB 브라우저를 설치하십시오 .
  2. iBooks 주석 폴더로 이동하십시오. ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
  3. 원본 .sqlite과 같은 안전한 곳에 파일을 복사하십시오 (예 : 데스크탑).
  4. DB Browser로 파일을 엽니 다.
  5. 데이터를 찾아 대상 책에서 메모를 찾으십시오.
  6. ZANNOTATIONASSETID로 필터링하여 대상 책에 메모 만 표시하십시오.
  7. 원하는 주석을 복사하여 Numbers 또는 원하는 응용 프로그램에 붙여 넣습니다.

애플의 유명한 사용 편의성!
orome

@raxacoricofallapatorius : 진심으로. 그것은 내가 강조한 단어 목록을 얻는 것입니다.
Gavin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.