LaunchBarのカスタムアクションを設計して、そのユーティリティからツイートを開始できるようにしたいと考えています。通知センターには「クリックしてツイート」ボタンがあるため、プログラムの開発者がこのアクションを実行する関数を追加するのを待たずにスクリプトを作成できるフックが通知センターにあるかどうか疑問に思いました。
LaunchBarのカスタムアクションを設計して、そのユーティリティからツイートを開始できるようにしたいと考えています。通知センターには「クリックしてツイート」ボタンがあるため、プログラムの開発者がこのアクションを実行する関数を追加するのを待たずにスクリプトを作成できるフックが通知センターにあるかどうか疑問に思いました。
回答:
アプリは、新しいNSSharingService APIを使用して共有オプションにフックできます。それはのように聞こえる(このAPIを活性化する-カスタムLaunchBarにアクションが任意のUNIX実行ファイルで行うことができますが、おそらく小さなコマンドラインツールを書くことができ(あなたがそれをテストする必要がありますか、実際のアプリケーションを構築する必要があるかもしれません)ので、 )を使用する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の更新で壊れる可能性が高いですが、おそらく簡単に修正されるでしょう。)
keystroke
コマンドを使用すると、テキストでツイートを開始できます。プログラムでツイートを完了するには…
私が知っていることはありません(実際、通知エリア内にTwitter / Facebook クイックポストエリアを置くことは実際には馬鹿げている(本当にウィジェットになるはずです)と私はオフにしています)が、コマンドラインを使用してこの Webページで言及されているように、両方とも以下の抜粋を読んでツイートを送信します。
ツイートのリストを表示するには(osxdailyを任意のtwitterユーザー名に置き換えます):
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
。とにかく、そうであってはなりません。
これをさらに一歩進め、これまでに学んだことをまとめると、完全にプログラム的なツイートがあります。
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
追加:
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が投稿したスクリプトのいくつかの問題を修正する別のスクリプトを作成しました。
ただし、通知センターのサイドバーが開いている場合は機能しません。
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を使用する方が簡単です。
素晴らしい!別の方法で世界を見せてくれてありがとう。
私のソリューションは私にとってはうまくいきましたが、あなたにとってもそうです。
私は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