2015-08-28 64 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更改時始終使用最新的光標。