2012-08-06 59 views
0

我想在python中創建泛型類,它將執行所有oAuth過程,然後將允許從任何oAuth支持服務(例如Twitter,LinkedIn)檢索數據。無法從Twitter使用access_token檢索認證數據

編輯: 我有客戶密鑰和密碼並訪問令牌密鑰和密碼,當我試圖要求任何資源請求我收到以下錯誤: {"error":"Could not authenticate with OAuth.","request":"\/1\/statuses\/retweeted_by_me.json}」

任何想法,爲什麼?

我的代碼是:

import httplib 
import time 
import oauth as oauth 

# settings for the local test consumer 
SERVER = 'api.twitter.com' 

RESOURCE_URL = 'https://api.twitter.com/1/statuses/retweeted_by_me.json' 

CONSUMER_KEY = 'MY_CUSTOMER_KEY' 
CONSUMER_SECRET = 'MY_CUSTOMER_SECRET' 
ACCESS_TOKEN_KEY = 'MY_ACCESS_TOKEN_KEY' 
ACCESS_TOKEN_SECRET = 'MY_ACCESS_TOKEN_SECRET' 

# example client using httplib with headers 
class SimpleOAuthClient(oauth.OAuthClient): 

    def __init__(self, server): 
     self.server = server 
     self.connection = httplib.HTTPSConnection(self.server) 

    def access_resource(self, oauth_request): 
     # via post body 
     # -> some protected resources 
     self.connection.request(oauth_request.http_method, RESOURCE_URL) 
     response = self.connection.getresponse() 
     return response.read() 

def run_example2(): 
    print '** OAuth Python Library Example **' 
    client = SimpleOAuthClient(SERVER,) 
    consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET) 
    signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1() 
    pause() 

    # access some protected resources 
    print '* Access protected resources ...' 
    pause() 
    token = oauth.OAuthToken('ACCESS_TOKEN_KEY', 'ACCESS_TOKEN_SECRET') 
    oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, http_method='GET', http_url=RESOURCE_URL) 
    oauth_request.sign_request(signature_method_hmac_sha1, consumer, token) 
    print 'REQUEST (via post body)' 
    print 'parameters: %s' % str(oauth_request.parameters) 
    pause() 
    params = client.access_resource(oauth_request) 
    print 'GOT' 
    print 'non-oauth parameters: %s' % params 
    pause() 


def pause(): 
    print '' 
    time.sleep(1) 

if __name__ == '__main__': 
    run_example2() 
    print 'Done.' 

回答

0

我設法通過改變self.connection.request(oauth_request.http_method, RESOURCE_URL) 解決它self.connection.request(oauth_request.http_method, oauth_request.to_url())

注意如果oauth_request.http_method是GET

1

AUTHORIZATION_URL = 'https://api.twitter.com/oauth/authenticate'

這是不正確的URL中使用的的OAuth。如果您查看Twitter的3-legged OAuth documentation,他們會聲明「使用GET oauth /授權端點而不是/ oauth/authenticate」。將URL更改爲「https://api.twitter.com/oauth/authorize」,然後重試。

+0

不,它不工作,將只會工作。另外,我編輯了這個問題,並簡化了代碼 – zohar 2012-08-07 06:09:28