Какие хуки существуют в Центре уведомлений / твиттере, так что я могу твитовать программно?

12

Я специально планирую разработать пользовательское действие для LaunchBar, чтобы я мог инициировать твит из этой утилиты. Поскольку в Центре уведомлений есть кнопка «Нажмите, чтобы написать в Твиттере», мне было интересно, есть ли в Центре уведомлений какие-либо хуки, которые позволили бы мне писать сценарии, не дожидаясь, пока разработчик программы добавит функцию для выполнения этого действия.

bmike
источник
2
В Центре уведомлений нет словаря AppleScript, действий Automator и, к сожалению, мало очевидных хуков, которые появляются при работе с исполняемым пакетом.
Даниэль
1
Дамп строки предлагает, что есть что-то под названием «ShareKit», различные функции sharedService и что-то под названием «Share Widget» - возможно, некоторая часть этого может быть полезна.
Даниэль
У меня будет время покопаться в хороших ответах завтра, но я хотел щедро заплатить за любую дополнительную информацию, которую он может получить.
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 - но, вероятно, будут простые исправления.)

jtbandes
источник
2
И keystrokeкоманда может начать твит с текстом. Теперь, чтобы программно завершить твит ...
Даниэль
Я безуспешно пытался обновить это для работы с Yosemite. Какие-либо предложения?
WST
1
@ Wst Хм, выглядит сложно. Кажется, что нажатие на открытую строку меню больше ничего не делает - может стать хорошим сообщением об ошибке .
января
3

Ничего из того, что я знаю (и на самом деле я думаю, что наличие области быстрой публикации Twitter / Facebook внутри области уведомлений на самом деле глупо (на самом деле это должен быть виджет), и я ее отключил), но вы можете использовать командную строку для оба отправляют прочитанные твиты, как указано на этой веб-странице, выдержки ниже:


Чтобы отобразить список твитов (замените osxdaily на имя пользователя твиттера по вашему выбору):

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
stuffe
источник
Область ввода текста была тем битом, который я надеялся использовать. Мне нужно будет покопаться в документации по панели запуска и посмотреть, есть ли у идеи скручивания какие-либо ножки ... Я думал, что они отключили эту передачу пароля в открытом виде - так что спасибо за это!
bmike
Я думаю, что они отключили использование отправки пароля для клиентов, которые используют API (заменив его методом аутентификации по ключу), но это, по сути, использование веб-сайта, а не клиента, так что использование имени пользователя / пароля, вероятно, хорошо. Фактически, если вы уже вошли в систему с активным сеансом, файлом cookie и т. Д., Он может даже работать без них ... (
догадка
Я не думаю, что файлы cookie распространяются между Safari и curl. И так не должно быть.
Оливье
2
Twitter полностью переключился на OAuth-входы и отключил базовую аутентификацию 30 июня 2010 года. С тех пор вторая команда в вашем ответе не сработала.
Матиас Биненс
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 Scripting - это обходной путь.

Даниэль
источник
О, аккуратно. Логично, что ⇧⌘D отправит твит (это ярлык для отправки по почте).
jtbandes
1
Нашел это по ошибке. Мышечная память мощная.
Даниил
3

Блестящая командная смена Д.

Добавление:

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
источник
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 .

LRI
источник
Хм - мне придется заглянуть в 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
Ewwis
источник