Dropbox webhook,检测删除的文件



我试图检测文件是否在我自己的dropbox应用程序的文件夹中被删除。因此,我设置了一个webhook来接收通知,并使用DropboxClient.delta方法来了解实际变化。根据文档,delta方法返回一个包含4个键的字典,'entries'键包含A list of "delta entries"。删除文件时,表项为[path, metadata] (path为字符串,metadata为字典),元数据为None。但我从来没有得到它是None,即使一个文件实际上是从目录中删除。这是我的webhook通知接收器:

@app.route('/webhook', methods=['POST', 'GET'])
def webhook():
    if request.method == 'GET':
        return request.args.get('challenge')
    fh = open('dropbox.txt', 'a') # log file
    client = dropbox.client.DropboxClient('<access token>') 
    for uid in json.loads(request.data)['delta']['users']:
        fh.write('User %d is doing something:n' % uid)
        cursor = None
        has_more = True
        while has_more:
            result = client.delta(cursor)
            i = 1
            for path, metadata in result['entries']:
                fh.write('Metatadata: %sn' % json.dumps(metadata) )
                i = i + 1   
            cursor = result['cursor']
            has_more = result['has_more']
        fh.write('End logging activities (#%d) of user %dn' % (i - 1, uid))
    fh.close()
    return ''
所以,我在我的目录中添加了一些文件(3),在我的日志文件中我可以看到:
User <uid> is doing something:
Metatadata: {"revision": 3, "bytes": 3952, "thumb_exists": false, "rev": "33bb68089", "modified": "Fri, 28 Aug 2015 13:40:32 +0000", "mime_type": "text/x-python", "path": "/a.py", "is_dir": false, "size": "3.9 KB", "root": "app_folder", "client_mtime": "Fri, 28 Aug 2015 13:40:32 +0000", "icon": "page_white_code"}
Metatadata: {"revision": 4, "bytes": 812, "thumb_exists": false, "rev": "43bb68089", "modified": "Fri, 28 Aug 2015 13:40:34 +0000", "mime_type": "text/x-python", "path": "/b.py", "is_dir": false, "size": "812 bytes", "root": "app_folder", "client_mtime": "Fri, 28 Aug 2015 13:40:34 +0000", "icon": "page_white_code"}
Metatadata: {"revision": 5, "bytes": 295, "thumb_exists": false, "rev": "53bb68089", "modified": "Fri, 28 Aug 2015 13:40:35 +0000", "mime_type": "text/x-python", "path": "/c.py", "is_dir": false, "size": "295 bytes", "root": "app_folder", "client_mtime": "Fri, 28 Aug 2015 13:40:35 +0000", "icon": "page_white_code"}
End logging activities (#3) of user <uid>

我删除了一个文件(c.py),在我的日志文件中我看到:

User <uid> is doing something:
Metatadata: {"revision": 3, "bytes": 3952, "thumb_exists": false, "rev": "33bb68089", "modified": "Fri, 28 Aug 2015 13:40:32 +0000", "mime_type": "text/x-python", "path": "/a.py", "is_dir": false, "size": "3.9 KB", "root": "app_folder", "client_mtime": "Fri, 28 Aug 2015 13:40:32 +0000", "icon": "page_white_code"}
Metatadata: {"revision": 4, "bytes": 812, "thumb_exists": false, "rev": "43bb68089", "modified": "Fri, 28 Aug 2015 13:40:34 +0000", "mime_type": "text/x-python", "path": "/c.py", "is_dir": false, "size": "812 bytes", "root": "app_folder", "client_mtime": "Fri, 28 Aug 2015 13:40:34 +0000", "icon": "page_white_code"}
End logging activities (#2) of user <uid>

每当目录中有什么变化时,我就会得到该目录中所有文件的列表,包括未修改的文件。但是没有被删除的痕迹。我以为我只会收到修改或删除的文件。

这是正常的行为吗?谢谢。

看起来您没有跟踪通知之间的光标。所以每次有一个变化,你调用delta时,光标是空的,这意味着"告诉我所有的文件。"你要做的是用上次获得的光标来调用它,这意味着"告诉我(光标)之后发生了什么变化"。

您需要将光标保存在服务器上的某个地方(例如在数据库中),并确保在要求Dropbox更改时始终使用最新的光标。

最新更新