我一直在使用netflix api和python oauth2库的受保护身份验证。我发出签名请求没有问题,但是,为了允许用户使用其netflix帐户登录,尝试获取access_token时遇到了一些问题,我知道在某些情况下OAuth不会返回,即使它应该如此,但是从netflix的授权页面重定向后,我得到的是这样的内容:verifier验证者为空。

我是图书馆的新手,当http://127.0.0.1:5000/authorized_user?oauth_token=some_token&oauth_verifier=不存在时,我还是不太明白该怎么办。从那以后,我成功地将用户重定向到netflix登录/授权页面。我认为我的错误来自这一步骤,而我对此并不完全了解。下面是我正在尝试的简化(外壳)版本。我希望朝正确的方向前进,我阅读了netflix文档并阅读了库文档,但不知道该怎么做。

# Get request token (temporary)
resp, content = client.request(REQUEST_TOKEN_URL, "GET")

if resp['status'] != '200':
    raise Exception("Invalid response %s." % resp['status'])

request_token = dict(parse_qsl(content))

print 'Request token'
print  '  --> oauth_token          =  %s' % request_token['oauth_token']
print  '  --> oauth_token_secret   =  %s' % request_token['oauth_token_secret']
print  '  --> login_url            =  %s' % request_token['login_url']

# Redirect to netflix for user authorization

print 'Go to the following link: '
login_url = request_token['login_url']
access_token_url = '%s&oauth_consumer_key=%s' % (login_url, CONSUMER_KEY)

accepted = 'n'
while accepted.lower() == 'n':
    accepted = raw_input('Have you authorized me? (y/n) ')

resp, content = client.request(access_token_url, "POST")

token = oauth.Token(request_token['oauth_token'],
                    request_token['oauth_token_secret'])

client = oauth.Client(consumer, token)

resp, content = client.request(access_token_url, "POST")
access_token = dict(parse_qsl(content))

print "Access Token:"
print "    - oauth_token        = %s" % access_token['oauth_token']
print "    - oauth_token_secret = %s" % access_token['oauth_token_secret']

最佳答案

因此,听起来您正在尝试使用python-oauth2。不幸的是,该库被广泛认为是废弃软件。我强烈建议使用维护的库。为此,我可以推荐rauth。我是rauth的维护者,物有所值。

不幸的是,现在Netflix不接受OAuth基础结构中的新应用程序。但是我确实为您编写了一个示例,如果您愿意尝试一下rauth,可以尝试一下。我不能保证如果不进行一些调整就不会起作用,但是这里是:

from rauth import OAuth1Service

import re
import webbrowser

request_token_url = 'http://api-public.netflix.com/oauth/request_token'
access_token_url = 'http://api-public.netflix.com/oauth/access_token'
authorize_url = 'https://api-user.netflix.com/oauth/login'
base_url = 'http://api-public.netflix.com/'

netflix = OAuth1Service(consumer_key='123',
                        consumer_secret='456',
                        request_token_url=request_token_url,
                        authorize_url=authorize_url,
                        access_token_url=access_token_url,
                        base_url=base_url)

request_token, request_token_secret = netflix.get_request_token()

oauth_callback = 'http://example.com/oauth/authorized'

params = {'oauth_callback': oauth_callback, 'application_name': 'your_app'}
authed_url = netflix.get_authorize_url(request_token, **params)

print 'Visit this URL in your browser: ' + authed_url
webbrowser.open(authed_url)

url_with_token = raw_input('Copy URL from your browser\'s address bar: ')
request_token = re.search('\?oauth_token=([^&]*)', url_with_token).group(1)

s = netflix.get_auth_session(request_token, request_token_secret)

r = s.get('users/current')
print r.content


这里有两点需要注意:Netflix在其文档中未提及验证程序。所以我想这就是为什么您看不到的原因。其次,他们在原地返回“授权”请求令牌。基本上,此令牌会替换其流程中的验证程序引脚。

希望这可以帮助!

关于python - oauth2库和Netflix API返回无访问 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15756287/

10-08 22:44