2016-07-30 37 views
1

我正在写一个小型python脚本,它将检索我的Google联系人列表(使用Google Contacts API),并随机提示一个人给我联系(与朋友保持自动联系的好方法!)授权python脚本访问GData API而不使用OAuth2用户流

这只是一个独立的脚本,我计划在cron作业上安排。问题在于Google似乎需要OAuth2风格的身份验证,用户(我)必须批准访问,然后应用程序才会收到授权令牌,然后我可以使用该令牌来查询用户的(我的)联系人。

由于我只访问自己的数据,有没有办法“预先授权”我自己?理想我很乐意能够检索一些授权令牌,然后我会运行脚本,并通过该令牌可变

AUTH_TOKEN=12345 python my_script.py 

这样,它不要求用户输入的环境/交互授权它一次。

回答

1

您正在描述的实现会调用完全“三足”OAuth握手,这需要用户的明确同意。如果您不需要用户的同意,则可以改为通过Google service account使用“双腿”OAuth,该Google service account应用绑定,而不是用户。一旦您的服务帐户granted permission访问您的联系人,您可以使用oauth2clientServiceAccountCredentials class直接访问GData而无需用户的同意。

下面是来自Google service account documentation两足认证例如:

import json 

from httplib2 import Http 

from oauth2client.service_account import ServiceAccountCredentials 
from apiclient.discovery import build 

scopes = ['https://www.googleapis.com/auth/sqlservice.admin'] 

credentials = ServiceAccountCredentials.from_json_keyfile_name(
     'service-account.json', scopes) 

sqladmin = build('sqladmin', 'v1beta3', credentials=credentials) 
response = sqladmin.instances().list(project='examinable-example-123').execute() 

print response 
+0

谢谢!这就说得通了。小的跟进 - 我链接到的Google Contacts API页面中的python示例似乎使用'gdata' python库(例如'import gdata.contacts.client')。你提供的例子似乎使用'oauth2client'和'apiclient'库。 'gdata'库是否仅支持您描述的完整的三段式认证,还是有办法让我仍然使用'gdata' python客户端库的服务帐号/两段认证方法?试图更好地理解为什么似乎有两个库都访问相同的API – user2490003

+1

我不确定'gdata'库是否支持这两种方法,但'oauth2client'库是由Google创建和开发的。也就是说,'gdata'库文档[日期到2007年](https://developers.google.com/gdata/articles/python_client_lib),而'oauth2client'库似乎[主动支持](https:// developers.google.com/api-client-library/python/guide/aaa_oauth)截至2016年年中。 – zeantsoi

相关问题