Jakie haki istnieją w Centrum powiadomień / Twitterze, że mogę programowo tweetować?

12

W szczególności zamierzam zaprojektować niestandardową akcję dla LaunchBar, aby móc zainicjować tweet z tego narzędzia. Ponieważ Centrum powiadomień ma przycisk „Kliknij, aby ćwierkać”, zastanawiałem się, czy Centrum powiadomień ma jakieś zaczepki, które pozwoliłyby mi na pisanie skryptów bez czekania, aż programista doda funkcję wykonującą tę akcję.

bmike
źródło
2
Centrum powiadomień nie ma słownika AppleScript, żadnych działań Automatora i niestety niewiele przeszkadza w oczywistych hakach, które pojawiają się, gdy przeglądamy pakiet wykonywalny.
Daniel
1
Zrzut ciągów sugeruje, że istnieje coś o nazwie „ShareKit”, różne funkcje sharingService i coś o nazwie „Share Widget” - być może jakiś podzbiór tego może być w jakiś sposób pomocny.
Daniel
Jutro będę miał czas zagłębić się w świetne odpowiedzi, ale chciałem je zdobyć za każdą dodatkową ekspozycję, jaką może zyskać.
bmike

Odpowiedzi:

9

Aplikacje mogą podłączyć się do opcji udostępniania dzięki nowemu interfejsowi API NSSharingService . To brzmi jak niestandardowe działania LaunchBar mogą być wykonane z dowolnego pliku wykonywalnego, UNIX, więc można chyba napisać narzędziem wiersza polecenia małe (lub być może trzeba budować rzeczywistą aplikację - trzeba będzie przetestować go), który aktywuje ten API ( using NSSharingServiceNamePostOnTwitter), a to powinno wyświetlić okno dialogowe tweeta.

Aktualizacja: aby zainicjować tweet z AppleScript, możesz wykonać następujące czynności:

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

Ponadto możesz przełączać tryb „Pokaż alerty i banery” / nie przeszkadzać:

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

(Wszystko to jest bardzo specyficzne dla obecnego układu okna Centrum powiadomień i prawdopodobnie zepsuje się w przyszłych aktualizacjach OS X - ale prawdopodobnie będą łatwe poprawki).

jtbandes
źródło
2
A keystrokepolecenie może rozpocząć out Tweet z tekstem. Teraz programowo wypełnij Tweet…
Daniel
Próbowałem bezskutecznie zaktualizować to do pracy z Yosemite. Jakieś sugestie?
wst
1
@wst Hm, wygląda podstępnie. Wygląda na to, że kliknięcie odsłoniętego elementu paska menu nic już nie robi - może zrobić dobry raport o błędzie .
jtbandes
3

Żadne, o czym wiem (i tak naprawdę myślę, że posiadanie szybkiego wpisu na Twitterze / Facebooku w obszarze powiadomień jest w rzeczywistości głupie (powinien być naprawdę widżetem), a ja go wyłączyłem), ale możesz użyć wiersza polecenia, aby oba wysyłają przeczytane tweety, jak wspomniano na tej stronie, wyciągi poniżej:


Aby wyświetlić listę tweetów (zamień osxdaily na twitterową nazwę użytkownika):

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

Aby zaktualizować status twittera:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml
farsz
źródło
Obszar wprowadzania tekstu był tym, który miałem nadzieję wykorzystać. Będę musiał zagłębić się w dokumenty paska uruchamiania i sprawdzić, czy pomysł curl ma jakieś nogi ... Myślałem, że wyłączają wysyłanie hasła w sposób wyraźny - więc dzięki za to!
bmike
Myślę, że wyłączyli wysyłanie hasła dla klientów korzystających z interfejsu API (zastępując go metodą uwierzytelniania klucza), ale w efekcie korzystanie ze strony internetowej nie jest klientem, więc użycie nazwy użytkownika / hasła jest prawdopodobnie w porządku. W rzeczywistości, jeśli jesteś już zalogowany na aktywnej sesji i cookies etc, może pracować nawet bez nich ... (zgadywanie)
stuffe
Nie sądzę, że pliki cookie są udostępniane między Safari i curl. I tak nie powinno być.
olivier
2
Twitter w pełni przeszedł na logowanie oparte na OAuth i wyłączył podstawowe uwierzytelnianie 30 czerwca 2010 r. Drugie polecenie w odpowiedzi nie działało od tego czasu.
Mathias Bynens,
3

Przechodząc o krok dalej i łącząc to, czego do tej pory się nauczyliśmy, oto w pełni programowy 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

Oczywiście jest to kruche, ale na razie działa. Chciałbym znaleźć prawdziwy haczyk, ale skrypty interfejsu użytkownika to obejście.

Daniel
źródło
Och, fajnie. Logiczne jest, że ⇧⌘D wyśle ​​tweet (to skrót do Send in Mail).
jtbandes
1
Znalazłem to przez pomyłkę. Pamięć mięśniowa jest potężna.
Daniel
3

Genialne przesunięcie dowodzenia D.

Dodawanie:

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
źródło
1

Napisałem inny skrypt, który naprawia niektóre problemy w skrypcie opublikowanym przez Ewwis:

  • Nie było sposobu, aby zamknąć okno dialogowe na początku.
  • Działanie drugiego kliknięcia nie działało, jeśli Centrum powiadomień nie było wyświetlane po ostatnim logowaniu.
  • Skrypt nie działał, gdy pojawiło się opóźnienie przed wyświetleniem widoku tworzenia tweeta. Jeśli zawierał już jakiś tekst, nie został wyczyszczony.
  • Polecenie klawisza działa tylko w celu wstawiania znaków, które można wprowadzić za pomocą bieżącej metody wprowadzania.
  • Pasek boczny Centrum powiadomień na końcu nie był zamknięty.

Jednak nie działa, gdy pasek boczny Centrum powiadomień jest otwarty.

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

Łatwiej byłoby po prostu użyć interfejsu API .

Lri
źródło
Hmm - będę musiał zajrzeć do API. To plus mój program uruchamiający, Launchbar byłby znacznie lepszy niż skrypty interfejsu użytkownika. +1 i być może nowa najlepsza odpowiedź.
bmike
0

Fantastyczny! Dzięki za pokazanie światu innej drogi.

Moje rozwiązanie zadziałało dla MNIE, ale wasze też.

FAR nie jestem ekspertem od Applescript, ale uwielbiam się z tym bawić.

Dzięki!

Korzystając z tego, czego się od ciebie nauczyłem, oto inny sposób, który działa dla mnie. Nie rozwiązuje to niektórych obaw związanych z alternatywnymi klawiaturami lub błędami, ale może rzuci światło na kogoś, kto się bawi w 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
źródło