Quali hook esistono in Notification Center / Twitter in modo che io possa twittare programmaticamente?


12

Sto specificamente cercando di progettare un'azione personalizzata per LaunchBar in modo da poter avviare un tweet da tale utility. Poiché Notification Center ha un pulsante "Fai clic per twittare", mi chiedevo se il Notification Center avesse degli hook che mi permettessero di scrivere questo script senza aspettare che lo sviluppatore del programma aggiungesse una funzione per eseguire questa azione.


2
Notification Center non ha dizionario AppleScript, né azioni di Automator e purtroppo poco in termini di hook evidenti che si presentano quando si frugano nel bundle eseguibile.
Daniel

1
Un dump delle stringhe suggerisce che c'è qualcosa chiamato "ShareKit", varie funzioni di sharingService e qualcosa chiamato "Share Widget" - forse un sottoinsieme di ciò potrebbe essere utile in qualche modo.
Daniel

Domani avrò il tempo di scavare nelle grandi risposte, ma volevo elogiarlo per ogni ulteriore esposizione che potesse guadagnare.
bmike

Risposte:


9

Le app possono agganciarsi alle opzioni di condivisione con la nuova API NSSharingService . E suona come azioni di avvio personalizzati possono essere realizzati con qualsiasi file eseguibile UNIX, quindi probabilmente si potrebbe scrivere uno strumento a riga di comando piccolo (o potrebbe essere necessario costruire un app reale - si dovrà verificare il lavoro svolto) che attiva questa API ( utilizzando NSSharingServiceNamePostOnTwitter) e che dovrebbe visualizzare la finestra di tweet.

Aggiornamento: per avviare un tweet da AppleScript, è possibile effettuare le seguenti operazioni:

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

Inoltre, puoi attivare / disattivare la modalità "Mostra avvisi e banner":

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

(Tutto ciò è molto specifico per l'attuale layout della finestra di Notification Center e probabilmente si romperà con i futuri aggiornamenti di OS X - ma probabilmente ci saranno facili soluzioni.)


2
E un keystrokecomando può avviare il Tweet con il testo. Ora per completare programmaticamente il Tweet ...
Daniel

Ho provato senza successo ad aggiornare questo per funzionare con Yosemite. Eventuali suggerimenti?
wst

1
@st Hm, sembra complicato. Sembra che fare clic sulla voce di barra dei menu esposta non faccia più nulla - potrebbe fare una buona segnalazione di bug .
jtbandes

3

Nessuno di cui io sia a conoscenza (e in effetti penso che avere un'area di post rapido Twitter / Facebook all'interno dell'area delle notifiche sia effettivamente stupida (dovrebbe essere un widget davvero), e l'ho disattivato) ma puoi usare la riga di comando per entrambi inviano un tweet di lettura, come menzionato in questa pagina Web, estratti di seguito:


Per visualizzare un elenco di tweet (sostituire osxdaily con un nome utente twitter di propria scelta):

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

Per aggiornare lo stato di Twitter:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml

L'area di immissione del testo era il bit che speravo di usare. Dovrò scavare nei documenti della barra di avvio e vedere se l'idea del ricciolo ha delle gambe ... Pensavo che avessero disabilitato l'invio di una password in chiaro - quindi grazie per quello!
bmike

Penso che abbiano disabilitato l'uso dell'invio della password per i client che usano l'API (sostituendola con il metodo di autenticazione chiave), ma questo, in effetti, utilizza il sito Web non un client, quindi probabilmente usare il nome utente / password va bene. In effetti, se hai già effettuato l'accesso con una sessione attiva, cookie ecc., Potrebbe anche funzionare senza di essi ... (congetture)
stuffe,

Non credo che i cookie siano condivisi tra Safari e curl. E comunque non dovrebbero esserlo.
Olivier,

2
Twitter è passato completamente agli accessi basati su OAuth e ha disabilitato l'autenticazione di base il 30 giugno 2010. Il secondo comando nella risposta non ha funzionato da allora.
Mathias Bynens,

3

Facendo un ulteriore passo avanti e mettendo insieme ciò che abbiamo imparato finora, ecco un tweet completamente programmatico:

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

Naturalmente questo è fragile, ma per ora funziona. Mi piacerebbe trovare un vero gancio, ma UI Scripting è una soluzione alternativa.


Oh, pulito. È logico che ⇧⌘D invii il tweet (questa è la scorciatoia per Invia nella posta).
jtbandes,

1
L'ho trovato per errore. La memoria muscolare è potente.
Daniel

3

Brillante comando shift D.

Aggiunta:

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

1

Ho scritto un altro script che risolve alcuni problemi nello script pubblicato da Ewwis:

  • Non c'era modo di chiudere la finestra di dialogo all'inizio.
  • La seconda azione di clic non funzionava se il Centro notifiche non era stato mostrato dopo l'ultimo accesso.
  • La sceneggiatura non ha funzionato quando c'è stato un ritardo prima che fosse mostrata la vista per comporre un tweet. Se conteneva già del testo, non veniva cancellato.
  • Il comando battitura funziona solo per l'inserimento di caratteri che possono essere immessi con il metodo di input corrente.
  • La barra laterale del Centro notifiche non è stata chiusa alla fine.

Tuttavia, non funziona quando la barra laterale del Centro notifiche è aperta.

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

Sarebbe più semplice usare semplicemente l'API .


Hmm - Dovrò esaminare l'API. Oltre al mio launcher, Launchbar sarebbe molto meglio degli script dell'interfaccia utente. +1 e possibilmente una nuova migliore risposta.
bmike

0

Fantastico! Grazie per aver mostrato al mondo un altro modo.

La mia soluzione ha funzionato per ME, ma anche la tua.

Non sono un esperto di Applescript di FAR, ma adoro giocherellare con esso.

Grazie!

Usando quello che ho imparato da te, ecco un altro modo che funziona per me. Questo non risolve alcune delle tue preoccupazioni su tastiere o errori alternativi, ma forse farà luce su qualcuno che si diletta in 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.