¿Qué ganchos existen en el Centro de notificaciones / twitter para que pueda tuitear mediante programación?

12

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 pregunté si el Centro de notificaciones tiene algún gancho que me permita escribir esto sin esperar que el desarrollador del programa agregue una función para realizar esta acción.

bmike
fuente
2
Notification Center no tiene un diccionario AppleScript, no tiene acciones de Automator, y lamentablemente hay pocos ganchos obvios que aparecen al hurgar en el paquete ejecutable.
Daniel
1
Un volcado de cadenas sugiere que hay algo llamado "ShareKit", varias funciones sharingService y algo llamado "Share Widget", tal vez algún subconjunto podría ser útil de alguna manera.
Daniel
Mañana tendré tiempo de profundizar en las excelentes respuestas, pero quería recompensar esto por cualquier exposición adicional que pudiera obtener.
bmike

Respuestas:

9

Las aplicaciones pueden conectarse a las opciones de uso compartido con la nueva API NSSharingService . Que suena como acciones LaunchBar personalizados se pueden hacer con cualquier archivo ejecutable UNIX, por lo que probablemente podría escribir una herramienta de línea de comandos pequeña (o tal vez necesite para construir una aplicación real - que tendrá que probarlo) 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 ventana actual del Centro de notificaciones y es probable que se rompa con futuras actualizaciones de OS X, pero probablemente habrá soluciones fáciles).

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

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 realmente tonto (debería ser un widget realmente), y lo he desactivado) pero puede usar la línea de comando para ambos envían una lectura de tweets, 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
stuffe
fuente
El área de ingreso de texto era el bit que esperaba usar. Tendré que profundizar en los documentos de la barra de inicio y ver si la idea curl tiene alguna pierna ... Pensé que deshabilitaron el envío de una contraseña en claro, ¡así que gracias por eso!
bmike
Creo que deshabilitaron el uso del envío de contraseñas para los 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 probablemente sea correcto usar el nombre de usuario / contraseña. De hecho, si ya está en el sistema con una sesión activa y galletas, etc, puede incluso trabajar sin ellos ... (conjeturas)
stuffe
No creo que las cookies se compartan entre Safari y curl. Y no deberían serlo, de todos modos.
olivier
2
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.
Mathias Bynens
3

Llevando todo esto un paso más allá y juntando lo que hemos aprendido hasta ahora, aquí hay un tweet totalmente 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 verdadero gancho, pero UI Scripting es una solución alternativa.

Daniel
fuente
Oh, aseado. Es lógico que ⇧⌘D envíe el tweet (ese es el acceso directo para Enviar en correo).
jtbandes
1
Lo encontré por error. La memoria muscular es poderosa.
Daniel
3

Brillante comando de cambio 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
Ewwis
fuente
1

Escribí otro script que corrige algunos problemas en el script publicado por Ewwis:

  • No había forma de cerrar el diálogo al inicio.
  • La segunda acción de clic no funcionaría si el Centro de notificaciones no se hubiera mostrado después del último inicio de sesión.
  • El script no funcionó cuando hubo un retraso antes de que se mostrara la vista para componer 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 usar la API .

Lri
fuente
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.
bmike
0

¡Fantástico! Gracias por mostrarle al mundo otra forma.

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 resuelve algunas de sus preocupaciones sobre teclados alternativos o errores, pero tal vez arrojará una luz para alguien incursionando 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
Ewwis
fuente