Skip to content

Applescript to import articles into devonthink pro and from incoming NetNewsWire RSS streams

David Nunez
David Nunez
2 min read

The applescript in this post will take the currently selected headline or tabbed article in NetNewsWire, prompt the user for tags about the article, and then create an HTML copy of the article in DEVONThink in a sub group.

If the first tag is not the word “private” then the link is also posted, via cocoalicious, to my account.

This was based on my prior script and Ethan’s attempt to deal with info overload.

It attaches the referral URL to the DEVONThink record, so when it creates the archive, it will actually fetch the article from the original source (ex. posts get the original article)

Since DEVONThink doesn’t really do tags, I’ve co-opted the comments field for this purpose.

This is attached to a Quicksilver trigger (CMD-CTR-OPTION-/).

Here is the workflow:

  • SCAN: Quickly scan headlines in NetNewsWire and hit return when I see a headline that seems interesting. This opens the page in the background in a tab in NNW
  • READ: Go down list of articles, skim them, do CMD-CTR-OPTION-/ for those I’d like to possibly include in future research to invoke my script. * In the prompt that appears, type a few keywords/tags that describe the content and hit “return”
  • REVIEW: Later on, when doing research or work around a topic, I can use DEVONThink’s smart searching features confidently knowing that it will dig up at least some interesting connections between articles I saved.

Things to do:

  • add a growl notification saying “successful import”
  • write a looping script that will handle the few hundred articles marked as “flagged” in NNW by archiving them. What would the tags be here?
set destination_group_location to "/url/delicious/"

tell application "NetNewsWire"
    set userInput to text returned of (display dialog "Enter Tag:" default answer "untagged")
    set h_tags to userInput
    set AppleScript's text item delimiters to space
    set h_tags to h_tags's text items
    set AppleScript's text item delimiters to {""}--> restore delimiters'
        if (index of selected tab is not 0) then
            set tabnum to index of selected tab + 1
            set taburls to URLs of tabs
            set h_URL to (get item tabnum of taburls)
            set tabtitles to titles of tabs
            set h_title to (get item tabnum of tabtitles)
            set h_mdate to get current date
            set h_when to current date
        else if exists selectedHeadline then
            set h_URL to URL of selectedHeadline
            set h_title to title of selectedHeadline
            set h_mdate to get current date
            if exists date published of selectedHeadline then
                set h_when to date published of selectedHeadline
                set h_when to date arrived of this_headline
            end if
            error "No headline is selected."
        end if
    on error error_message number error_number
        if the error_number is not -128 then
                display alert "NetNewsWire" message error_message as warning
            on error number error_number
                if error_number is -1708 then display dialog error_message buttons {"OK"} default button 1
            end try
        end if
    end try
    tell application "DEVONthink Pro"
        if item 1 of h_tags is "private" then
            set destination_group_location to destination_group_location & item 2 of h_tags
            set destination_group_location to destination_group_location & item 1 of h_tags
        end if
        if not (exists record at destination_group_location) then
            set destination_group to create location destination_group_location
            set destination_group to get record at destination_group_location in current database
        end if
        set archive to create record with {name:h_title, type:html, creation date:h_when, modification date:h_mdate, URL:h_URL, comment:userInput} in destination_group
        set source of archive to download markup from h_URL
    end tell
    tell application "Cocoalicious"
        if item 1 of h_tags is not "private" then
            make new post with properties {description:h_title, url:h_URL, tag string:userInput}
        end if
    end tell
end tell

David Nunez Twitter

Dir of Technology at the MIT Museum • Writing about emerging tech's impact on your life • Speculative insights on the intersection of humanity and technology 🤖


Related Posts

FCC's Vote against Net Nuetrality is a disservice to museums

Yesterday, the FCC voted to repeal the 2015 Open Internet Order and dismantle the order’s strong net neutrality rules (New York Times summary of what happened). You have probably read about how this might impact broadband quality for things like streaming television or even basic websites via tiered access

FCC's Vote against Net Nuetrality is a disservice to museums

Requiem for Rhinos - behind the scenes video

Automatically Unshortening Links in Wordpress Posts

On this site, I have the Broken Links Checker Plugin chugging away in the background. He tirelessly checks and rechecks every link in every post to find URLs that no longer work; pages sometimes just disappear. In most cases, I’m able to use the Internet Archive Wayback Machine to

Automatically Unshortening Links in Wordpress Posts