¿Qué ganchos existen en el Centro de notificaciones/twitter para que pueda twittear programáticamente?

Estoy buscando específicamente diseñar una acción personalizada para LaunchBar para poder iniciar un tweet desde esa utilidad. Dado que el Centro de notificaciones tiene un botón "Hacer clic para twittear", me preguntaba si el Centro de notificaciones tiene algún gancho que me permita escribir esto sin esperar a que el desarrollador del programa agregue una función para realizar esta acción.

El Centro de notificaciones no tiene un diccionario de AppleScript, ni acciones de Automator, y lamentablemente pocos ganchos obvios que aparecen al hurgar en el paquete ejecutable.
Un volcado de cadenas sugiere que hay algo llamado "ShareKit", varias funciones de sharingService y algo llamado "Share Widget", tal vez algún subconjunto de eso podría ser útil de alguna manera.
Tendré tiempo para profundizar en las excelentes respuestas mañana, pero quería recompensar esto por cualquier exposición adicional que pueda obtener.

Respuestas (6)

Las aplicaciones pueden conectarse a las opciones para compartir con la nueva API NSSharingService . Parece que las acciones personalizadas de LaunchBar se pueden realizar con cualquier archivo ejecutable de UNIX, por lo que probablemente podría escribir una pequeña herramienta de línea de comandos (o tal vez necesite crear una aplicación real; tendrá que probarla) que activa esta API ( usando NSSharingServiceNamePostOnTwitter), y eso debería mostrar el diálogo de tweet.

Actualización: para iniciar un tweet desde AppleScript, puede hacer lo siguiente:

tell application "System Events"
    tell process "Notification Center"
        -- activate notification center
        if (count of UI elements) is 1 then click first menu bar's first menu bar item
        -- click the tweet button
        click button 1 of UI element 1 of row 2 of table 1 of scroll area 1 of window "Window"
    end tell
end tell

Además, puede alternar el modo "Mostrar alertas y pancartas" / no molestar:

tell application "System Events"
    tell process "Notification Center"
        key down option
        click first menu bar's first menu bar item
        key up option
    end tell
end tell

(Todo esto es muy específico para el diseño de la ventana actual del Centro de notificaciones y es probable que se rompa con futuras actualizaciones de OS X, pero probablemente habrá soluciones fáciles).

Y un keystrokecomando puede iniciar el Tweet con texto. Ahora, para completar programáticamente el Tweet...
He intentado sin éxito actualizar esto para que funcione con Yosemite. ¿Alguna sugerencia?
@wst Hm, parece complicado. Parece que hacer clic en el elemento de la barra de menú expuesto ya no hace nada, podría ser un buen informe de error .

Ninguno que yo sepa (y de hecho creo que tener un área de publicación rápida de Twitter/Facebook dentro del área de notificaciones es una tontería (realmente debería ser un widget), y lo he desactivado) pero puede usar la línea de comando para ambos envían tweets de lectura, como se menciona en esta página web, extractos a continuación:


Para mostrar una lista de tweets (reemplace osxdaily con un nombre de usuario de twitter de su elección):

curl -s http://twitter.com/osxdaily | grep '' | cut -d">" -f2 | cut -d"<" -f1

Para actualizar su estado de Twitter:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml
El área de entrada de texto era el bit que esperaba usar. Tendré que profundizar en los documentos de la barra de inicio y ver si la idea de curl tiene alguna base... Pensé que deshabilitaron el envío de una contraseña en claro, ¡así que gracias por eso!
Creo que deshabilitaron el uso del envío de contraseñas para clientes que usan la API (reemplazándolo con el método de autenticación de clave), pero esto es, en efecto, usar el sitio web, no un cliente, por lo que usar el nombre de usuario/contraseña probablemente esté bien. De hecho, si ya ha iniciado sesión con una sesión activa y una cookie, etc., incluso puede funcionar sin ellas... (suposiciones)
No creo que las cookies se compartan entre Safari y curl. Y no deberían serlo, de todos modos.
Twitter cambió por completo a inicios de sesión basados ​​en OAuth y deshabilitó la autenticación básica el 30 de junio de 2010. El segundo comando en su respuesta no ha funcionado desde entonces.

Llevando todo esto un paso más allá y reuniendo lo que hemos aprendido hasta ahora, aquí hay un tweet completamente programático:

tell application "System Events"
    tell process "Notification Center"
        click menu bar item 1 of menu bar 1
        click button 1 of UI element 1 of row 2 of table 1 of scroll area 1 of window "window"
        keystroke "Content of the tweet"
        keystroke "D" using {command down, shift down}
    end tell
end tell

Por supuesto, esto es frágil, pero por ahora, funciona. Me encantaría encontrar un gancho real , pero UI Scripting es una solución.

Oh, limpio. Es lógico que ⇧⌘D envíe el tweet (ese es el atajo para Enviar por correo).
Lo encontré por error. La memoria muscular es poderosa.

Brillante cambio de mando D.

Agregando:

display dialog "Tweet?" default answer "" buttons {"OK"} default button 1
set mytweet to text returned of result

tell application "System Events"
    tell process "Notification Center"
        click menu bar item 1 of menu bar 1
        click button 1 of UI element 1 of row 2 of table 1 of scroll area 1 of window "window"
        keystroke mytweet
        keystroke "D" using {command down, shift down}
        keystroke space
    end tell
end tell

Escribí otra secuencia de comandos que soluciona algunos problemas en la secuencia de comandos publicada por Ewwis:

  • No había forma de cerrar el cuadro de diálogo al principio.
  • La acción del segundo clic no funcionaba si el Centro de notificaciones no se mostraba después del último inicio de sesión.
  • El script no funcionaba cuando había un retraso antes de que se mostrara la vista para redactar un tweet. Si ya contenía algún texto, no se borró.
  • El comando de pulsación de tecla solo funciona para insertar caracteres que se pueden ingresar con el método de entrada actual.
  • La barra lateral del Centro de notificaciones no se cerró al final.

Sin embargo, no funciona cuando la barra lateral del Centro de notificaciones está abierta.

set answer to text returned of (display dialog "" default answer "")
try
    set old to the clipboard as record
end try
try
    set text item delimiters to linefeed
    set the clipboard to paragraphs of answer as text
    tell application "System Events"
        tell process "Notification Center"
            click menu bar item 1 of menu bar 1
            try
                windows
            on error
                click menu bar item 1 of menu bar 1
                click menu bar item 1 of menu bar 1
            end try
            click button 1 of UI element 1 of row 2 of table 1 of scroll area 1 of window 1
            delay 0.1
            keystroke "av" using command down
            keystroke "d" using {shift down, command down}
            repeat 100 times
                try
                    delay 0.1
                    click menu bar item 1 of menu bar 1
                    exit repeat
                end try
            end repeat
        end tell
    end tell
end try
try
    set the clipboard to old
end try

Sería más fácil simplemente usar la API .

Hmm, tendré que buscar en la API. Eso más mi lanzador, Launchbar, sería mucho mejor que las secuencias de comandos de la interfaz de usuario. +1 y posiblemente una nueva mejor respuesta.

¡Fantástico! Gracias por mostrarle al mundo otro camino.

Mi solución funcionó para MÍ, pero también la tuya.

No soy un experto en Applescript por FAR, pero me encanta jugar con él.

¡Gracias!

Usando lo que aprendí de ti, aquí hay otra forma que funciona para mí. Esto no aborda algunas de sus preocupaciones sobre teclados alternativos o errores, pero tal vez arroje una luz para alguien que incursiona en AS.

display dialog "Tweet?" default answer "" buttons {"OK"} default button 1 with icon 2
set mytweet to text returned of result

tell application "System Events"
    tell process "Notification Center"
        click menu bar item 1 of menu bar 1
        click button 1 of UI element 1 of row 2 of table 1 of scroll area 1 of window "window"
        keystroke mytweet
        keystroke "D" using {command down, shift down}
        repeat 100 times
            try
                delay 0.1
                click menu bar item 1 of menu bar 1
                exit repeat
            end try
        end repeat
    end tell
end tell