通知中心/ twitter中存在哪些挂钩,以便我可以通过编程方式进行鸣叫?


12

我特别希望为LaunchBar设计自定义操作,以便可以从该实用程序启动推文。由于Notification Center具有“单击鸣叫”按钮,因此我想知道Notification Center是否具有任何挂钩,这些挂钩可让我编写脚本而无需等待程序开发人员添加执行该操作的功能。


2
通知中心没有AppleScript字典,没有Automator动作,而且在戳可执行文件包时,几乎没有出现明显的钩子。
丹尼尔

1
字符串的转储建议有一个叫做“ ShareKit”的东西,各种shareingService函数,还有一个叫做“ Share Widget”的东西-也许其中的一些子集可能会有所帮助。
丹尼尔

明天我将有时间深入探讨出色的答案,但我想悬赏这笔钱可能会获得更多的机会。
bmike

Answers:


9

应用程序可以使用新的NSSharingService API 进入共享选项。这听起来像自定义启动栏动作可以与任何UNIX可执行文件进行,所以你很可能写一个小的命令行工具(或者您可能需要建立一个实际的应用程序-你必须对它进行测试)激活这个API(使用NSSharingServiceNamePostOnTwitter),然后应显示tweet对话框。

更新:要从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

(这都是非常特定于Notification Center当前窗口布局的,很可能会随将来的OS X更新而中断-但可能会有简单的修复程序。)


2
而一个keystroke命令就可以开始鸣叫了文本。现在以编程方式完成Tweet…
丹尼尔

我一直在尝试将其更新为与优胜美地一起使用而未成功。有什么建议么?
2015年

1
@wst Hm,看起来很棘手。似乎单击暴露的菜单栏项目不再起作用-可能会产生良好的错误报告
jtbandes

3

我所不知道的(事实上,我认为在通知区域内有一个Twitter / Facebook 快速发布区域实际上是愚蠢的(确实应该是一个小部件),并且我已将其关闭),但是您可以使用命令行来都发送了一条读取的推文,如网页所述,摘录如下:


要显示推文列表(用您选择的Twitter用户名替换osxdaily):

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

要更新您的Twitter状态:

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

文本输入区是我希望使用的位。我必须深入研究启动栏文档,看看curl想法是否有任何作用……。我以为他们禁止了明文发送密码的功能,所以谢谢!
bmike

我认为他们禁止使用API​​的客户端使用密码发送(用密钥身份验证方法代替),但这实际上是使用网站而不是客户端,因此使用用户名/密码可能很好。实际上,如果您已经使用活动会话和cookie等登录,那么即使没有它们,它也可能会起作用...(猜测)
塞斯特

我不认为Safari&之间共享cookie curl。无论如何,它们不应该如此。
olivier 2012年

2
Twitter于2010年6月30日完全切换为基于OAuth的登录并禁用了基本身份验证。此后,您的答案中的第二条命令一直无效。
Mathias Bynens'8

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发送推文(这是“邮件发送”的快捷方式),这是合乎逻辑的。
jtbandes 2012年

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发布的脚本中的某些问题:

  • 一开始没有办法关闭对话框。
  • 如果上次登录后未显示通知中心,则第二次单击操作不起作用。
  • 当显示撰写推文的视图出现延迟时,脚本不起作用。如果已经包含一些文本,则不会清除。
  • keystroke命令仅适用于插入可以使用当前输入法输入的字符。
  • 通知中心侧栏最后没有关闭。

但是,当“通知中心”侧边栏处于打开状态时,它不起作用。

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会比UI脚本好得多。+1可能是一个新的最佳答案。
bmike

0

太棒了!感谢您以另一种方式向世界展示。

我的解决方案适用于我,但您的也适用。

我不是FAR的Applescript专家,但我喜欢摆弄它。

谢谢!

使用我从您那里学到的知识,这是对我有用的另一种方法。这不能解决您对备用键盘或错误的某些担忧,但也许可以为涉足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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.