2010-06-21 29 views
5

Tôi đang cố gắng đăng lên twitter. Tôi đã xác thực ứng dụng và bây giờ muốn đăng cập nhật.Twitter, oauth và coldfusion

Đây là những gì bài http tôi là tại địa chỉ:

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

Có ai làm điều này? Tôi có đi đúng tuyến đường không?

+1

GetTickCount() trả về tính bằng mili giây, api hy vọng giây, vì vậy đừng quên div 1000. – Henry

+0

Ai đó đã viết một CFC để sử dụng với Twitter. Bạn đã xem cái đó chưa? http://twittercomponent.riaforge.org/ – ale

+0

Andy, không cung cấp giải pháp nhưng quan sát: mã của bạn ở trên cho thấy việc sử dụng #urlEncodedFormat ('HMAC-SHA1') #, nhưng điều đó dường như chỉ ra một sự hiểu lầm. Hàm arg cho hàm đó là một URL được định dạng và trong khi cần một đối số thứ 2 để biểu thị một từ khóa, đó sẽ không phải là một giá trị hợp lệ. Hy vọng các con trỏ khác để giải pháp có thể đã giúp. Bạn đã bao giờ giải quyết mọi thứ? –

Trả lời

3

bạn đã đọc sách này chưa?

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

bạn cần phải xây dựng các "chuỗi cơ sở chữ ký" và sau khi cơ thể (cảnh báo: Mã chưa được kiểm tra, cho 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> 
Các vấn đề liên quan