2010-06-21 21 views
5

Estoy tratando de publicar en twitter. Tengo la aplicación ya autenticada y ahora quiero publicar una actualización.Twitter, oauth y coldfusion

Esto es lo que mi post http está en:

<cfhttp url="http://api.twitter.com/1/statuses/update.json" method="post"> 
<cfhttpparam type="header" name="status" value="#urlEncodedFormat('my test post')#" /> 
<cfhttpparam type="header" name="oauth_consumer_key" value="xxx" /> 
<cfhttpparam type="header" name="oauth_nonce" value="xxx" /> 
<cfhttpparam type="header" name="oauth_signature_method" value="#urlEncodedFormat('HMAC-SHA1')#" /> 
<cfhttpparam type="header" name="oauth_token" value="xxx" /> 
<cfhttpparam type="header" name="oauth_timestamp" value="#GetTickCount()#" /> 
<cfhttpparam type="header" name="oauth_version" value="1.0" /> 
</cfhttp> 

Alguien ha hecho esto? ¿Estoy yendo por la ruta correcta?

+1

GetTickCount() devuelve en milisegundos, api espera segundos, así que no olvides el div 1000. – Henry

+0

Alguien ha escrito un CFC para su uso con Twitter. ¿Has echado un vistazo a eso? http://twittercomponent.riaforge.org/ – ale

+0

Andy, no ofrece una solución sino una observación: su código anterior muestra el uso de #urlEncodedFormat ('HMAC-SHA1') #, pero eso parece indicar un malentendido. El arg de esa función es una URL para formatear, y aunque se necesita un segundo argumento para indicar un charest, eso no sería válido. Espero que los otros indicadores de posibles soluciones hayan ayudado. ¿Alguna vez resolviste cosas? –

Respuesta

3

¿Has leído esto?

http://dev.twitter.com/pages/auth#auth-request

que necesita para construir la "cadena de base de firma" y puesto como cuerpo (advertencia: código no probado, por CF8 +)

<cffunction name="makeSignatureBaseString" returntype="string" output="false"> 
    <cfargument name="httpMethod" type="string" required="true"> 
    <cfargument name="baseUri" type="string" required="true"> 
    <cfargument name="values" type="struct" required="true"> 

    <cfset var signatureBaseString = "#httpMethod#&#URLEncodedFormat(baseUri)#&"> 
    <cfset var keys = StructKeyArray(values)> 
    <cfset var key = ""> 

    <cfset ArraySort(keys, "textNoCase")> 
    <cfloop array="#keys#" index="key"> 
    <cfset signatureBaseString &= URLEncodedFormat("&#key#=#values[key]#")> 
    </cfloop> 

    <cfreturn signatureBaseString> 
</cffunction> 

-

<!--- using values from http://dev.twitter.com/pages/auth#auth-request ---> 
<cfset params = { 
    oauth_consumer_key = "GDdmIQH6jhtmLUypg82gる", 
    oauth_nonce = "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y", 
    oauth_signature_method = "HMAC-SHA1", 
    oauth_token = "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw", 
    oauth_timestamp = "1272325550", 
    oauth_version = "1.0" 
}> 

<cfhttp url="http://api.twitter.com/1/statuses/update.json" method="POST"> 
<cfloop collection="#params#" item="key"> 
    <cfheader type="header" name="#key#" value="#params[key]#"> 
</cfloop> 

<!--- add status to the params for makeSignatureBaseString() ---> 
<cfset params.status = "setting up my twitter 私のさえずりを設定する"> 

<cfhttpparam type="body" 
    value="#makeSignatureBaseString('POST', 'http://api.twitter.com/1/statuses/update.json', params)#"> 
</cfhttp> 
Cuestiones relacionadas