Quels crochets existent dans Notification Center / twitter pour que je puisse tweeter par programmation?

12

Je cherche spécifiquement à concevoir une action personnalisée pour LaunchBar afin que je puisse lancer un tweet à partir de cet utilitaire. Étant donné que Notification Center a un bouton "Cliquez pour tweeter", je me suis demandé si Notification Center avait des crochets qui me permettraient de l'écrire sans attendre que le développeur du programme ajoute une fonction pour effectuer cette action.

bmike
la source
2
Notification Center n'a pas de dictionnaire AppleScript, pas d'actions Automator, et malheureusement peu de crochets évidents qui apparaissent lors de la fouille du bundle exécutable.
Daniel
1
Un vidage des chaînes suggère qu'il existe quelque chose appelé "ShareKit", diverses fonctions de partage de services et quelque chose appelé "Share Widget" - peut-être qu'un sous-ensemble de cela pourrait être utile d'une manière ou d'une autre.
Daniel
J'aurai le temps de creuser dans les bonnes réponses demain, mais je voulais en faire la prime pour toute exposition supplémentaire qu'elle pourrait gagner.
bmike

Réponses:

9

Les applications peuvent se connecter aux options de partage avec la nouvelle API NSSharingService . Il semble que des actions LaunchBar personnalisées puissent être effectuées avec n'importe quel fichier exécutable UNIX, vous pouvez donc probablement écrire un petit outil en ligne de commande (ou vous devrez peut-être créer une application réelle - vous devrez la tester) qui active cette API ( en utilisant NSSharingServiceNamePostOnTwitter), et cela devrait afficher la boîte de dialogue du tweet.

Mise à jour: pour lancer un tweet à partir d'AppleScript, vous pouvez procéder comme suit:

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

De plus, vous pouvez basculer le mode "Afficher les alertes et les bannières" / ne pas déranger:

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

(Tout cela est très spécifique à la disposition actuelle des fenêtres de Notification Center et risque de rompre avec les futures mises à jour d'OS X - mais il y aura probablement des correctifs faciles.)

jtbandes
la source
2
Et une keystrokecommande peut démarrer le Tweet avec du texte. Maintenant, pour terminer par programme le Tweet…
Daniel
J'ai essayé sans succès de mettre à jour ceci pour fonctionner avec Yosemite. Aucune suggestion?
WST
1
@wst Hm, semble délicat. Il semble que cliquer sur l'élément de la barre de menu exposée ne fasse plus rien - pourrait faire un bon rapport de bogue .
jtbandes
3

Aucun que je sache (et en fait, je pense qu'avoir une zone de publication rapide Twitter / Facebook dans la zone des notifications est en fait stupide (devrait être un widget vraiment), et je l'ai désactivé) mais vous pouvez utiliser la ligne de commande pour les deux envoient des tweets lus, comme mentionné dans cette page Web, extraits ci-dessous:


Pour afficher une liste de tweets (remplacez osxdaily par un nom d'utilisateur twitter de votre choix):

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

Pour mettre à jour votre statut Twitter:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml
stuffe
la source
La zone de saisie de texte était le bit que j'espérais utiliser. Je vais devoir fouiller dans les documents de la barre de lancement et voir si l'idée de la boucle a des jambes .... Je pensais qu'ils avaient désactivé l'envoi d'un mot de passe en clair - alors merci pour ça!
bmike
Je pense qu'ils ont désactivé l'utilisation de l'envoi de mot de passe pour les clients qui utilisent l'API (en la remplaçant par la méthode d'authentification par clé), mais c'est en fait en utilisant le site Web et non un client, donc l'utilisation du nom d'utilisateur / mot de passe est probablement très bien. En fait, si vous êtes déjà connecté avec une session active et un cookie, etc., cela peut même fonctionner sans eux ... (conjecture)
stuffe
Je ne pense pas que les cookies soient partagés entre Safari et curl. Et ils ne devraient pas l'être, de toute façon.
olivier
2
Twitter est entièrement passé aux connexions basées sur OAuth et a désactivé l'authentification de base le 30 juin 2010. La deuxième commande de votre réponse n'a pas fonctionné depuis.
Mathias Bynens
3

Pour aller plus loin et rassembler ce que nous avons appris jusqu'à présent, voici un tweet entièrement programmatique:

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

Bien sûr, cela est fragile, mais pour l'instant, cela fonctionne. J'adorerais trouver un vrai crochet, mais le script UI est une solution de contournement.

Daniel
la source
Oh, bien. Il est logique que ⇧⌘D envoie le tweet (c'est le raccourci pour Send in Mail).
jtbandes
1
Je l'ai trouvé par erreur. La mémoire musculaire est puissante.
Daniel
3

Brillant commandement Shift D.

Ajouter:

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
la source
1

J'ai écrit un autre script qui corrige certains problèmes dans le script publié par Ewwis:

  • Il n'y avait aucun moyen de fermer la boîte de dialogue au début.
  • La deuxième action de clic n'a pas fonctionné si le Centre de notifications n'avait pas été affiché après la dernière connexion.
  • Le script ne fonctionnait pas lorsqu'il y avait un délai avant l'affichage de la vue de composition d'un tweet. S'il contenait déjà du texte, il n'a pas été effacé.
  • La commande de frappe ne fonctionne que pour insérer des caractères qui peuvent être saisis avec la méthode de saisie actuelle.
  • La barre latérale du centre de notifications n'a pas été fermée à la fin.

Cela ne fonctionne pas lorsque la barre latérale du centre de notifications est ouverte.

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

Il serait plus facile d' utiliser simplement l'API .

Lri
la source
Hmm - je vais devoir regarder dans l'API. Cela plus mon lanceur, Launchbar serait beaucoup mieux que les scripts d'interface utilisateur. +1 et éventuellement une nouvelle meilleure réponse.
bmike
0

Fantastique! Merci d'avoir montré au monde une autre façon.

Ma solution a fonctionné pour MOI, mais la vôtre aussi.

Je ne suis pas un expert Applescript par FAR, mais j'aime jouer avec.

Merci!

En utilisant ce que j'ai appris de vous, voici une autre façon qui fonctionne pour moi. Cela ne répond pas à certaines de vos préoccupations concernant les claviers alternatifs ou les erreurs, mais cela éclairera peut-être quelqu'un pour essayer l'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
la source