Created
August 10, 2012 16:13
-
-
Save iamtabu/3315299 to your computer and use it in GitHub Desktop.
Exports from Evernote using HTML to DEVONthink
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* | |
http://veritrope.com | |
EVERNOTE TO DEVONTHINK EXPORTER | |
VERSION 1.63 | |
April 12, 2012 | |
// TERMS OF USE: | |
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. | |
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. | |
// LIKE THIS SCRIPT? | |
If this AppleScript is helpful to you, please show your support here: | |
http://veritrope.com/support | |
// SCRIPT INFORMATION AND UPDATE PAGE | |
-- Project Page: http://veritrope.com/code/evernote-to-devonthink-exporter/ | |
-- FastScripts (Optional): http://bit.ly/FastScripts | |
// INSTALLATION: | |
-- You can save this script to /Library/Scripts/ and launch it using the system-wide script menu from the Mac OS X menu bar. (The script menu can be activated using the AppleScript Utility application). | |
-- To use, highlight the note(s) you want to move from Evernote and run this script file; | |
-- The "User Switches" below allow you to customize the way this script works. | |
(Optional but recommended) | |
Easier Keyboard Shortcut with FastScripts | |
-- Download and Install FastScripts here: | |
-- http://bit.ly/FastScripts | |
// CHANGELOG: | |
* 1.63 FIX TO MAKE FILE NAME FIX WORK WITH VERITROPE "OPEN IN SCRIPT EDITOR" BUTTON | |
* 1.62 FIXED PDF/TAG ISSUE | |
* 1.61 ADDED NOTE LINKS | |
* 1.60 TEMPORARY REMOVAL OF GROWL | |
* 1.51 ADD CREATION DATE / MODIFICATION DATE TO PDF SUBROUTINE | |
* 1.50 MAINTENANCE RELEASE: BUGFIXES, CHANGES TO USE EVERNOTE'S NATIVE SELECTION, NEW APPROACH TO SLASHES AND COLONS IN NOTE NAMES | |
* 1.40 (Internal Test) | |
* 1.30 FIX TO ALLOW SCRIPT TO RUN FROM DEVONTHINK'S INTERNAL SCRIPT MENU, ADD SOURCE URL, CREATION DATE, MODIFICATION DATE DATA FROM EVERNOTE TO IMPORTED NOTE, TAGGING SUPPORT | |
* 1.23 BUGFIX FOR QUOTATION IN TITLE ISSUE | |
* 1.22 BUGFIX FOR ADDITIONAL CASE OF "Can’t get item 1 of {}" ERROR ("find notes"/quotation issue) | |
* 1.21 BUG FIXES ("Can’t get item 1 of {}" ERROR, isRunning PROPERTY) | |
* 1.20 BUG FIXES / BEGINNING WORK ON SNOW LEOPARD COMPATIBILITY. ADDED CREATION DATE. MODIFIED TO USE NEW GROUP SELECTOR. | |
* 1.10 REWRITTEN TO USE NATIVE HTML EXPORT, DETECT PDF FILES, RUN IN BACKGROUND | |
* 1.00 INITIAL RELEASE | |
*) | |
(* | |
====================================== | |
// USER SWITCHES (YOU CAN CHANGE THESE!) | |
====================================== | |
*) | |
property transferTags : "ON" | |
(* | |
====================================== | |
// PROPERTIES (USE CAUTION WHEN CHANGING) | |
====================================== | |
*) | |
property theNum : "0" | |
property itemexists : "" | |
property theFile : "" | |
property SaveLoc : "" | |
property ArchiveInput : "" | |
property EVNote : "" | |
property isRunning : "false" | |
property theString : "" | |
property noteTags : {} | |
property noteSource : {} | |
property ResourceFolder : "" | |
property noteName : "" | |
(* | |
====================================== | |
// MAIN PROGRAM | |
====================================== | |
*) | |
--SETUP | |
set myPath to (path to home folder) | |
tell application "Evernote" | |
try | |
--GET THE NOTES | |
set SelNotes to selection | |
if (SelNotes is not false) then | |
--TEMP FILES PROCESSED ON THE DESKTOP | |
set ExportFolder to ((path to desktop folder) & "Temp Export From Evernote:") as string | |
set SaveLoc to my f_exists(ExportFolder) | |
--DO THE CONVERSION | |
my ENExport(SelNotes, ExportFolder) | |
end if | |
end try | |
end tell | |
(* | |
====================================== | |
// EXPORT SUBROUTINES | |
====================================== | |
*) | |
on ENExport(SelNotes, ExportFolder) | |
--SET FOLDER FOR NOTE | |
set theGroup to my GroupList() | |
tell application "Evernote" | |
set theNum to 0 | |
--PROCESS THE NOTES | |
repeat with SelNote in SelNotes | |
set ArchiveInput to (ExportFolder & (theNum + 1)) | |
set noteSource to missing value | |
set evernoteName to (title of item 1 of SelNote) | |
--TEMP CHANGE TITLE IF SLASH OR COLON IN NOTE NAME | |
set html_Slash to "&#" & "47;" as string | |
set html_Colon to "&#" & "58;" as string | |
set noteName to my replaceString(evernoteName, "/", html_Slash) | |
set noteName to my replaceString(noteName, ":", html_Colon) | |
set title of SelNote to noteName | |
--HTML EXPORT | |
set theNote to (SelNote) as list | |
export theNote ¬ | |
to ArchiveInput ¬ | |
format HTML | |
--GET NOTE INFO | |
set noteID to (local id of item 1 of SelNote) | |
set noteSource to (source URL of item 1 of SelNote) | |
set noteCreated to (creation date of item 1 of SelNote) | |
set noteModified to (modification date of item 1 of SelNote) | |
set noteTags to (tags of item 1 of SelNote) | |
set noteLink to (note link of item 1 of SelNote) | |
--LOOK FOR RESOURCE FOLDER | |
tell application "Finder" | |
try | |
set EVNote to (every document file of folder ArchiveInput whose name extension is "html") | |
set theHTML to POSIX path of (EVNote as alias) | |
set ArchiveInput to POSIX path of (ArchiveInput as alias) | |
set ResourceFolder to POSIX path of ((ArchiveInput & noteName & ".resources") as string) | |
set hfs_Resource to POSIX file ResourceFolder as text | |
--LOOK FOR PDF | |
set theFile to (every document file of folder hfs_Resource whose name extension is "PDF") | |
set thePDF to POSIX path of (theFile as alias) | |
set itemexists to my PDFDetect(theFile) | |
end try | |
end tell | |
--IMPORT PDF IF PRESENT… | |
tell application id "com.devon-technologies.thinkpro2" | |
if itemexists is true then | |
set resultRecord to import thePDF ¬ | |
name noteName ¬ | |
to theGroup ¬ | |
type "PDF" | |
--ADD BACK EVERNOTE DATA | |
set theRecord to resultRecord | |
if noteSource is not missing value then | |
set the URL of resultRecord to noteSource | |
else | |
set the URL of resultRecord to noteLink | |
end if | |
set the creation date of resultRecord to noteCreated | |
set the modification date of resultRecord to noteModified | |
if transferTags is "ON" then | |
--PROCESS TAGS | |
-- Combine the tags into a comma-delimited list | |
set allTags to {} | |
if noteTags is not missing value then | |
set oldDelim to AppleScript's text item delimiters | |
set AppleScript's text item delimiters to {", "} | |
repeat with eachTag in noteTags | |
copy (name of eachTag) to the end of allTags | |
end repeat | |
end if | |
set the tags of resultRecord to allTags | |
set AppleScript's text item delimiters to oldDelim | |
end if | |
--… OR CONVERT TO WEBARCHIVE FILE! | |
else | |
set outputTitle to (POSIX path of (ArchiveInput & noteName & ".webarchive")) | |
do shell script "/usr/bin/textutil -convert webarchive " & (quoted form of theHTML) & " -output " & (quoted form of outputTitle) | |
--IMPORT INTO DEVONTHINK | |
set resultRecord to import outputTitle ¬ | |
name noteName ¬ | |
to theGroup ¬ | |
type html | |
--ADD BACK EVERNOTE DATA | |
set theRecord to resultRecord | |
if noteSource is not missing value then | |
set the URL of resultRecord to noteSource | |
else | |
set the URL of resultRecord to noteLink | |
end if | |
set the creation date of resultRecord to noteCreated | |
set the modification date of resultRecord to noteModified | |
--FIX NAMES IF NEEDED | |
set html_Slash to "&#" & "47;" as string | |
set html_Colon to "&#" & "58;" as string | |
set (name of resultRecord) to evernoteName | |
set devonSource to source of resultRecord | |
set devonSource to my replaceString(devonSource, html_Slash, "/") | |
set devonSource to my replaceString(devonSource, html_Colon, "/") | |
set source of resultRecord to devonSource | |
tell application "Evernote" to set (title of item 1 of SelNote) to evernoteName | |
if transferTags is "ON" then | |
--PROCESS TAGS | |
-- Combine the tags into a comma-delimited list | |
set allTags to {} | |
if noteTags is not missing value then | |
set oldDelim to AppleScript's text item delimiters | |
set AppleScript's text item delimiters to {", "} | |
repeat with eachTag in noteTags | |
copy (name of eachTag) to the end of allTags | |
end repeat | |
end if | |
set the tags of resultRecord to allTags | |
set AppleScript's text item delimiters to oldDelim | |
end if | |
end if | |
end tell | |
set theNum to theNum + 1 | |
set itemexists to "" | |
end repeat --SelNotes | |
--DELETE THE TEMP FILE/FOLDER | |
tell application "Finder" to delete SaveLoc | |
end tell --EV | |
end ENExport | |
--GET LIST OF GROUPS FROM DEVONTHINK | |
on GroupList() | |
tell application id "com.devon-technologies.thinkpro2" | |
activate | |
set SelGroup to display group selector "Select DEVONthink Group" buttons {"Cancel", "OK"} (*USER SELECTION FROM GROUP LIST *) | |
set PreGroup to SelGroup | |
end tell | |
end GroupList | |
(* | |
====================================== | |
// UTILITY SUBROUTINES | |
====================================== | |
*) | |
--APP RUNNING? | |
on appIsRunning(appName) | |
tell application "System Events" to (name of processes) contains appName | |
end appIsRunning | |
--FOLDER CHECK | |
on f_exists(the_path) | |
try | |
get the_path as alias | |
set SaveLoc to the_path | |
on error | |
tell application "Finder" to make new folder with properties {name:"Temp Export From Evernote"} | |
end try | |
end f_exists | |
--PDF CHECK | |
on PDFDetect(theFile) | |
try | |
set PDFalias to theFile as alias | |
return true | |
on error | |
return false | |
end try | |
end PDFDetect | |
--REPLACE SUBROUTINE | |
on replaceString(theString, theOriginalString, theNewString) | |
set {od, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theOriginalString} | |
set theStringParts to text items of theString | |
if (count of theStringParts) is greater than 1 then | |
set theString to text item 1 of theStringParts as string | |
repeat with eachPart in items 2 thru -1 of theStringParts | |
set theString to theString & theNewString & eachPart as string | |
end repeat | |
end if | |
set AppleScript's text item delimiters to od | |
return theString | |
end replaceString | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment