¿Puedo usar AppleScript para pegar un clip de texto web adjunto con una atribución de origen y una marca de tiempo, mientras mantengo enlaces incrustados?

0

Complete al novato aquí, así que avíseme si necesito aclarar o mejorar mi pregunta. He buscado varias veces con diferentes palabras clave y no he podido encontrar una solución a mi problema, o hacer que las que yo esperaba fueran una solución para mí.

Quiero crear un script de AppleScript que cuando se active me permita pegar un clip de texto web adjunto con la atribución de origen y una marca de tiempo, sin perder ningún enlace incrustado dentro del texto seleccionado.

Aquí hay una captura de pantalla de lo que quiero lograr:

Sinsabermuchodenadaencuantoaprogramación,pudearmarelsiguientescriptdeAppleScriptdespuésdeunosdíasdebúsquedaenlaweb.

--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

Fui forzado a esta solución porque cuando usé el comando set , los enlaces incrustados fueron borrados del texto web seleccionado.

Si bien este script funciona, es bastante engorroso y lento. He intentado todo tipo de cosas diferentes, incluidos algunos comandos de shell script, pero hasta ahora nada más ha funcionado.

¿Puede alguien ayudarme a crear un script más elegante y rápido que aún mantenga los enlaces incrustados en el texto web seleccionado?

Estoy ejecutando macOS Sierra 10.12.6.

    
pregunta Web Smith 30.08.2017 - 17:07

1 respuesta

-1

Tu secuencia de comandos me confunde un poco, parece que se copia y pega, se borra y se guarda, por lo que si malinterpreto tu uso previsto, me disculpo. Me parece que desea guardar un archivo en esa carpeta de Clips Web que solo contiene lo que seleccionó en Safari con el enlace, el título y la fecha. Escribiría esto como un archivo HTM en lugar de un archivo de texto, y aquí está el código que usé con los comentarios en línea.

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

Este script conserva el enlace utilizando HTML para "incrustar" el enlace. Se abrirá en su navegador predeterminado. Desde su script, me pareció que este archivo solo contiene el último recorte de web, así es como lo escribí. Sin embargo, si desea que este archivo contenga una lista de recortes web, el script debería editarse. De cualquier manera, espero que esto te dé un buen comienzo. Para facilitar la lectura, coloco la adición de código html en los controladores debajo del cuerpo del código.

    
respondido por el Hurston 04.09.2017 - 20:55

Lea otras preguntas en las etiquetas