我正在尝试下载我的用户可以看到的谷歌日历列表。我已经设置了一个服务帐户,并且我有以下代码(适用于分析API的其他帐户):
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
import pprint
def prepare_credentials():
f = file(keyFilePath, 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
service_account_email_address, key,
scope='https://www.googleapis.com/auth/calendar.readonly')
return credentials
http = httplib2.Http()
credentials = prepare_credentials()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)
httpRequest = service.calendarList().list()
data = httpRequest.execute()
pprint.pprint(data)
这导致:
{u'etag': u'"YXs7dfDSFSFD9F0k/sofIhuT4dSLyxKaRH7vNpx5BOEU"',
u'items': [],
u'kind': u'calendar#calendarList',
u'nextSyncToken': u'00001405024697194000'}
问题是,我知道我可以访问日历,我甚至使用了这个页面的“尝试它!”部分:https://developers.google.com/google-apps/calendar/v3/reference/calendarList/list,它返回预期的结果,大约10个日历。我尝试了不同版本的范围参数(‘https://www.googleapis.com/auth/calendar.readonly’和[‘https://www.googleapis.com/auth/calendar’、‘https://www.googleapis.com/auth/calendar.readonly’),我还尝试将我自己的电子邮件地址添加为“prn”和“sub”参数,所有这些都会给我“访问拒绝”错误。我不明白为什么我可以使用我的服务号获得授权,但无法实际查看结果,而这些结果可以通过不同的身份验证方法清晰地查看。
我做错了什么?
经过一些挖掘,您可以允许您域外的用户(api服务帐户)访问google日历。
在中检查以下设置:Google Admin、Google Apps、Calendar、Share Settings,然后选择以下选项之一:
( ) Only free/busy information (hide event details) Default
( ) Share all information, but outsiders cannot change calendars
(X) Share all information, and outsiders can change calendars
( ) Share all information, and allow managing of calendars
然后,您可以在与特定人员共享
下的每个单独的日历共享设置中将您的日历共享到api服务
这是如何帮助别人的。
只有使用此用户的凭据执行呼叫时,才能看到特定用户的日历列表。服务帐户将始终为您提供属于该服务帐户的日历列表。如果您想访问日历列表,我建议您对您的帐户使用Oauth2令牌。
只是想用我最终使用的解决方案更新这个问题。
如果您希望服务帐户能够在日历上拥有所有者权限,那么似乎唯一的方法是在作为服务帐户进行身份验证时使用API创建辅助日历(https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert). 服务帐户没有其所有者的任何主日历,但它将是新的辅助日历的所有者。
然后可以使用访问控制规则APIendpoint(https://developers.google.com/google-apps/calendar/v3/reference/acl/insert)使用您自己的Google帐户(或任何可以登录以在浏览器中查看日历的非服务帐户)共享此日历。新用户也可以设置为所有者。
编辑:以下解决方案不准确。
这不是问题,但我在任何地方都找不到,我想人们可能会想知道,所以我也在这里回答:
如果您希望与会者在插入或更新活动时收到电子邮件通知,那么将“sendNotifications”参数设置为True并不是唯一需要做的事情。与该用户共享日历后,用户还需要进入服务帐户日历的“日历设置”,并在“提醒和通知”选项卡中激活电子邮件通知。
编辑:这是不准确的。任何更改设置以在此日历上接收通知的人都会收到通知,无论他们是否被邀请参加活动。我还没有找到通过带有服务号的API邀请人们参加活动的方法,并且只有受邀者收到邀请电子邮件。我将在StackOverflow上就此提出另一个问题。
[root@externalsystem~]#curl-xpost-h'请求:{“request”:“prepareandexecute”,“connectionid”:“000000-0000-0000-00000000”,“stateMentID”:12345,“sql”:“select*FROM questtweets1”,“maxrowcount”:1}'http://here.comes
我正在创建一个Android应用程序,它使用BLE与MCU进行通信,目前我可以使用我的应用程序与MCU建立连接,但当我试图发现并获取设备的服务时,我返回了一个空数组,并且不确定原因。 输出: 09-26 16:33:09.648 10917-10931/bamboomobile.medheadI/TAG:连接到GATT服务器。 09-26 16:33:09.648 10917-10931/bamb
我试图在我的代码中实现这个引导表,但我最不喜欢它。在添加行侧页码“server”之前,我将返回结果。那我什么也得不到。代码 服务器端代码 我花了两天时间摆弄这张桌子。请,任何有经验的人,任何形式的帮助或指导都将不胜感激。
我一直在使用异步任务来访问web服务器,并使用结果更新控件。这有缺点,即它使异步方法特定于控件,并阻止我再次使用返回的字符串。 我的典型asyncTask代码如下
问题内容: 我的样子 当我看起来像 我有一条路线 我的控制器看起来像 当我运行我的应用程序时,我看到console.log为 我在这里做错了什么? 问题答案: 是异步的。它立即返回一个空数组,并在响应到达时稍后从请求中添加结果- 来自http://docs.angularjs.org/api/ngResource.$resource: 重要的是要意识到调用$ resource对象方法会立即返回空引
本文向大家介绍Dapper.NET 执行不返回任何结果的命令,包括了Dapper.NET 执行不返回任何结果的命令的使用技巧和注意事项,需要的朋友参考一下 示例