代码之家  ›  专栏  ›  技术社区  ›  okiedev

如何使用python成功接收googledrivev3推送通知?

  •  1
  • okiedev  · 技术社区  · 7 年前

    push notifications 使用驱动器API。一切都按照描述进行,除了我没有收到任何来自谷歌的通知,每当发生变化(列为下面的第4步)。

    :验证您是否拥有域

    我去搜索控制台的指示,并成功地验证了该网站。

    步骤2(成功) :注册您的域

    我访问了域验证页面,并在API控制台中添加了我的域。谷歌API控制台更新显示与我所需的域列表。

    我有一个有效的SSL证书从GoDaddy为我的域,并已验证,以及。

    步骤3(成功) :已创建我的通知频道

    channel_id = str(uuid.uuid4())
    
    body = {
        'kind': 'api#channel',
        'id': channel_id,
        'type': 'web_hook',
        'address': "https://my_domain.com/notifications"
    }
    
    
    try:
        start_page_token = service.changes().getStartPageToken().execute().get('startPageToken');
        print(service.changes().watch(pageToken=start_page_token, body=body).execute())
    except Exception as e: 
        print('Exception: {}'.format(e))
    

    {u'resourceId': u'vTMwJWl7a23Af1LK1TpJZ38eO_0', u'kind': u'api#channel', u'expiration': u'1538433975000', u'id': u'dce14225-95c8-42a7-9945-4fed1604c848', u'resourceUri': u'https://www.googleapis.com/drive/v3/changes?alt=json&includeCorpusRemovals=false&includeRemoved=true&includeTeamDriveItems=false&pageSize=100&pageToken=4919&restrictToMyDrive=false&spaces=drive&supportsTeamDrives=false&alt=json'}
    

    我在appengine上运行一个Flask网站,并创建了一个app.route 从谷歌接收通知。我已经包括了下面的代码。我从未在这个网址收到任何东西。

    @app.route('/notifications')
    def notifications():
        print('in notifications()')
    
        try:
            chan_id = request.args.get('X-Goog-Channel-ID', 'empty')
            msg_num = request.args.get('X-Goog-Message-Number', 'empty')
            rid = request.args.get('X-Goog-Resource-ID', 'empty')
            state = request.args.get('X-Goog-Resource-State', 'empty')  
            resource_uri = request.args.get('X-Goog-Resource-URI', 'empty') 
            goog_changed = request.args.get('X-Goog-Changed', 'empty')
            goog_chan_exp = request.args.get('X-Goog-Channel-Expiration', 'empty')
            goog_chan_token = request.args.get('X-Goog-Channel-Token', 'empty')
    
            print('chan_id: {}'.format(chan_id))
            print('msg_num: {}'.format(msg_num))
            print('rid: {}'.format(rid))
            print('state: {}'.format(state))
            print('resource_uri: {}'.format(resource_uri))
            print('goog_changed: {}'.format(goog_changed))
            print('goog_chan_exp: {}'.format(goog_chan_exp))
            print('goog_chan_token: {}'.format(goog_chan_token))
    
    
        except Exception as e:
            print('notifications() exception: {}'.format(e))
    
        print('leaving notifications()')
    
        return jsonify(result='done')
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Ruben Lopez    7 年前

    我不确定这是否是问题所在,但是,当我尝试Google驱动器推送通知时,我没有使用SDK。我只提出了一个POST请求,如文档中所示。

    你能试着向我提出一个邮寄请求吗 "https://www.googleapis.com/drive/v3/changes/watch" 而不是使用 service.changes().watch()

    你需要一个 access_token 但是我相信你不需要发邮件 startPageToken 因为他们没有在他们的例子中使用它: example

    希望有帮助!