martes, 5 de abril de 2011

Updating Twitter from the database, using PL/SQL and OAuth.

Hace poco trate de hacer un ejemplo con de actualizar el estado de twitter desde la base de datos y me encontré con que el api que ocupaba antes ya no funcionaba y el único error que me mandaba es que el método de autentificación básico ya no está siendo soportado. Y yo me dije que tan difícil puede ser el nuevo método . . . Bueno pues difícil no es (Aplausos) , en realidad ahora es más talachudo, porque lo que antes se hacía con un par de llamadas a las funciones nativas de la base de datos, ahora se tiene que hacer  un conjunto de operaciones más complejas, incluso ya hay quienes desarrollaron una opción http://somecodinghero.blogspot.com/2010/09/updating-twitter-from-database-using.html
Y esta funciona, sin embargo me encontré con que no tenía permisos para una de las funciones que mencionan, adicionalmente de que esta opción requería un poco más de investigación, por lo que decidi optar por la otra cara de la moneda y la que siempre nos dice para que te cansas si yo ya lo hice:
“JAVA”

Y como Oracle ya compro java pues dije vamos a darle una oportunidad.
Paso A paso:
1.- Registrar la aplicación: Ir a la siguiente dirección https://dev.twitter.com/

2.- Una vez registrada guardar los datos de nuestra aplicación recién creada, si nos da flojera siéntanse con la libertad de utilizar los datos de la mía, solo recuerden que está diseñada para tipo cliente.

3.- Descargar la última versión estable del api de java http://twitter4j.org/en/index.html
 (Twitter4J is an opensourced software and free of charge.
You can use Twitter4J freely for any commercial and non-commercial projects.) Gratis pues!!,
En el caso de este proyecto se utilizó la versión 2.2.1, pero al ser puramente java, la base aceptara todo sin mayor problema.
Una vez que se ha descargado el api de java hay que desomprimirlo y buscar el siguiente jar:
twitter4j-core-2.2.1.jar
4.-Subir el api a la base de datos:
Este jar se sube a una ruta que pueda leer su servidor de base de datos.
Se ejecuta el siguiente comando en el servidor. “Esta es la parte que realmente es importante”
loadjava twitter4j-core-2.2.1.jar -user user/pwd –f
loadjava es el commando que se utiliza para subir al servidor los archivos de java y convertirlos en objetos de base de datos.
Disponibles para ser publicados a pl/sql o utilizados por otros proyectos de java.
Recordemos que la base de datos de Oracle es muy poderosa, pero que pasa si solo saben lo básico de sql y mucho de java el resultado es sorprendente créanme, porque el Oracle permite sqlj “Obvio” que es una forma de mesclar dentro de los programas de java sentencias de sql como si fuera pl/sql al grado que ya no sabes en que estas programando jejeje.
Hummm hummm bueno regresando al proyecto. Una vez que suban el api, los objetos de esta aparecerán todos inválidos, por lo que queda como labor de nosotros recompilarlos todos , si alguien conoce la sentencia correcta de loadjava para evitar esto por favor postéalo para poder corregir esta parte tan tediosa .
5.-Recompilar el Api, es un poco burdo, pero lo que fue más rápido para mí fue:
SELECT 'alter java class "'||ja.name||'" resolve;'
   FROM ALL_JAVA_CLASSES ja
   WHERE  NAME LIKE 'twit%'
Y el resultado de este query ejecutarlo varias veces hasta reducir el número de objetos inválidos al menor numero posible.
6.-Una vez que el api esta valida en su mayoría (Existen algunos que no pude lograr validar). Podemos comenzar a utilizarla.

El objeto que se creo basándome en los ejemplos que trae consigo el api fue el siguiente:



public final class XXX_JTWEET{
public static String update_status(String argument) 
/* update_status funciona tal cual el ejemplo es hard code, pero ayuda mucho a ver como funciona por lo que la dejo para su uso posterior*/
         public static String get_auth_url(String l_proxy ,String l_proxy_user ,String l_proxy_pass ,String l_proxy_port ,String l_AuthConsumerKey ,String l_ConsumerSecret ,String l_user  ,String l_password )



/* get_auth_url esta función reducida nos regresa la url sobre la que se debe autorizar el acceso de la aplicación a nuestra cuenta de twitter*/

String set_status(String l_proxy
,String l_proxy_user
,String l_proxy_pass
,String l_proxy_port
,String l_AuthConsumerKey
,String l_ConsumerSecret
,String l_token
,String l_token_secret
,String l_access_token
,String l_access_token_secret
,String l_pin
,String l_status
)
}
/* set_status con la información obtenida de la página da autorización publica el estatus en el twitter*/


El proyecto completo y las instrucciones de cómo usarlo se encuentran disponibles en



Ejemplo:


/*enciendan dbms ouput para ver los resultados*/

/*esta parte del codigo unicamente es para cuando registran su programa ante twitter*/

declare

RetVal varchar2(4000);

begin

dbms_output.put_line(XXX_JTWEET_PKG.INITIALIZE (1));

dbms_output.put_line(xxx_jtweet_pkg.get_auth_url(false));

COMMIT;

END;

/



/*una vez que van a la pagina que les regreso el programa anterior deben ingresar el codigo que
       les regreso al programa, este paso se realiza una sola vez
*/

begin

xxx_jtweet_pkg.SET_PIN('2667137');

commit;

end;



/*Así es como deberían enviar los mensajes a twitter desde sus programas */



begin

/*al inicio del programa */

dbms_output.put_line(XXX_JTWEET_PKG.INITIALIZE (1));

/*Cada vez que desean mandar algo*/

dbms_output.put_line(xxx_jtweet_pkg.UPDATE_STATUS('hi from plsql v1.16'));

end;






Cualquier duda que tengan no duden en hacérmela llegar por medio del blog.
         Una vez mas los archivos del proyecto se encuentran disponibles en: http://sourceforge.net/projects/ora-tweet/
 Repasemos rápidamente antes de terminar. lo que se nesecita para poder realizar el uso del api de twitter es:
         Consumer Secret/*Los obtienes al registrar el APP*/
         AuthConsumerKey /*Los obtienes al registrar el APP*/
         Request token /¨*Lo obtienes cuando se genera el auth url*/
         Request token secret  /¨*Lo obtienes cuando se genera el auth url*/
        pin /*Se obtiene al ingresar n la tienda de musical pin a la oauth url*/
        access_token /*Se obtiene al ingresar el pin a la oauth url*/
        access_token_secret  /*Se obtiene al ingresar el pin a la oauth url*/
Ahora si felices Tweets

 

No hay comentarios:

Publicar un comentario