Acerca de
Curriculum Vitae
Blog
Artículos


Actualizar Estatus de Twitter desde la línea de Comandos (y desde Autohotkey)
Introducción

Recientemente la empresa en donde trabajo bloqueo el acceso a la página de Twitter, en realidad no actualizo mi estatus en Twitter muy seguido, y aunque en mi circulo mas cercano de conocidos todavia no lo utiliza tan seguido como yo quisiera, pienso seguir usandolo , me gusta bastante todo el concepto de Microbloging.

Asi que buscando en Internet me encontre con estas dos ligas:

Command Line Twitter Client
Scripting Twitter with cURL

en las cuales se explica como actualizar el estatus de Twitter desde la línea de comandos, utilizando el comando de Linux curl y el API de Twitter

Actualizando estatus con curl desde la línea de comandos

Basicamente lo que hay que hacer es invocar la URL http://twitter.com/statuses/update.json con cURL enviandole el parametro status y validando el nombre de usuario y contraseña

La instrucción es la siguiente:



$ curl --basic --user "twitter_username:twitter_password" --data-ascii "status=Probando Twitter desde la linea de comandos con curl" "http://twitter.com/statuses/update.json"

No voy a explicar aqui todas las opciones de curl porque la herramienta es muy extensa, pero a grandes rasgos lo que estamos haciendo es validando el nombre de usuario y contraseña y posteriormente un post a http://twitter.com/statuses/update.json (parte del API de Twitter)

El problema de utilizar este enfoque es que si lo hago desde mi equipo, curl se intentara conectar por http y ese servicio es el que esta bloqueado desde mi PC, pero lo que si puedo hacer, es conectarme a un servidor remoto a traves del puerto 22 y ejecutar la instrucción desde el servidor.
Una opción sería conectarme al servidor cada vez que quiera actualizar mi estatus o alternativamente puedo utilizar la herramienta plink con la cual puedo ejecutar comandos en el servidor remoto. De tal forma que para poder conectarme al equipo remoto y ejecutar la instrucción curl en una sola línea tendría que ejecutar:



$ plink -v -pw remote_password remote_user@direccion_IP "curl --basic --user \"twitter_username:twitter_password\" --data-ascii \"status=Desde Plink tambien se puede ejecutar el comando de forma remota \" \"http://twitter.com/statuses/update.json\" "

Utilizando AutoHotkey como GUI

Ahora cada vez que quiera actualizar mi estatus tendría que estar ejecutando una linea de comando muy larga, sería mucho mas comodo si pudieramos ejecutar el comando desde una interfaz grafica, una forma muy rapida de hacerlo es utilizar las funciones para GUI del AutoHotkey.
A continuación un script muy sencillo de AutoHotkey para hacer el post:


;TwitterPost.ahk - Script para actualización de estatus de Twitter con curl y GUI de AutoHotkey

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
Gui, Add, Edit, Limit140 vEstatus,
Gui, Add, Button, default, OK
Gui, Show
return

GuiClose:
ButtonOK:
Gui, Submit Run, c:\plink -v -pw PASSWORD user@DIRECCION_IP "curl --basic --user \"twitter_username:twitter_password\" --data-ascii \"status=%Estatus% \" \"http://twitter.com/statuses/update.json\" "
ExitApp




Post a Twitter con GUI
Actualizar estatus de Twitter con GUI

Por último si queremos leer el timeline de Twitter desde la línea de comandos:


$ curl -u twitter_username:twitter_password http://twitter.com/statuses/friends_timeline/twitter_username.rss | grep description

Y el respectivo cliente de AutoHotkey:

;TwitterRead.ahk - Script para leer estatus de Twitter de un usuario en particular
SendMode Input
SetWorkingDir %A_ScriptDir%

RunWait, %comspec% /c c:\plink -v -pw remote_password remote_user@direccion_IP "curl -u twitter_username:twitter_password http://twitter.com/statuses/friends_timeline/marioalberto.rss | grep description" > c:\twitt.txt, , min
FileRead, FileContents, C:\twitt.txt
Gui, Add, Text, W540 R30 vMyEdit
GuiControl,, MyEdit, %FileContents%
Gui, Add, Button, default, OK
Gui, Show
return

GuiClose:
ButtonOK:
ExitApp


Leyendo el Timeline de Twitter con GUI
Leyendo el Timeline de Twitter con GUI


Notese que los resultados de twitter son entregados en formato RSS y que no estoy haciendo ningun parseo del RSS, unicamente obtengo las lineas con los mensajes utilizando un grep.
Para probar el código no olvides cambiar todo lo que esta en negritas por tus propios datos.

7 Comentario(s)
killko-2009-08-31 18:06:13
Me parece un manual exelente, lleno de informacion valioza, gracias por compartirla

Mario-2009-09-01 15:20:55
Que bueno que te sirvio.

Saludos

Magui-2010-03-04 14:01:57
Muchas gracias, a mi también me sirvio de mucho... saludos y mas de estos manuales :D

g0h4n-2010-05-28 06:11:35
Mil gracias, me ha servido mucho porque estaba teniendo problemas con la implementación que estaba utilizando el LogFactory y sin lo que he encontrado aquí hubiera tardado una eternidad. saludos

Julio Ángeles-2010-12-09 18:30:18
Hola que tal, tengo un problema al ejecutar mi programa como jar, me aparece el error:

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>FOR %i IN
(D:IN*.txt) DO java -jar GeneraFactura.jar %i

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101123_0000107.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101123_0000110.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101124_0000112.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101124_0000114.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101125_0000115.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101125_0000116.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101125_0000117.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101130_0000118.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101130_0000119.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101130_0000120.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>java -jar
GeneraFactura.jar D:IN20101130_0000121.txt
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
at bb.banbajio.GeneraFactura.Servicio.(Servicio.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFacto
ry
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Could not find the main class: bb.banbajio.GeneraFactura.Servicio. Program will
exit.

C:UsersPinKinDesktopFacturaBatchFacturaResultadoGeneraFactura2>pause
Presione una tecla para continuar . . .

fer_117-2011-10-11 17:21:17
hola mira soy nuevo y ya llebo un rato peliandome con el log4j el problema es que no tencuentro el paquete org.apache.commons ya descargue varios jars del log4j pero en ninguno lo e ayado ayudenme por favor

increase backlinks-2012-02-04 17:24:00
whats up www.marioalberto.com.mx owner discovered your site via search engine but it was hard to find and I see you could have more visitors because there are not so many comments yet. I have discovered site which offer to dramatically increase traffic to your blog http://xrumerservice.org they claim they managed to get close to 1000 visitors/day using their services you could also get lot more targeted traffic from search engines as you have now. I used their services and got significantly more visitors to my website. Hope this helps :) They offer best backlink service Take care. Jason


Agregar Comentarios:
Nombre/Alias:
Email:
Url:
Comentarios:
Escribe las palabras (es para evitar spam):
© Copyright Mario Alberto Ramirez, todos los derechos reservados