2010-06-21 40 views
5

Twitter'a posta göndermeye çalışıyorum. Uygulamanın zaten kimliği doğrulanmış ve şimdi bir güncelleme göndermek istiyorum.Twitter, oauth ve coldfusion

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

Herkes bu yapılır:

Bu benim http yazılan altındadır nedir? Doğru yoldan mı düşüyorum?

+1

GetTickCount() döndürür milisaniye olarak, api saniyeler bekler, bu yüzden 1000'i unutmayı unutmayın. – Henry

+0

Birisi Twitter ile kullanmak için bir CFC yazmıştır. Buna bir göz attın mı? http://twittercomponent.riaforge.org/ – ale

+0

Andy, bir çözüm değil bir gözlem sunma: Yukarıdaki kod #urlEncodedFormat ('HMAC-SHA1') # kullanımını gösterir, ancak bu bir yanlış anlama olduğunu gösterir. Bu işlevin argümanı formatlanacak bir URL'dir ve bir charest'i göstermek için 2. argümanı alırken, bu geçerli bir sayı değildir. Umarım olası çözümler için diğer işaretçiler yardımcı olmuştur. Hiç bir şeyi çözdün mü? –

cevap

3

bunu okuyor musunuz?

Eğer organ olarak "imza taban dize" ve yazı oluşturmak gerekir

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

(uyarı: denenmemiş kod, CF8 + için)

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