微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 谷歌Api Auth Http模块错误

我正在制作我的第一个应用程序,使用Google Api for Calendar.我在https://developers.google.com/google-apps/calendar/instantiate阅读了Google示例

我第一次运行下面的程序是成功的.我允许我的应用访问我的Google帐户,应用程序在我的app-directory中创建了一个带有auth信息的calendar.dat文件.在我重命名文件后,代码在auth停止工作.我已经完全删除文件并从头开始重新创建,但错误仍然存​​在.

我仍然可以获得Google身份验证页面,但仍然可以确认访问权限,之后我收到一条消息,说明身份验证流程已完成.

这是代码(我用我的应用详细信息填写的标准Google示例):

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run

FLAGS = gflags.FLAGS

# Set up a Flow object to be used if we need to authenticate. This
# sample uses OAuth 2.0,and we set up the OAuth2WebServerFlow with
# the information it needs to authenticate. Note that it is called
# the Web Server Flow,but it can also handle the flow for native
# applications
# The client_id and client_secret are copied from the API Access tab on
# the Google Apis Console
FLOW = OAuth2WebServerFlow(
    client_id='YOUR_CLIENT_ID',client_secret='YOUR_CLIENT_SECRET',scope='https://www.googleapis.com/auth/calendar',user_agent='YOUR_APPLICATION_NAME/YOUR_APPLICATION_VERSION')

# To disable the local server feature,uncomment the following line:
# FLAGS.auth_local_webserver = False

# If the Credentials don't exist or are invalid,run through the native client
# flow. The Storage object will ensure that if successful the good
# Credentials will get written back to a file.
storage = Storage('calendar.dat')
credentials = storage.get()
if credentials is None or credentials.invalid == True:
  credentials = run(FLOW,storage)

# Create an httplib2.Http object to handle our HTTP requests and authorize it
# with our good Credentials.
http = httplib2.Http()
http = credentials.authorize(http)

# Build a service object for interacting with the API. Visit
# the Google Apis Console
# to get a developerKey for your own application.
service = build(serviceName='calendar',version='v3',http=http,developerKey='YOUR_DEVELOPER_KEY')

这是输出

Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth? (auth url shortened)

If your browser is on a different machine then exit and re-run this
application with the command-line parameter 

  --noauth_local_webserver

Traceback (most recent call last):
  File "C:\Users\Desktop\Google Drive\Code\Python\Rooster\calendar.py",line 2,in __init__.py",line 42,in oauth2client\util.py",line 120,in positional_wrapper
    return wrapped(*args,**kwargs)
  File "C:\Python27\lib\site-packages\google_api_python_client-1.0-py2.7.egg\oauth2client\tools.py",line 169,in run
    credential = flow.step2_exchange(code,http=http)
  File "C:\Python27\lib\site-packages\google_api_python_client-1.0-py2.7.egg\oauth2client\util.py",**kwargs)
  File "C:\Python27\lib\site-packages\google_api_python_client-1.0-py2.7.egg\oauth2client\client.py",line 1128,in step2_exchange
    http = httplib2.Http()
AttributeError: 'module' object has no attribute 'Http'
最佳答案
问题是在运行目录中有一个名为calendar.py的文件.当Google的httplib2想要导入标准日历模块时,它会获得本地日历模块.在本地,它执行它来执行导入.但由于httplib2尚未完全导入,因此calendar.py代码无法正常工作.
只需将calendar.py重命名为myCalendar.py.

原文地址:https://www.jb51.cc/python/439389.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐