Posso usare AppleScript per incollare una clip di testo web aggiunta con attribuzione di origine e data e ora, mantenendo i collegamenti incorporati?

0

Nuovo principiante qui quindi per favore fammi sapere se ho bisogno di chiarire o altrimenti migliorare la mia domanda. Ho cercato più volte utilizzando parole chiave diverse e non sono riuscito a trovare una soluzione al mio problema, né a realizzare quelle che speravo fossero una soluzione per me.

Voglio creare uno script AppleScript che, una volta attivato, mi consentirà di incollare una clip di testo web aggiunta con attribuzione di origine e una data / ora, senza perdere alcun collegamento incorporato nel testo selezionato.

Ecco una schermata di ciò che voglio ottenere:

Nonconoscendomoltodiqualsiasicosadiprogrammazione,sonoriuscitoaricostruireilseguentescriptAppleScriptdopoalcunigiornidiricercasulweb.

--cleartheclipboardtellapplication"Finder"
    set the clipboard to " "
    delay 0.1
end tell

-- copy selected text
tell application "Safari"
    activate
    tell application "System Events"
        tell process "Safari"
            keystroke "c" using {command down}
            delay 0.1
        end tell
    end tell
end tell

-- open and paste web clip into specified TextEdit file 
tell application "TextEdit"
    activate
    open "Macintosh HD:Users:Web:Documents:Web Text Clips:Web_Text_Clips.rtf"
    delay 0.2
    tell application "System Events"
        tell process "TextEdit"
            keystroke "v" using {command down}
            delay 0.1
        end tell
    end tell
end tell

-- get, format and copy source info and timestamp 
tell application "Safari"
    activate
    set theLongDate to current date
    set theWindowName to the name of the front window
    set theURL to the URL of the front document
    set writeString to "- - - - - " & return & "From: " & theURL & return & "Page Title: " & theWindowName & return & "Date: " & theLongDate
    set the clipboard to writeString
end tell

-- paste source info and timestamp into predefined position of the specified TextEdit file 
tell application "TextEdit"
    activate
    tell application "System Events"
        tell process "TextEdit"
            keystroke (ASCII character 31) using command down
            keystroke return
            keystroke return
            keystroke "v" using {command down}
            delay 0.1
        end tell
    end tell
end tell

-- copy content of specified TextEdit file 
tell application "TextEdit"
    activate
    tell application "System Events"
        tell process "TextEdit"
            keystroke "a" using {command down}
            keystroke "c" using {command down}
            delay 0.1
        end tell
    end tell
end tell

-- delete content of specified TextEdit file 
tell application "TextEdit"
    activate
    tell application "System Events"
        tell process "TextEdit"
            keystroke "a" using {command down}
            keystroke "x" using {command down}
            delay 0.1
        end tell
    end tell
end tell

-- save specified TextEdit file and quit TextEdit
tell application "TextEdit"
    save "Macintosh HD:Users:Web:Documents:Web Text Clips:Web_Text_Clips.rtf"
    quit
end tell

Sono stato forzato in questa soluzione alternativa perché quando ho utilizzato il comando set i collegamenti incorporati sono stati cancellati dal testo Web selezionato.

Sebbene questo script funzioni, è piuttosto macchinoso e lento. Ho provato tutti i tipi di cose diverse, compresi alcuni comandi di shell script, ma finora nient'altro ha funzionato.

Qualcuno può aiutarmi a creare uno script più elegante e veloce che mantenga ancora i link incorporati nel testo web selezionato?

Sono in esecuzione macOS Sierra 10.12.6.

    
posta Web Smith 30.08.2017 - 17:07
fonte

1 risposta

-1

Sono un po 'confuso dal tuo script, sembra copiare e incollare, eliminare e salvare, quindi se ho frainteso la tua destinazione d'uso, mi scuso. Mi sembra che tu voglia un file salvato nella cartella Web Clips che contiene solo ciò che hai selezionato in Safari con il link, il titolo e la data. Scriverò questo come un file HTM piuttosto che un file di testo, ed ecco il codice che ho usato con i commenti in linea.

set myFolder to ((path to users folder) as text) & "Web:Documents:Web Text Clips:"
set myFile to myFolder & "Web_Text_Clips.htm"

tell application "Safari"
set theLongDate to current date
set theWindowName to the name of the front window
set selectedText to (do JavaScript "(''+getSelection())" in document 1) --use javascript to get what part of the page is selected
set theURL to the URL of the front document
end tell

set myFolder to POSIX path of (myFolder as alias) --convert to posix path for use in the command line
set myFile to quoted form of (myFolder & myFile) --append the file name to the end of the file path
do shell script "touch " & myFile --create the htm file

--Add content to the HTM document
newHTM(myFile) --Add the HTM doctype and opening tags.
addElement("p", "--------", myFile) --"p" is the htm tag for a paragraph, and we want this to be it's own paragraph. 
addElement("p", "From: <a href=" & theURL & ">" & theURL & "</a>", myFile) --a bit more complex, adding a paragraph with a link (<a> is the link tag)
addElement("p", "Page Title: " & theWindowName, myFile) --Adding a paragraph for the Page Title
addElement("p", "Date: " & theLongDate, myFile) --Adding a paragraph for the Date line.
closeHTM(myFile) --Add the closing HTML tags.

------------HANDLERS------------
on newHTM(filePath)
    do shell script "printf '<!doctype html>\n<html lang=\"en\">\n<head>\n\t<title>Web Clips</title>\n\n</head>\n\n<body>\n\t' > " & filePath
end newHTM

on closeHTM(filePath)
    do shell script "printf '\n\t</body>\n</html>' >> " & filePath
end closeHTM

on addElement(elem, htm, filePath)
    set htm to "\t\t<" & elem & ">" & htm & "</" & elem & ">\n"
    do shell script "printf '" & htm & "' >> " & filePath
end addElement

Questo script conserva il collegamento utilizzando HTML per "incorporare" il collegamento. Si aprirà nel browser predefinito. Mi è sembrato, dal tuo script, che questo file contenga solo l'ultimo clipping web, quindi è così che l'ho scritto. Se, tuttavia, si desidera che questo file contenga un elenco di ritagli Web, è necessario modificare lo script. Ad ogni modo, spero che questo ti dia un buon inizio. Per la leggibilità, inserisco l'aggiunta del codice html nei gestori sotto il corpo del codice.

    
risposta data 04.09.2017 - 20:55
fonte

Leggi altre domande sui tag