您可以从此link使用google-calerdar-api。
我使用此代码(python3.X)获取Windows 10上日历的数据。
Python代码:
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/calendar'
def main():
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('./credentials.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('calendar', 'v3', http=creds.authorize(Http()))
print('Getting the upcoming 10 events')
events_result = service.events().list(calendarId='primary', alwaysIncludeEmail=True,
timeMin='2017-01-01T00:00:00+09:00',timeMax='2019-01-05T23:59:59+09:00',
maxResults=10, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
if not events:
print('No upcoming events found.')
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
print(start, event['summary'])
if __name__ == '__main__':
main()
当我第一次使用此api的示例代码时,此信息会出现在pycharm控制台中。
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?client_id=1132573726-nu1pktj3jt03qjigful1cq32p97eu.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&access_type=offline&response_type=code
If your browser is on a different machine then exit and re-run this
application with the command-line parameter
--noauth_local_webserver
然后我点击了我的帐户。
在此页面上,我单击了Allow
。
然后浏览器显示该消息。
然后pycharm的控制台显示如下:
Authentication successful.
Getting the upcoming 10 events
2018-01-15T08:30:00+09:00 20180115
2019-01-01T10:00:00+09:00 hello
2019-01-02T11:00:00+09:00 20190102_test1
2019-01-03T11:30:00+09:00 20190103_test1
2019-01-04T11:00:00+09:00 20190104_test1
代码成功运行。我在代码文件夹中看到文件token.json
。
但是我的问题是,我不能在Linux(centos)上使用浏览器,所以如何允许我的帐户第一次像Windows一样运行?
答案 0 :(得分:1)
Ouaht2和用户同意
如果要访问用户的私人数据,则始终必须让他们至少对您的应用程序进行一次身份验证。唯一的方法是使用Web浏览器窗口。
发生的第一件事是用户必须通过浏览器登录到自己的google帐户,一旦他们登录,将显示同意屏幕,要求他们向您的应用程序访问其数据。
通过这种方式,用户同意您的应用程序访问其数据。
面向Linux用户的开发。
我很好奇您为什么认为Linux用户将运行您的应用程序。我没有看到很多人设计本机应用程序以在Linux上运行。 WTG,你。
运行Linux的用户必须打开Windows才能打开Web浏览器,这可以通过Windows桌面来完成。如果他们正在运行命令行,那么他们将必须复制链接并在浏览器中打开它。我不认为命令行Web浏览器可以在这里工作,而必须通过Linux桌面完成。
服务帐户
现在,当您要担心Linux用户时,我想知道您是否真的不担心应用程序的用户。
您是否正在尝试在Linux服务器上的cron作业中运行此应用程序?同样假设您只尝试访问一个您亲自控制的帐户。然后,您可以使用所谓的服务帐户。服务帐户用于服务器到服务器的通信,在登录时实际上没有用户可以批准同意。为了使服务帐户正常工作,必须预先批准它们。在Google开发者控制台中创建服务帐户后,您只需获取服务帐户的电子邮件地址并共享您希望其可以通过Google日历网站访问的日历。日历与服务帐户共享后,便可以访问该日历,您不必担心Web浏览器身份验证。
答案 1 :(得分:1)
您需要在Web浏览器中完成身份验证部分。要从其他计算机/浏览器完成身份验证,您可以使用OOB(带外)流完成其余的身份验证。您正在使用的oauth库提示您可以通过将--noauth_local_webserver传递给您正在运行的程序来使用此OOB流(或者,可以通过某种方式将标志添加到sys.argv),在浏览器,然后您必须手动复制回验证码。
请注意,oauth2client.tools并非旨在用作编程接口。它的预期用途是用于交互式CLI应用程序,并作为如何将库与自己的应用程序集成的示例。
答案 2 :(得分:0)
如果您使用的是Windows,而在Linux上没有任何免费的浏览器,那么一个简单的解决方案是在Linux上使用--noauth_local_webserver
运行该应用程序,然后在Windows上使用PuTTY连接到Linux服务器,然后将服务器的TCP端口8888到本地系统。
netstat -na|findstr ":8888 "|findstr /C:LISTENING
)。请注意,您可以从macOS执行类似的操作。但是您需要打开终端并运行ssh -L 8888:127.0.0.1:8888 <user>@<linuxserver>