J'ai écrit un script dans ce but qui extrait les notes de votre Mac et génère des fichiers d'exportation Evernote, prêts à être ouverts en double-cliquant. Peut-être pourriez-vous modifier mon script s'il ne correspond 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 d'Evernote.
https://github.com/jorisw/ibooks2evernote/
*
* Lit la bibliothèque d'annotations iBooks sur votre Mac et les exporte,
* étiquetées avec leur titre de livre respectif et importées dans
* des carnets séparés.
*
* Utilisation :
*
* Déplacez ce script en haut de votre répertoire personnel sur votre Mac.
* C'est le dossier qui porte votre nom, que le Finder ouvre si vous
* cliquez sur l'icône du Finder dans le Dock.
*
* Pour exporter vos notes vers Evernote :
*
* 1. Exécutez la commande suivante dans le Terminal :
*
* php ./ibooks2evernote.php
*
* 2. Ouvrez le dossier nouvellement créé "exports iBooks pour Evernote" depuis votre
* dossier personnel, ouvrez chaque fichier là-dedans, Evernote s'ouvrira et commencera
* à importer vos notes.
*
*/
// Emplacements de fichiers par défaut pour les données iBooks requises
define('NOM_REPERTOIRE_RESULTAT',"exports iBooks pour Evernote");
define('REPERTOIRE_BASE_DE_DONNEES_LIVRES','./Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary');
define('REPERTOIRE_BASE_DE_DONNEES_NOTES','./Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation');
if(file_exists(NOM_REPERTOIRE_RESULTAT)){
die("Le dossier de destination des exportations existe déjà sur votre Mac.\nVeuillez le déplacer pour continuer.\n");
}
// Vérifier la présence de la base de données iBooks
if(!file_exists(REPERTOIRE_BASE_DE_DONNEES_LIVRES)){
die("Désolé, je n'ai pas pu trouver de bibliothèque iBooks sur votre Mac. Avez-vous ajouté des livres là-dedans ?\n");
}else{
if(!$chemin = exec('ls '.REPERTOIRE_BASE_DE_DONNEES_LIVRES."/*.sqlite")){
die("Impossible de trouver la base de données de la bibliothèque iBooks. Avez-vous ajouté des livres là-dedans ?\n");
}else{
define('FICHIER_BASE_DE_DONNEES_LIVRES',$chemin);
}
}
// Vérifier la présence de la base de données de notes iBooks
if(!file_exists(REPERTOIRE_BASE_DE_DONNEES_NOTES)){
die("Désolé, je n'ai pas pu trouver de notes iBooks sur votre Mac. Avez-vous réellement pris des notes dans iBooks ?\n");
}else{
if(!$chemin = exec('ls '.REPERTOIRE_BASE_DE_DONNEES_NOTES."/*.sqlite")){
die("Impossible de trouver la base de données des notes iBooks. Avez-vous réellement pris des notes dans iBooks ?\n");
}else{
define('FICHIER_BASE_DE_DONNEES_NOTES',$chemin);
}
}
// Démarrer un analyseur SQLite
class MaBD extends SQLite3
{
function __construct($NomFichier)
{
$this->open($NomFichier);
}
}
// Récupérer des livres.
$livres = array();
$basedonneslivres = new MaBD(FICHIER_BASE_DE_DONNEES_LIVRES);
if(!$basedonneslivres){
echo $basedonneslivres->lastErrorMsg();
}
$res = $basedonneslivres->query("
SELECT
ZASSETID,
ZTITLE AS Titre,
ZAUTHOR AS Auteur
FROM ZEKLIBRARYASSET
WHERE ZTITLE IS NOT NULL");
while($ligne = $res->fetchArray(SQLITE3_ASSOC) ){
$livres[$ligne['ZASSETID']] = $ligne;
}
$basedonneslivres->close();
if(count($livres)==0) die("Aucun livre trouvé dans votre bibliothèque. Avez-vous ajouté des livres à iBooks ?\n");
// Récupérer les notes.
$basedonnesnotes = new MaBD(FICHIER_BASE_DE_DONNEES_NOTES);
if(!$basedonnesnotes){
echo $basedonnesnotes->lastErrorMsg();
}
$notes = array();
$res = $basedonnesnotes->query("
SELECT
ZANNOTATIONREPRESENTATIVETEXT as TexteLarge,
ZANNOTATIONSELECTEDTEXT as TexteSelectionne,
ZANNOTATIONNOTE as Note,
ZFUTUREPROOFING5 as Chapitre,
ZANNOTATIONCREATIONDATE as Cree,
ZANNOTATIONMODIFICATIONDATE as Modifie,
ZANNOTATIONASSETID
FROM ZAEANNOTATION
WHERE ZANNOTATIONSELECTEDTEXT IS NOT NULL
ORDER BY ZANNOTATIONASSETID ASC,Cree ASC");
while($ligne = $res->fetchArray(SQLITE3_ASSOC) ){
$notes[$ligne['ZANNOTAT});
}
$basedonnesnotes->close();
if(count($notes)==0) die("Aucune note trouvée dans votre bibliothèque. Avez-vous ajouté des notes à iBooks ?\n\nSi vous en avez ajouté sur d'autres appareils que ce Mac, assurez-vous d'activer la synchronisation des notes/signets iBooks sur tous les appareils.");
// Créer un nouveau répertoire et se déplacer dedans
mkdir(NOM_REPERTOIRE_RESULTAT);
chdir(NOM_REPERTOIRE_RESULTAT);
$i=0;
$j=0;
$b=0;
foreach($notes as $IDAsset => $noteslivre){
$Corps = '
';
$TitreLivre = $livres[$IDAsset]['Titre'];
$j = 0;
foreach($noteslivre as $note){
$TexteCoupe = null;
$TextAvecContexte = null;
// Passer les notes vides
if(strlen($note['TexteLarge']?$note['TexteLarge']:$note['TexteSelectionne'])==0) continue;
$TexteSurligne = $note['TexteSelectionne'];
// Limiter les titres à 255 caractères sinon Evernote les videra.
if(strlen($TexteSurligne)>255) $TexteCoupe = substr($note['TexteSelectionne'],0,254)."…";
// Si iBooks a enregistré le paragraphe entourant un texte surligné, le montrer et faire en sorte que le texte surligné soit surligné.
if(!empty($note['TexteLarge']) && $note['TexteLarge'] != $note['TexteSelectionne']){
$TextAvecContexte = str_replace($note['TexteSelectionne'],"".$note['TexteSelectionne']."",$note['TexteLarge']);
}
// Garder des compteurs pour les retours d'information en ligne de commande
if($j==0)$b++;
$i++;
$j++;
// Mettre au format ENEX d'Evernote.
$Corps .='
'.($TexteCoupe?$TexteCoupe:$TexteSurligne).'
'.($TextAvecContexte?$TextAvecContexte:$TexteSurligne).'
Du chapitre : '.$note['Chapitre'].'
'.$note['Note'].'
]]>'.strftime('%Y%m%dT%H%M%S',strtotime("2001-01-01 +". ((int)$note['Cree'])." seconds")).''.strftime('%Y%m%dT%H%M%S',strtotime("2001-01-01 +". ((int)$note['Modifie'])." seconds")).''.$TitreLivre.'.joris@jor.isdesktop.mac0';
}
$Corps .='
';
file_put_contents($TitreLivre.".enex", $Corps);
}
echo "Terminé ! Exporté $i notes dans $b fichiers d'exportation distincts dans le dossier '".NOM_REPERTOIRE_RESULTAT."'.\n\n";
1 votes
La solution, il s'avère, (comme dans de nombreux cas), est de laisser Apple de côté et de passer à Kindle, qui dispose d'un excellent support pour l'exportation des surlignages et des notes.