如何在Linux上首次使用Google Calendar API?

时间:2019-01-31 08:31:22

标签: python google-api google-calendar-api

您可以从此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

然后我的浏览器会弹出一个这样的页面。 enter image description here

然后我点击了我的帐户。

在此页面上,我单击了Allow

enter image description here

然后浏览器显示该消息。

enter image description here

然后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一样运行?

3 个答案:

答案 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到本地系统。

  • 首先确保Windows上没有任何内容正在监听该端口(例如,通过运行:netstat -na|findstr ":8888 "|findstr /C:LISTENING)。
  • 然后,您需要使用PuTTY打开SSH连接。
  • 连接后,单击PuTTY窗口左上方的图标,然后转到“更改设置/连接/ SSH /隧道”,将“源端口”设置为8888,将目标端口设置为127.0.0.1:8888,然后选择“本地”和“自动”。
  • 您现在可以通过浏览到http://127.0.0.1:8888/进行检查,它会显示一条错误消息,但无法连接。
  • 然后在Windows上打开浏览器并开始激活。当浏览器重定向到http://127.0.0.1:8888时,它将直接进入Linux服务器上的应用程序并激活它。

请注意,您可以从macOS执行类似的操作。但是您需要打开终端并运行ssh -L 8888:127.0.0.1:8888 <user>@<linuxserver>

来代替PuTTY

PuTTY screenshot