0

すべてのoAuthプロセスを実行し、oAuthサポートサービス(Twitter、LinkedInなど)からデータを取得できるようにする汎用クラスをPythonで作成しようとしています。

編集: 顧客キーとシークレット、およびアクセス トークン キーとシークレットを持っていますが、リソース リクエストをリクエストしようとすると、次のエラーが表示されます: {"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.'
4

2 に答える 2

1

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

これは、OAuth に使用する URL として正しくありません。Twitter の3-legged OAuth documentationを見ると、「/oauth/authenticate の代わりに GET oauth/authorize エンドポイントが使用されている」と記載されています。URL を「https://api.twitter.com/oauth/authorize」に変更して、もう一度お試しください。

于 2012-08-06T17:39:24.497 に答える
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 の場合にのみ機能することに注意してください

于 2012-08-07T10:23:05.833 に答える