Foursquare API Python访问令牌错误

3 投票
1 回答
1284 浏览
提问于 2025-04-17 18:02

我正在尝试通过Python从Foursquare的API获取访问令牌。

我使用的是这个库:https://github.com/mLewisLogic/foursquare,并且按照这个网站上提到的方法操作:http://log.hckr.org/2012/02/01/foursquare-api-wrapper-for-python

但是,在执行access_token = client.oauth.get_token('XX_CODE_RETURNED_IN_REDIRECT_XX')时,我遇到了以下错误:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\site-packages\foursquare\__init__.py", line 135, in get_token
    response = _request_with_retry(url)
  File "C:\Python27\lib\site-packages\foursquare\__init__.py", line 707, in _request_with_retry
    return _process_request_with_httplib2(url, data)
  File "C:\Python27\lib\site-packages\foursquare\__init__.py", line 733, in _process_request_with_httplib2
    raise FoursquareException(u'Error connecting with foursquare API')
FoursquareException: Error connecting with foursquare API

我不确定这个错误是因为httplib2库的问题,还是其他什么原因!

有没有人有解决办法?

1 个回答

1

看起来你选择的这个工具可能有点过时了。

如果你愿意尝试一个更通用的OAuth解决方案,我可以推荐rauth。Rauth是一个简单的OAuth 1.0/a和2.0客户端,它是基于Requests库构建的。基本上,你需要做的就是把FourSquare设置为一个服务。我们可以像这样修改我们为rauth提供的Facebook示例:

from rauth import OAuth2Service

import re
import webbrowser

# Get a real client_id and client_secret from:
# https://developer.foursquare.com/overview/auth#registration

foursquare = OAuth2Service(
    client_id=xxx,
    client_secret=xxx,
    name='foursquare',
    authorize_url='https://foursquare.com/oauth2/authenticate',
    access_token_url='https://foursquare.com/oauth2/access_token',
    base_url='https://api.foursquare.com/v2/')

# This should redirect to your app, may function as a demo
# without updating, but be sure to update once you're done
# experimenting!
redirect_uri = 'https://example.com/'

params = {'response_type': 'token',
          'redirect_uri': redirect_uri}

authorize_url = foursquare.get_authorize_url(**params)

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

url_with_code = raw_input('Copy URL from your browser\'s address bar: ')
access_token = re.search('\#access_token=([^&]*)', url_with_code).group(1)
session = foursquare.get_session(access_token)

user = session.get('users/self').json()['response']['user']

print 'currently logged in as: ' + user['firstName']

我没有运行过这段代码,但你可以试试看(记得在服务构造函数里填入你自己的凭证,也就是client_idclient_secret参数,只有这样代码才能正常运行)。祝你好运,如果你决定试试,记得告诉我结果哦!

顺便说一下,我是rauth的维护者。

撰写回答