2015-08-28 43 views
1

我想检测一个文件是否在我自己的Dropbox应用程序的文件夹中删除。 所以,我设置了一个webhook来接收通知,我用DropboxClient.delta方法知道实际发生了什么变化。 根据文档,delta方法返回带有4个键的字典,'条目'键包含A list of "delta entries"。一个条目是[path, metadata](路径是一个字符串,元数据是一个字典),元数据是当一个文件被删除。但我从来没有得到它,即使一个文件实际上是从目录中删除。 这里是我的网络挂接通知接收器:Dropbox 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> 

每次在目录中有新的变化,我得到在该目录中也未修饰的一个所有文件的列表。尽管没有删除的痕迹。 我以为我只会收到修改或删除的文件。

这是正常行为吗? 谢谢。

回答

1

它看起来像你没有跟踪通知之间的光标。所以每当有变化时,你都会用空的光标调用delta,这意味着“告诉我所有的文件。”你想要做的就是用上一次得到的光标调用它,这意味着“告诉我自(光标)以来发生了什么变化。”

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