プログラムでツイートできるようにするために、通知センター/ Twitterにはどのようなフックがありますか?


12

LaunchBarのカスタムアクションを設計して、そのユーティリティからツイートを開始できるようにしたいと考えています。通知センターには「クリックしてツイート」ボタンがあるため、プログラムの開発者がこのアクションを実行する関数を追加するのを待たずにスクリプトを作成できるフックが通知センターにあるかどうか疑問に思いました。


2
Notification CenterにはAppleScript辞書、Automatorアクションはなく、悲しいことに、実行可能バンドルを突っ込んだときに現れる明らかなフックがほとんどありません。
ダニエル

1
の文字列ダンプは、「ShareKit」と呼ばれるもの、さまざまなsharingService関数、および「Share Widget」と呼ばれるものがあることを示唆しています。
ダニエル

明日は素晴らしい答えを掘り下げる時間がありますが、それが得られるかもしれない追加の露出のためにこれを賞賛したかったです。
bmike

回答:


9

アプリは、新しい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の更新で壊れる可能性が高いですが、おそらく簡単に修正されるでしょう。)


2
また、keystrokeコマンドを使用すると、テキストでツイートを開始できます。プログラムでツイートを完了するには…
ダニエル

Yosemiteで動作するようにこれを更新しようとして失敗しました。助言がありますか?
wst

1
@wst Hm、トリッキーに見えます。露出したメニューバー項目をクリックしても何も起こらないようです。良いバグレポートになるかもしれません。
jtbandes

3

私が知っていることはありません(実際、通知エリア内に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のアイデアに何か足があるかどうかを確認する必要があります。
bmike

APIを使用するクライアントへのパスワード送信の使用を無効にした(キー認証メソッドに置き換えている)と思いますが、これは実際にはクライアントではなくWebサイトを使用しているため、ユーザー名/パスワードを使用するのが適切です。実際、アクティブなセッションやCookieなどを使用して既にログインしている場合は、それらがなくても機能する場合があります...(推測)
12

Safariとの間でCookieが共有されるとは思わないcurl。とにかく、そうであってはなりません。
オリビエ

2
Twitterは2010年6月30日にOAuthベースのログインに完全に切り替わり、基本認証を無効にしました。それ以降、回答の2番目のコマンドは機能していません。
マティアスバイネンズ

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スクリプトは回避策です。


ああ、きちんとした。logicalDがツイートを送信するのは論理的です(これがメールで送信のショートカットです)。
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が投稿したスクリプトのいくつかの問題を修正する別のスクリプトを作成しました。

  • 開始時にダイアログを閉じる方法はありませんでした。
  • 最後のログイン後に通知センターが表示されていなかった場合、2番目のクリックアクションは機能しませんでした。
  • ツイートを作成するビューが表示される前に遅延があると、スクリプトは機能しませんでした。すでにテキストが含まれている場合、クリアされませんでした。
  • キーストロークコマンドは、現在の入力方法で入力できる文字を挿入する場合にのみ機能します。
  • 通知センターのサイドバーは最後に閉じられませんでした。

ただし、通知センターのサイドバーが開いている場合は機能しません。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.