Jai beaucoup de surlignages et de notes dans iBooks que jai lus, et jaimerais pouvoir les rassembler en un seul outil facile à utiliser et manipuler le format (par exemple pour rédiger des articles et citer des citations).
Par exemple, je « voudrais un surlignage comme celui-ci
pour produire quelque chose (par exemple, en CSV) comme
Quod me nutrit me destruit – ce qui me soutient me détruit aussi, 14 ans, Tamburlane Parts One and Two, Christopher Marlowe, Anthony B . Dawson éd., Bloomsbury, https://itun.es/us/qSrZ0.l
Je peux voir comment faire cela (en quelque sorte) laborieusement, une note à la fois, en utilisant la fonction de « partage » de liBook (ou copier et coller, bien sûr) mais je ne vois aucun moyen de le faire en gros, pour toutes mes notes dun livre, ou même tous mes livres.
Y a-t-il un moyen daccomplir cela, avec un Apple Script ou en utilisant Automator par exemple? Ou peut-être y a-t-il un texte ou fichier XML contenant mes notes et soulignant que je pourrais écrire un script (en Python, de préférence) à analyser.
Commentaires
- La solution, cest savère, (comme dans de nombreux cas), est de laisser Apple derrière et passez à Kindle, qui offre un excellent support pour lexportation des surlignages et des notes.
Réponse
iBooks ne « t ont le support AppleScript. Les annotations sont stockées dans un fichier SQLite : ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
.
Vous pouvez essayer danalyser cette. Cette réponse donne un lien vers Digested , qui lit cette base de données puis vous permet dexporter vos annotations sur Evernote, mais je ne sais pas quel format ils auront ou si vous voulez jouer avec Evernote.
Une solution (peut-être) simple serait douvrir le livre dans iBooks pour iOS. Vous pouvez ensuite envoyer les annotations en masse à vous-même.
- Ouvrir le livre
- Appuyez sur le « bouton de liste » pour afficher la table des matières
- Passer à longlet Notes
- Appuyez sur le bouton Partager
- Sélectionnez Modifier les notes
- Tout sélectionner
- Partager par e-mail.
Modifier:
En fait, après avoir lu a commentaire sur reddit , il semble y avoir un moyen de les exporter tous depuis iBooks sous OS X également:
Vous pouvez exporter vos notes dans un e-mail de Notes -> Sélectionner tout -> Partager (vous devez maintenir ctrl enfoncé pendant que vous faites un clic droit pour conserver votre sélection). Vos parties en surbrillance seront copiées dans le-mail avec vos notes et bien formatées. Étrangement, sur Mac, lapplication ne se soucie pas de savoir si le livre est protégé contre la copie – elle copiera toujours la partie en surbrillance. Lapplication iOS fait effectivement une distinction. Si votre livre est protégé contre la copie, seul le nom du chapitre sera partagé. Cela semble être la seule façon de le faire malheureusement.: /
En utilisant le trackpad de mon ordinateur portable, jai dû maintenir ctrl + shift
en appuyant sur le trackpad afin dafficher le menu contextuel tout en conservant la sélection.
Commentaires
- Ceci est très utile. Je ‘ je suis encore loin dobtenir les annotations dans un CSV ou une autre forme pratique. Je peux ‘ t faire quoi que ce soit à partir de la base de données SQL, et le courrier, bien que beau, nest ‘ t accessible par programme.
- Est-ce juste moi, ou nest-ce plus possible dans la nouvelle version diBooks? Je ne vois plus ‘ un bouton Modifier les notes. Dans quel cas, comment exporter toutes mes notes?
- @incandescentman Il ‘ est là pour moi dans iOS 8.4.
- @ incandescentman Les étapes numérotées de ma réponse ci-dessus concernaient iOS. La dernière partie de la réponse – la section après » Edit » – concerne OS X. Cela fonctionne toujours pour moi sur Yosemite.
- Donc, je ‘ m sur el capitan maintenant, mais les instructions de ce commentaire reddit fonctionnent toujours pour moi. Je suppose que le processus diffère légèrement selon que vous ‘ utilisez une souris ou un trackpad. En utilisant lordinateur portable sans clavier / souris externe, après avoir sélectionné les commentaires à laide de sélectionner tout, jappuie sur Ctrl + Maj + Appuyez sur le trackpad. Cela fait apparaître ceci: capture décran . Les commentaires des chapitres sont sélectionnés.
Réponse
Jai écrit un script à cet effet qui extrait les notes à partir de votre Mac et génère des fichiers dexportation Evernote, prêts pour un double-clic. Peut-être pourriez-vous modifier mon script sil ne répond pas précisément à vos besoins.
En bref, il lit les bases de données SQLite dans:./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary ./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotations
… et dans ce cas, les exporte au format .enex dEvernote « .
https://github.com/jorisw/ibooks2evernote/
<?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";
Réponse
- Installer gratuitement Navigateur de base de données pour SQLite .
- Accédez au dossier dannotations iBooks:
~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/
- Copiez le
.sqlite
quelque part (comme sur le bureau) pour conserver loriginal en toute sécurité. - Ouvrez le fichier avec DB Browser.
- Trouvez des notes dans votre livre cible en parcourant les données .
- Filtrez par le ZANNOTATIONASSETID pour nafficher que les notes dans le livre cible.
- Copiez et collez les annotations de votre choix dans Numbers ou dans lapplication de votre choix.
Commentaires
- Apple ‘ célèbre facilité dutilisation!
- @raxacoricofallapatorius: Sérieusement. Ce ‘ est un peu rigueur juste pour obtenir une liste des mots de vocabulaire que jai mis en évidence.