I have a big EagleFiler archive in which I hold all of my PDFs, and as I add papers, I generally fill the “Title” field with the paper title and the “From name” field with the authors, as well as assign tags, etc. EagleFiler is generally my first stop when I acquire a new PDF. Plus, my EagleFiler library lives in my Dropbox, so I can get at these files from my iDevices as well.
However, when I want to add one of these papers to my bibliography, I have to go to BibDesk, make a new record, retype the title and author, and attach the PDF. And then I think: I should automate the export of the metadata someday.
Happily, that someday is today.
I have put together a simple Applescript that will look at the record(s) selected in EagleFiler, and create a corresponding new BibDesk record for each of them. It fills in the title, author, and source URL information from the EagleFiler metadata, attaches the file to the BibDesk record, and then does a couple of other things that are idiosyncratic to my particular filing system. In particular, it looks in the path to see if it is inside a “Journals” folder (in which case it is an article), or in “Monographs” (in which case it is a book), etc. It also looks to see if a tag called “look” was assigned in EagleFiler, and marks the “Read” flag in BibDesk if the tag is found. Obviously, these parts are only useful if you file things the way I do. But even if you don’t, it might be interesting to see how the script works.
I am no Applescript genius. In my initial tests, this ran kind of slowly, and there are probably better or more efficient ways it could be written, but it does seem to work.
Once a BibDesk record is created, the publication window is opened, and generally there needs to be some tweaking: fixing quotation marks, protecting capitals, fixing author lists to use “and” as separators, but it still saves some double-entry.
One installs Applescripts like this into ~/Library/Scripts/Applications/EagleFiler and then they are available via the scripts menu in the menubar.
-- Create a new BibDesk record from EagleFiler record
-- Paul Hagstrom, November 2010
--
-- This is probably kind of idiosyncratic.
-- My filing procedure is to have PDFs in EagleFiler with the
-- title in title
-- authors in from
-- There is very little chance that it will work without any need to edit
-- Maybe later I'll try to figure out how to tag things so that they'll
-- detect the right reference type, etc.
on run
tell application "EagleFiler"
set _records to selected records of browser window 1
repeat with _record in _records
set theTitle to _record's title
set theAuthor to _record's from name
set theSource to _record's source URL
set theFile to _record's file
set thePath to theFile's POSIX path
set theNote to _record's note text
-- special handling based on my idiosyncratic organization
-- look at the path to see if it is a journal or what
set theType to "article"
if thePath contains "Journals" then
set theType to "article"
end if
if thePath contains "Monographs" then
set theType to "book"
end if
if thePath contains "Dissertations" then
set theType to "phdthesis"
end if
if thePath contains "Edited" or thePath contains "WPL" or thePath contains "Conferences" then
set theType to "incollection"
end if
-- special handling of tags. If something is tagged "look" it goes on the reading list.
set theRead to false
set _tags to _record's assigned tags
repeat with _tag in _tags
if _tag's name is "look" then
set theRead to true
end if
end repeat
tell application "BibDesk"
tell document 1
set thePub to make new publication at the beginning of publications
set type of thePub to theType
set title of thePub to theTitle
--at some point I might try to replace commas with "and"
--and if theAuthor starts with "ed." put it in the editor
--field instead, since that is my general convention in EF.
set value of field "Author" of thePub to theAuthor
tell thePub
add (POSIX file thePath) to beginning of linked files
if theRead then
set value of field "Read" to 1
end if
make new linked URL with data theSource at end of linked URLs
--at some point I might try to parse my filenames
--they are generally authorYear-source.pdf
--set value of field "Journal" to theJournal
--set publication year to theYear
set cite key to get generated cite key
end tell
show thePub
end tell
end tell
end repeat
end tell
end run