1 votos

Cómo implementar una búsqueda de diccionario script en Mac y guardar en el registro del historial: Necesito Ayuda con Errores de Sintaxis

Después de que varias veces se me apagara el MacBook y perdiera las varias pestañas que tenía abiertas de las palabras que buscaba, he empezado a buscar una solución.

Actualmente estoy tratando de implementar un script que busca una palabra en la aplicación Diccionario en Mac y extrae su definición y ejemplo, luego lo guarda en un archivo llamado Dictionary Look Up Service History Log File.txt. Sin embargo, estoy encontrando algunos problemas con el script y agradecería cualquier ayuda que pueda conseguir.

Esto es lo que debería hacer el script: el usuario introduce una palabra, el script comprueba si la palabra contiene algún carácter no válido, abre la app Diccionario, busca la palabra, extrae su definición y ejemplo y los guarda en un archivo, formatea el resultado y lo muestra en un cuadro de diálogo.

He intentado ejecutar el script, pero me sigue dando error. Sospecho que podría haber cometido un error en la sintaxis, pero no estoy seguro de dónde. Estaría agradecido si alguien pudiera echar un vistazo a mi script y ayudarme a identificar cualquier error que pudiera haber cometido.

on run {input, parameters}
    try
        considering diacriticals
            if first character of (input as text) is not in "abcdefghijklmnopqrstuvwxyz" then
                tell current application
                    activate
                    display dialog "The selected text starts with a non-valid character." & return & return & ¬
                        "Make a different selection and try again." buttons {"OK"} default button 1 ¬
                        with title "Dictionary Look Up Logging Service"
                end tell
                return
            end if
        end considering
        open location "dict://" & input
        set theDictionaryHistoryFilename to "Dictionary Look Up Service History Log File.txt"
        set theTargetFilename to quoted form of (POSIX path of (path to documents folder as string) & theDictionaryHistoryFilename)
        set foundSelectedWord to (do shell script "grep '^" & input & "$' " & theTargetFilename & " > /dev/null; echo $?") as integer
        if foundSelectedWord is greater than 0 then
            do shell script "echo \"" & input & "\" >> " & theTargetFilename
        end if
    end try
end run

Es muy importante que las definiciones almacenadas también se organicen así (por ejemplo):

enter image description here

Gracias de antemano por su ayuda.

-1voto

Alex Ixeras Puntos 73

TL;DR: No se puede script el Diccionario.

Siga leyendo para conocer mi viaje de descubrimiento. Empecé mirando el script y comprobando errores antes de descubrir que Dictionary no es scriptable. Ah bueno Espero que mi ayuda no haya sido en vano.

Espero haber entendido bien la cuestión. Está intentando ejecutar este script desde Safari a través del menú script de la barra de menús?

Lo he colocado en ~/Library/scripts/.

Sólo con ver tu script, parece que vas por buen camino con tu código. Aquí hay algunos problemas que veo en su código que podría estar causando errores:

  1. En on run no tiene un valor de retorno especificado. Además, si no está pasando ninguna entrada o parámetro al script, puede simplemente eliminar el parámetro {input, parameters} del on run línea. Corrígeme, si me estoy perdiendo algo aquí, de cómo llamas al script. Tal vez puedas detallar donde colocas el script.

  2. La línea if first character of (input as text) is not in "abcdefghijklmnopqrstuvwxyz" then debe cambiarse por if the first character of input is not in "abcdefghijklmnopqrstuvwxyz" then para comparar directamente el primer carácter de la entrada, sin necesidad de convertirlo en texto.

  3. La línea open location "dict://" & input debe ir dentro de un tell application "Dictionary" para asegurarse de que la aplicación Diccionario es el objetivo.

  4. La línea set theTargetFilename to quoted form of (POSIX path of (path to documents folder as string) & theDictionaryHistoryFilename) debe cambiarse por set theTargetFilename to quoted form of (POSIX path of (path to documents folder) & theDictionaryHistoryFilename) desde el path to documents folder ya devuelve una ruta POSIX.

  5. La línea do shell script "echo "" & input & "" >> " & theTargetFilename debe cambiarse por do shell script "echo " & quoted form of input & " >> " & theTargetFilename para tratar correctamente las palabras introducidas con espacios o caracteres especiales.

  6. Como mencionó red_menace, el on error al final del archivo try bloque. Si se produce un error durante la ejecución del código dentro del bloque try bloque, el on error y se mostrarán el mensaje y el número de error en un cuadro de diálogo. Puede personalizar el mensaje de error y el formato según sea necesario. También puede añadir varios on error para manejar tipos específicos de errores si es necesario. Por ejemplo, puede añadir un on error number -1712 para gestionar los errores que se producen cuando la aplicación Diccionario no está abierta.

Con esto el script revisado con estas correcciones es:

on run
    try
        considering diacriticals
            if the first character of input is not in "abcdefghijklmnopqrstuvwxyz" then
                tell current application
                    activate
                    display dialog "The selected text starts with a non-valid character." & return & return & ¬
                        "Make a different selection and try again." buttons {"OK"} default button 1 ¬
                        with title "Dictionary Look Up Logging Service"
                end tell
                return
            end if
        end considering
        tell application "Dictionary"
            activate
            open location "dict://" & input
            set theDictionaryHistoryFilename to "Dictionary Look Up Service History Log File.txt"
            set theTargetFilename to quoted form of (POSIX path of (path to documents folder) & theDictionaryHistoryFilename)
            set foundSelectedWord to (do shell script "grep '^" & input & "$' " & theTargetFilename & " > /dev/null; echo $?") as integer
            if foundSelectedWord is greater than 0 then
                do shell script "echo " & quoted form of input & " >> " & theTargetFilename
            end if
        end tell
        display dialog "Definition and example for " & input & ":" & return & return & ¬
            (do shell script "osascript -e 'tell application \"Dictionary\" to ¬
            set d to first result whose title = \"" & input & "\"' -e 'get \"    Definition: \" & definition of d & return & return & \"    Example: \" & (example of d)'")
    on error errorMessage number errorNumber
        tell current application
            activate
            display dialog errorMessage & return & return & "Error Number: " & errorNumber buttons {"OK"} default button 1 ¬
                with title "Dictionary Look Up Logging Service"
        end tell
    end try
end run

Este código revisado debería comprobar correctamente si hay caracteres no válidos, abrir la aplicación Diccionario, buscar la palabra introducida, guardarla en un archivo, formatear el resultado y mostrarlo en un cuadro de diálogo.

No conseguí que se ejecutara ya que no estaba seguro de cómo se ejecuta su script existente, pero también puede ser que Dictionary no sea scriptable como sugiere red_menace. Así que hice otra búsqueda y encontré esta fuente :

Puede obtener una primera visión general de la situación mediante el programa script Editor de Apple (está en /Aplicaciones/AppleScript ): elija Archivo > Abrir diccionario, que muestra una lista de aplicaciones presentes en su ordenador que el Editor script cree que son scriptables. No obstante, debería mirar esta lista con un poco de recelo y confirmar que una aplicación en particular realmente es o no scriptable. Para ello, seleccione Ventana > Biblioteca y, en la ventana Biblioteca, pulse el botón el botón "+" (o pulse Control y haga clic para obtener el menú contextual, y seleccionar Añadir). Aparecerá un cuadro de diálogo estándar Abrir. Navegue hasta una aplicación, selecciónela y pulse Abrir. Ocurrirá una de estas dos cosas:

La aplicación no es scriptable

Puede aparecer un cuadro de diálogo de error que diga "No se puede añadir la aplicación o extensión porque no es scriptable". En este caso, la aplicación definitivamente no es scriptable y ese es el final de eso.

La aplicación se añade a la ventana Biblioteca

Esto significa que el aplicación podría ser scriptable. Pero podría tener un falso positivo. Para averiguarlo, haz doble clic en el listado de la aplicación en la Biblioteca Biblioteca. Esto debería abrir la pantalla del diccionario de la aplicación (ver Figura 2-2). Incluso si lo hace, es posible que tenga un falso positivo. Explore el diccionario, haciendo clic en las distintas Suites (en la primera columna del navegador) y mirando a través de las clases y comandos (en la segunda columna) para asegurarse de que éstos realmente hacen algo apropiado para la función de esa aplicación en particular.

Un buen ejemplo es la aplicación llamada, apropiadamente, Diccionario (ubicada en /Aplicaciones ). En script Editor, puede abrir la pantalla del diccionario de la aplicación Diccionario; este diccionario tiene unas dos docenas de entradas. Pero es un falso positivo; el Diccionario no es realmente scriptable.

screenshot of Script Editor showing Dictionary is not scriptable

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X