Atualizando o Twitter com Groovy

Alguns dizem que o Twitter vai substituir o blogging eu particularmente acredito que uma coisa não substitui a outra. Até por que a idéia do twitter é atualização simples e freqüente e o blogging é maior volume de informação com menos freqüência.

O Twitter é extremamente útil para passar pequenas informações ou dicas, como por exemplo links de artigos, atualizações de software entre tantas outras coisas. Vou mostrar como é fácil atualizar o seu twitter com um script groovy.

O Twitter tem uma API REST para acesso as suas informações. Vamos utilizar essa API para atualizar o seu twitter através de um script. Você poderia fazer mais coisas, pois a api permite diversas operação em cima da sua conta no Twitter.

Para tal feito vou utilizar um modulo extra do Groovy que é o HttpBuilder, como o nome já diz é um builder que tem capacidade de trabalhar com requisições http através dos métodos POST e GET utilizando JSON ou XML.



package com.blogspot.diegopacheco.httpbuildergroovytwitter.model

import groovy.swing.*
import java.awt.*
import java.awt.event.*
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*

/**
* Script Groovy que atualiza seu stuts no Twitter via HttpBuilder.
*
* @author Diego Pacheco
* @version 1.0
* @since 30/03/2009
*
*/

def builder = new SwingBuilder()
def frame   = builder.frame(title:'HttpBuilder Twitter Updater',visible: false,pack: true) {
borderLayout()
textArea(id: 'updateTextfield',columns: 40,rows: 15,constraints: BorderLayout.NORTH)
button(text:'Update',actionPerformed: {

def http = new HTTPBuilder('http://twitter.com/statuses/')
http.auth.basic 'seuUsuarioDoTwitter','suaSenhaDoTwitter'

http.request( POST, XML ) { req ->
uri.path = 'update.xml'
send URLENC, [status: builder.updateTextfield.text , source:'httpbuilder']
req.params.setBooleanParameter 'http.protocol.expect-continue', false
response.success = { resp, xml ->                      
assert resp.statusLine.statusCode == 200
javax.swing.JOptionPane.showMessageDialog(null,"Update realizado com sucesso!")
}
}

},constraints:BorderLayout.SOUTH)
}

Toolkit tk = Toolkit.getDefaultToolkit()
Dimension screenSize = tk.getScreenSize()
frame.setLocation((int) (screenSize.width / 2.8), (int) (screenSize.height / 4))
frame.setVisible(true)

Se você rodar esse código ira aparecer um JFrame do Swing com um JTextArea para você digitar o conteúdo e o botão para você enviar a atualização. Esse script usa o SwingBuilder para montar a interface e o HttpBuilder para realizar o post no twitter.

Para que o script funcione você deve informar no código o seu usuário e senha do twitter onde diz: seuUsuarioDoTwitter e suaSenhaDoTwitter.

As depêndencias em termos de jars são:
  • commons-beanutils-1.7.0.jar
  • commons-codec-1.3.jar
  • commons-collections-3.2.jar
  • commons-logging-1.1.1.jar
  • httpclient-4.0-beta2.jar
  • httpcore-4.0-beta3.jar
  • json-lib-2.2.2-jdk15.jar
  • nekohtml-1.9.9.jar
  • xercesImpl-2.8.1.jar
  • xml-apis-1.3.03.jar
  • http-builder-0.5.0-SNAPSHOT.jar
Se você não quer a interface gráfica e prefere executar a atualização do twitter via console pode usar este outro script a baixo.

package com.blogspot.diegopacheco.httpbuildergroovytwitter.model

import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*

/**
* Script Groovy que atualiza seu stuts no Twitter via HttpBuilder pelo console.
* Sendo que você executa assim: groovy updateConsoleTwitter.groovy usuario senha "texto"
*
* @author Diego Pacheco
* @version 1.0
* @since 30/03/2009
*
*/
public class updateConsoleTwitter{
public static void main(String []args){
def http = new HTTPBuilder('http://twitter.com/statuses/')
http.auth.basic args[0],args[1]

http.request( POST, XML ) { req ->
uri.path = 'update.xml'
send URLENC, [status: args[2] , source:'httpbuilder']
req.params.setBooleanParameter 'http.protocol.expect-continue', false
response.success = { resp, xml ->                      
assert resp.statusLine.statusCode == 200
println "Update realizado com sucesso!"
}
}
}
}

Para usar esse script você executa no console o seguinte:
groovy updateConsoleTwitter.groovy usuario senha "texto de atualizacao"

Claro que você deve ter configurado tanto o $JAVA_HOME quanto o $GROOVY_HOME. Se você não gosta de Groovy e quer fazer isso via Java ainda é possível, você pode usar a API do Twitter4J. O código com esse cara fica assim:

package com.blogspot.diegopacheco.jtwittertest.test;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

/**
* Teste com o jtwitter
*
* @author Diego Pacheco
* @version 1.0
* @since 30/03/2009
*
*/
public class TwitterUpdate {

public static void main(String[] args) {

Twitter twitter = new Twitter("seuUsuario", "suaSenha");
Status status   = null;

try {
status = twitter.update("Reading Groovy blogs.");
} catch (TwitterException e) {
e.printStackTrace();
}

System.out.println("Successfully updated the status to [" + status.getText() + "].");   
}
}

Você poderia juntar esse script com o que mostrei no post anterior sobre Subversion e fazer com que os commits do subversion virasem atualizações no Twitter. Esse pode ser um recurso bem interessante, neste caso poderiamos incrementar o script para que só os comentários com o token [TW] fossem ao twitter, assim ao comittar o desenvolvedor poderia escolher se aquilo é visivel ou não ao mundo.

Popular posts from this blog

C Unit Testing with Check

Having fun with Zig Language

HMAC in Java