2010-06-21 16 views
5

Próbuję publikować w serwisie Twitter. Mam już uwierzytelnioną aplikację i chcę opublikować aktualizację.Twitter, oauth i coldfusion

To właśnie mój post jest na http:

<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> 

Czy ktoś to zrobić? Czy idę właściwą drogą?

+1

GetTickCount() zwraca w milisekundach api oczekuje sekund, więc nie zapomnij podzielić 1000. – Henry

+0

Ktoś napisał CFC do użytku z Twitterem. Czy spojrzałeś na to? http://twittercomponent.riaforge.org/ – ale

+0

Andy, nie oferując rozwiązania, ale obserwację: powyższy kod pokazuje użycie #urlEncodedFormat ("HMAC-SHA1") #, ale wydaje się to wskazywać na nieporozumienie. Argumentem do tej funkcji jest adres URL, który ma być sformatowany, a podczas gdy drugi argument wskazuje na charest, nie byłby prawidłowy. Mam nadzieję, że pomogły inne wskazówki dotyczące możliwych rozwiązań. Czy kiedykolwiek rozwiązałeś problemy? –

Odpowiedz

3

Czy to czytasz?

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

trzeba skonstruować "Podpis bazowy ciąg" i post jako ciała (uwaga: kod niesprawdzone, dla 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>