Які гачки існують у Центрі сповіщень / щебетачі, щоб я міг твітувати програмно?


12

Я спеціально прагну розробити власну дію для LaunchBar, щоб я міг ініціювати твіт із цієї утиліти. Оскільки в Центрі сповіщень є кнопка "Клацніть на твіт", я поцікавився, чи в Центрі сповіщень є гачки, які дозволяли б мені це сценарій, не чекаючи, коли розробник програми додасть функцію для виконання цієї дії.


2
Центр сповіщень не має словника AppleScript, жодних дій Автоматизатора, і, на жаль, мало очевидних гачків, які з’являються під час копання виконуваного пакету.
Даниїл

1
Дамп рядків говорить про те, що існує щось, що називається "ShareKit", різні функції sharedService і щось, що називається "Віджет для спільного використання" - можливо, якийсь підмножина цього може якось корисно.
Даниїл

Я встигну завтра розібратися у чудових відповідях, але я хотів збагатити це за будь-яке додаткове опромінення, яке воно може отримати.
bmike

Відповіді:


9

Програми можуть підключитися до параметрів спільного доступу за допомогою нового API NSSharingService . Це здається, що власні дії LaunchBar можна робити з будь-яким виконуваним файлом UNIX, тому ви, ймовірно, можете написати невеликий інструмент командного рядка (або, можливо, вам знадобиться створити фактичний додаток - вам доведеться його перевірити), який активує цей API ( використовуючи NSSharingServiceNamePostOnTwitter), і це повинно відображати діалог твіт.

Оновлення: щоб ініціювати твіт із AppleScript, можна зробити наступне:

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

Крім того, ви можете перемикати режим "Показувати сповіщення та банери" / не турбувати режим:

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

(Це все дуже специфічно для поточного макета вікон Центру сповіщень і, ймовірно, може порушитися з майбутніми оновленнями OS X - але, ймовірно, будуть прості виправлення.)


2
І keystrokeкоманда може почати щебетати з тексту. Тепер для програмного завершення щебетування…
Даніель

Я безуспішно намагався оновити це для роботи з Yosemite. Будь-які пропозиції?
wst

1
@wst Hm, виглядає хитро. Здається, що натискання експонованого пункту меню більше нічого не робить - може скласти хороший звіт про помилку .
jtbandes

3

Жоден, про який я знаю (і насправді я думаю, що наявність зони швидкої публікації Twitter / Facebook у зоні сповіщень насправді німа (це дійсно має бути віджет), і я її вимкнув), але ви можете використовувати командний рядок, щоб обидва надсилають прочитані твіти, як зазначено на цій веб-сторінці, витяги нижче:


Щоб відобразити список твітів (замініть osxdaily на ім’я користувача twitter):

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

Щоб оновити статус твіттера:

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

Область введення тексту була біткою, яку я сподівався використати. Мені доведеться зануритися в документи запуску і побачити, чи є в ідеї про завивку ніжки .... Я подумав, що вони відключили це надсилання пароля в чіткість - тож дякую за це!
bmike

Я думаю, що вони відключили використання паролів для клієнтів, які використовують API (замінивши його методом автентифікації ключів), але це фактично використання веб-сайту, а не клієнта, тому використання імені користувача / пароля, ймовірно, добре. Насправді, якщо ви вже ввійшли в систему за допомогою активного сеансу та файлів cookie тощо, вони можуть працювати навіть без них ... (здогадки)
stuff

Я не думаю, що файли cookie діляться між Safari & curl. Та й у будь-якому разі їх не повинно бути.
олів'є

2
Twitter повністю перейшов на вхід на базі OAuth та відключив основну автентифікацію 30 червня 2010 року. Друга команда у вашій відповіді з тих пір не працює.
Mathias Bynens

3

Зробивши все це на крок далі і об'єднавши все, про що ми дізналися дотепер, ось цілком програмний твіт:

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

Звичайно, це крихко, але наразі це працює. Я хотів би знайти справжній гачок, але сценарій UI - це обхідний шлях.


О, акуратне. Логічно, що ⇧⌘D надіслав твіт (це ярлик для Send in Mail).
jtbandes

1
Знайшли це помилково. М’язова пам’ять потужна.
Даніель

3

Блискучий командний зсув D.

Додавання:

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

Я написав ще один сценарій, який вирішує деякі проблеми в сценарії, опублікованому Ewwis:

  • Не вдалося закрити діалог на початку.
  • Дія другого натискання не працює, якщо Центр сповіщень не був показаний після останнього входу.
  • Сценарій не працював, коли була затримка перед тим, як було показано подання для створення твіту. Якщо він вже містив якийсь текст, він не був очищений.
  • Команда натискання клавіш працює лише для вставки символів, які можна ввести поточним методом введення.
  • Бічна панель сповіщень наприкінці не була закрита.

Він не працює, якщо відкрита бічна панель Центру сповіщень.

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

Простіше було б просто скористатися API .


Хм - мені доведеться заглянути в API. Крім того, мій пусковий апарат Launchbar був би набагато кращим, ніж сценарій інтерфейсу. +1 і, можливо, нова найкраща відповідь.
bmike

0

Фантастичний! Дякуємо, що показали світові інший шлях.

Моє рішення працювало на мене, але так само і на вашому.

Я не фахівець з Applescript від FAR, але люблю хитатися з цим.

Спасибі!

Використовуючи те, що я дізнався від вас, ось ще один спосіб, який працює для мене. Це не стосується деяких ваших занепокоєнь щодо альтернативних клавіатур або помилок, але, можливо, це пролиє світло для того, хто б'є в 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.