jueves, septiembre 02, 2010

Twitter y OAuth

A partir del 1 de septiembre, Twitter obliga a sus usuarios del API conectar con OAuth, en vez del sistema antiguo de conectar con el usuario y contraseña.

La verdad, para que funcionara en Coldfusion, no fue tarea facil pero gracias a un par de blogs le he conseguido.

1. Registra tu applicación con Twitter aqui y guarda los dos valores Consumer Key y Secret. Yo lo guarde en una base de datos.

2. Descarga Twitter4J , es facil instalar, es solo copiar twitter4j.jar en C:\ColdFusion8\lib o tu equivalente y después reinicia CF.

3. Esta parte, solo hay que hacerlo UNA VEZ, para conseguir 2 claves más.

a) Crea un archivo IniciarTwitter.cfm con el codigo siguiente. (Este es el archivo que insertas en Call Back URL, cuando creas la applicación en Twitter en el paso 1)


<cfparam name="Url.oauth_token" default="">
<cfquery name="qTwitterData" datasource="ds">
SELECT TwitterCKey, TwitterCSecret
FROM TwitterData
</cfquery>
<cfif qTwitterData.TwitterCKey NEQ "" and qTwitterData.TwitterCSecret NEQ "">
<cfset TwitterObject=CreateObject("java", "twitter4j.Twitter")>
<cfset TwitterObject.setOAuthConsumer(qTwitterData.TwitterCKey ,qTwitterData.TwitterCSecret)>
<cfif Url.oauth_token EQ "">
<cfset RequestTokenObject=TwitterObject.getOAuthRequestToken()>
<cfset Session.RequestToken=RequestTokenObject.getToken()>
<cfset Session.RequestTokenSecret=RequestTokenObject.getTokenSecret()>
<cflocation url="#RequestTokenObject.getAuthorizationURL()#" addtoken="No">
<cfelse>
<cfset AccessTokenObject=TwitterObject.getOAuthAccessToken(Session.RequestToken,Session.RequestTokenSecret)>
<cfquery name="qInsertarTwitterData" datasource="ds">
UPDATE TwitterData
SET TwitterAccessToken='#AccessTokenObject.getToken()#',
TwitterAccessTokenSecret='#AccessTokenObject.getTokenSecret()#'
</cfquery>
</cfif>
</cfif>


b) Basicamente, lo que hace este código es usar tus Consumer Key y Secret Key, y genera un Access Key y Access Token, y con los cuatro datos, ya puedes empezar a usar Twitter API.
La primera vez tienes que autorizar la cuenta de Twitter manualmente.

4. Con los 4 variable puedes usar los muchos metodos de Twitter.
(CKey,CSecret,AToken,ATokenSecret viene de la base de datos donde grabaste en el paso anterior)


<cfparam name="Url.Message" default="">
<cfif Len(Url.Message)>
<cfset TwitterObject=CreateObject("java", "twitter4j.Twitter")>
<cfset TwitterObject.SetOAuthConsumer(CKey,CSecret)>
<cfset TwitterObject.SetOAuthAccessToken(AToken,ATokenSecret)>
<cfset Answer=TwitterObject.UpdateStatus(Url.Message)>
</cfif>