Welche Hooks gibt es in Notification Center / Twitter, damit ich programmgesteuert twittern kann?

12

Ich möchte speziell eine benutzerdefinierte Aktion für LaunchBar entwerfen, damit ich einen Tweet von diesem Dienstprogramm aus initiieren kann. Da im Notification Center die Schaltfläche "Zum Twittern klicken" vorhanden ist, habe ich mich gefragt, ob im Notification Center Hooks vorhanden sind, mit denen ich das Skript erstellen kann, ohne darauf warten zu müssen, dass der Entwickler des Programms eine Funktion hinzufügt, mit der diese Aktion ausgeführt wird.

bmike
quelle
2
Das Notification Center enthält kein AppleScript-Wörterbuch, keine Automator-Aktionen und leider nur wenige offensichtliche Verknüpfungen, die beim Stöbern im ausführbaren Bundle auftreten.
Daniel
1
Ein Strings-Dump des besagt, dass es etwas namens "ShareKit", verschiedene SharingService-Funktionen und etwas namens "Share Widget" gibt - vielleicht ist eine Teilmenge davon irgendwie hilfreich.
Daniel
Ich werde morgen Zeit haben, mich mit den tollen Antworten zu befassen, aber ich wollte dies für jede zusätzliche Enthüllung ausgeben, die daraus entstehen könnte.
bmike

Antworten:

9

Apps können die Freigabeoptionen mit der neuen NSSharingService- API nutzen. Es hört sich so an, als könnten benutzerdefinierte LaunchBar-Aktionen mit jeder ausführbaren UNIX-Datei durchgeführt werden. Sie könnten also wahrscheinlich ein kleines Befehlszeilentool schreiben (oder Sie müssen eine tatsächliche App erstellen - Sie müssen es testen), das diese API aktiviert ( Verwenden von NSSharingServiceNamePostOnTwitter), und das sollte den Tweet-Dialog anzeigen.

Update: Um einen Tweet aus AppleScript zu starten, können Sie folgende Aktionen ausführen:

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

Außerdem können Sie den "Benachrichtigungen und Banner anzeigen" / "Nicht stören" -Modus umschalten:

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

(Dies ist alles sehr spezifisch für das aktuelle Fensterlayout von Notification Center und wird wahrscheinlich mit zukünftigen OS X-Updates brechen - aber es wird wahrscheinlich einfache Korrekturen geben.)

jtbandes
quelle
2
Und ein keystrokeBefehl kann den Tweet mit Text starten. Vervollständigen Sie nun programmatisch den Tweet…
Daniel
Ich habe erfolglos versucht, dies zu aktualisieren, um mit Yosemite zu arbeiten. Irgendwelche Vorschläge?
3.
1
@wst Hm, sieht knifflig aus. Es scheint, als würde das Klicken auf die sichtbare Menüleiste nichts mehr bewirken - es könnte ein guter Fehlerbericht erstellt werden .
jtbandes
3

Keine, die ich kenne (und in der Tat denke ich, dass ein Twitter / Facebook- Schnellpostbereich im Benachrichtigungsbereich eigentlich dumm ist (sollte eigentlich ein Widget sein), und ich habe es deaktiviert), aber Sie können die Befehlszeile verwenden, um Beide senden einen Lese-Tweets, wie auf dieser Webseite erwähnt, Auszüge unten:


So zeigen Sie eine Liste von Tweets an (ersetzen Sie osxdaily durch einen Twitter-Benutzernamen Ihrer Wahl):

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

So aktualisieren Sie Ihren Twitter-Status:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml
stuffe
quelle
Der Texteingabebereich war genau das, was ich mir erhofft hatte. Ich muss mich in die Launchbar-Dokumentation vertiefen und herausfinden, ob die Curl-Idee Beine hat ... Ich dachte, sie haben das Versenden eines Passworts im Klartext deaktiviert - also danke dafür!
bmike
Ich denke, sie haben die Verwendung des Passworts für Clients, die die API verwenden, deaktiviert (indem sie es durch die Schlüsselauthentifizierungsmethode ersetzen), aber dies bedeutet, dass die Website kein Client ist und die Verwendung des Benutzernamens / Passworts wahrscheinlich in Ordnung ist. In der Tat, wenn Sie bereits mit einer aktiven Sitzung und Cookie usw. angemeldet sind, kann es sogar ohne sie funktionieren ... (Vermutung)
stuffe
Ich glaube nicht, dass Cookies zwischen Safari & geteilt werden curl. Und sie sollten es sowieso nicht sein.
Olivier
2
Twitter hat am 30. Juni 2010 vollständig auf OAuth-basierte Anmeldungen umgestellt und die Standardauthentifizierung deaktiviert. Der zweite Befehl in Ihrer Antwort hat seitdem nicht funktioniert.
Mathias Bynens
3

Gehen Sie noch einen Schritt weiter und fassen Sie das, was wir bisher gelernt haben, zusammen. Hier ist ein vollständig programmatischer Tweet:

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

Das ist natürlich fragil, aber im Moment funktioniert es. Ich würde gerne einen richtigen Hook finden, aber UI-Scripting ist eine Problemumgehung.

Daniel
quelle
Oh, ordentlich. Es ist logisch, dass ⇧⌘D den Tweet sendet (das ist die Abkürzung für Send in Mail).
Jtbandes
1
Fand es versehentlich. Das Muskelgedächtnis ist stark.
Daniel
3

Geniale Befehlsverschiebung D.

Hinzufügen:

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

Ich habe ein anderes Skript geschrieben, das einige Probleme im von Ewwis veröffentlichten Skript behebt:

  • Es gab keine Möglichkeit, den Dialog zu Beginn zu schließen.
  • Die zweite Klickaktion funktionierte nicht, wenn das Benachrichtigungscenter nach der letzten Anmeldung nicht angezeigt wurde.
  • Das Skript funktionierte nicht, als eine Verzögerung auftrat, bevor die Ansicht zum Erstellen eines Tweets angezeigt wurde. Wenn es bereits Text enthielt, wurde er nicht gelöscht.
  • Der Tastaturbefehl kann nur zum Einfügen von Zeichen verwendet werden, die mit der aktuellen Eingabemethode eingegeben werden können.
  • Die Seitenleiste des Benachrichtigungscenters wurde am Ende nicht geschlossen.

Es funktioniert jedoch nicht, wenn die Seitenleiste des Benachrichtigungscenters geöffnet ist.

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

Es wäre einfacher, nur die API zu verwenden .

Lri
quelle
Hmm - Ich muss in die API schauen. Das plus mein Launcher, Launchbar wäre viel besser als UI-Scripting. +1 und möglicherweise eine neue beste Antwort.
bmike
0

Fantastisch! Danke, dass du der Welt einen anderen Weg zeigst.

Meine Lösung hat bei mir funktioniert, aber auch bei Ihnen.

Ich bin bei weitem kein Applescript-Experte, aber ich liebe es, damit herumzuspielen.

Vielen Dank!

Mit dem, was ich von Ihnen gelernt habe, ist hier ein anderer Weg, der für mich funktioniert. Hiermit werden einige Ihrer Bedenken in Bezug auf alternative Tastaturen oder Fehler nicht ausgeräumt, aber es wird möglicherweise ein Licht auf jemanden werfen, der sich mit AS beschäftigt.

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
quelle