python - Dropbox webhook,检测已删除的文件

标签 python python-2.7 dropbox-api webhooks

我正在尝试检测我自己的 Dropbox 应用程序文件夹中的文件是否被删除。 因此,我设置了一个 webhook 来接收通知,并使用 DropboxClient.delta 方法来了解实际发生的变化。 根据文档,delta方法返回一个有4个键的字典,'entries'键包含“delta条目”列表。删除文件时,条目为[路径,元数据](路径是字符串,元数据是字典),元数据为。但我从来没有把它设置为,即使文件实际上从目录中删除了。 这是我的 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: %s\n' % json.dumps(metadata) )
                i = i + 1   

            cursor = result['cursor']
            has_more = result['has_more']

        fh.write('End logging activities (#%d) of user %d\n' % (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 请求更改时始终使用最新的光标。

关于python - Dropbox webhook,检测已删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273170/

相关文章:

python - 使用 TimeGrouper 进行 Pandas 时间序列分组

php - mod_php、mod_python、mod_Language 是如何工作的

python - 你能在一行中调用多个方法吗?

java - 使用 Dropbox Java API 将文件上传到 Dropbox

android - 使用 proguard : java. lang.IncompatibleClassChangeError 和 java.lang.NoSuchMethodError 的 Gradle 发布版本

Python正则表达式从点分隔的字母中删除点

python - 将数据帧值与字典中的键范围进行比较并返回值

python-2.7 - 无需 root 的 Python Scapy 嗅探

python - 为什么 round(2.49999999999999992) 返回 3

laravel - 如何使用flysystem从dropbox获取url?