Quais ganchos existem no Centro de Notificação / twitter para que eu possa twittar programaticamente?

12

Estou procurando especificamente criar uma ação personalizada para o LaunchBar para que eu possa iniciar um tweet a partir desse utilitário. Como o Notification Center possui um botão "Clique para twittar", perguntei-me se o Notification Center tinha algum gancho que me permitisse escrever isso sem esperar pelo desenvolvedor do programa adicionar uma função para executar esta ação.

bmike
fonte
2
Notificação Centro não tem AppleScript dicionário, há ações do Automator e, infelizmente pouco na forma de ganchos óbvias que aparecem quando cutucando em torno do pacote executável.
Daniel
1
Um despejo de strings das sugestões sugere que há algo chamado "ShareKit", várias funções sharingService e algo chamado "Widget de compartilhamento" - talvez algum subconjunto disso possa ser útil de alguma forma.
Daniel
Amanhã terei tempo de encontrar as ótimas respostas, mas gostaria de recompensá-lo por qualquer exposição adicional que possa ganhar.
bmike

Respostas:

9

Os aplicativos podem se conectar às opções de compartilhamento com a nova API NSSharingService . Ele soa como ações Launchbar personalizados podem ser feitas com qualquer arquivo executável UNIX, então você provavelmente poderia escrever uma ferramenta de linha de comando pequena (ou você pode precisar criar um aplicativo real - você terá que testá-lo) que ativa essa API ( usando NSSharingServiceNamePostOnTwitter) e que deve exibir a caixa de diálogo do tweet.

Atualização: para iniciar um tweet a partir do AppleScript, você pode fazer o seguinte:

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

Além disso, você pode alternar o modo "Mostrar alertas e faixas" / não perturbe:

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

(Tudo isso é muito específico ao layout atual da janela do Notification Center e provavelmente romperá com futuras atualizações do OS X - mas provavelmente haverá correções fáceis.)

jtbandes
fonte
2
E um keystrokecomando pode iniciar o Tweet com texto. Agora, para concluir programaticamente o Tweet ...
Daniel
Estou tentando, sem êxito, atualizar isso para trabalhar com o Yosemite. Alguma sugestão?
WST
1
@ Wst Hm, parece complicado. Parece que clicar no item exposto da barra de menus não faz mais nada - pode ser um bom relatório de erro .
jtbandes
3

Nada que eu conheça (e na verdade acho que ter uma área de postagem rápida do Twitter / Facebook dentro da área de notificações é realmente idiota (deve ser realmente um widget), e eu o desativei), mas você pode usar a linha de comando para os dois enviam tweets de leitura, conforme mencionado nesta página da web, extratos abaixo:


Para exibir uma lista de tweets (substitua osxdaily por um nome de usuário do Twitter de sua escolha):

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

Para atualizar seu status do twitter:

curl -u your_user:your_password -d status='This is My update' https://twitter.com/statuses/update.xml
abafar
fonte
A área de entrada de texto era a parte que eu esperava usar. Vou ter que pesquisar nos documentos da barra de lançamento e ver se a ideia de ondulação tem alguma perna ... Eu pensei que eles desativaram o envio de uma senha de forma clara - então, obrigado por isso!
bmike
Eu acho que eles desativaram o uso de envio de senha para clientes que usam a API (substituindo-o pelo método de autenticação de chave), mas isso é, de fato, usar o site que não é um cliente, portanto, usar o nome de usuário / senha provavelmente é bom. Na verdade, se você já está logado com uma sessão ativa e biscoitos etc, pode mesmo trabalho sem eles ... (adivinhação)
stuffe
Não acho que os cookies sejam compartilhados entre o Safari e curl. E eles não deveriam ser, de qualquer maneira.
Olivier
2
O Twitter mudou totalmente para logons baseados em OAuth e desabilitou a autenticação básica em 30 de junho de 2010. O segundo comando na sua resposta não funcionou desde então.
Mathias Bynens
3

Levando tudo isso um passo adiante e reunindo o que aprendemos até agora, aqui está um tweet totalmente programático:

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

Claro que isso é frágil, mas por enquanto funciona. Eu adoraria encontrar um gancho real , mas os scripts de interface do usuário são uma solução alternativa.

Daniel
fonte
Oh, legal. É lógico que wouldD envie o tweet (esse é o atalho para Send in Mail).
Jtbandes
1
Achei por engano. A memória muscular é poderosa.
Daniel
3

Shift de comando brilhante D.

Adicionando:

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
fonte
1

Escrevi outro script que corrige alguns problemas no script postado por Ewwis:

  • Não havia como fechar a caixa de diálogo no início.
  • A ação do segundo clique não funcionaria se a Central de Notificações não tivesse sido exibida após o último login.
  • O script não funcionou quando houve um atraso antes que a exibição para compor um tweet fosse exibida. Se já continha algum texto, não foi limpo.
  • O comando pressionamento de tecla funciona apenas para inserir caracteres que podem ser inseridos com o método de entrada atual.
  • A barra lateral do Centro de Notificação não estava fechada no final.

Porém, ele não funciona quando a barra lateral do Notification Center está aberta.

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

Seria mais fácil usar apenas a API .

Lri
fonte
Hmm - eu vou ter que olhar para a API. Além do meu iniciador, o Launchbar seria muito melhor que o script da interface do usuário. +1 e possivelmente uma nova melhor resposta.
bmike
0

Fantástico! Obrigado por mostrar ao mundo outro caminho.

Minha solução funcionou para mim, mas a sua também.

Não sou especialista em Applescript da FAR, mas adoro brincar com isso.

Obrigado!

Usando o que aprendi com você, aqui está outra maneira que funciona para mim. Isso não aborda algumas de suas preocupações sobre teclados ou erros alternativos, mas talvez isso ajude alguém que se interessa pelo 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
fonte