如何在Google云端硬盘中列出(多个)文件,使用Drive API&蟒蛇?

时间:2014-07-10 13:20:32

标签: python google-app-engine google-drive-api

我的网络应用程序使用的功能首先列出用户GoogleDrive中的所有文件。但是当驱动器包含太多文件(< 100)时,我的应用程序会因DeadlineExceededError而停止。

如何在不崩溃的情况下列出云端硬盘中的文件,我实际上需要同步列出(所有)文件,因为用户必须选择其中一个才能继续。

这是我的功能:

def retrieve_all_files(self, service):
      result = []
      page_token = None
      while True:
        try:
          param = {}
          if page_token:
            param['pageToken'] = page_token
          files = service.files().list().execute()

          result.extend(files['items'])
          page_token = files.get('nextPageToken')
          if not page_token:
            break
        except errors.HttpError, error:
          print 'An error occurred: %s' % error
          break
      return result

这是生成的错误

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~neediz-ws-splitpdf/1.377128135913812779/main.py", line 219, in work
    files_list = self.retrieve_all_files(service)
  File "/base/data/home/apps/s~neediz-ws-splitpdf/1.377128135913812779/main.py", line 161, in retrieve_all_files
    files = service.files().list(q="mimeType='application/pdf'").execute()
  File "lib/oauth2client/util.py", line 132, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "lib/apiclient/http.py", line 716, in execute
    body=self.body, headers=self.headers)
  File "lib/oauth2client/util.py", line 132, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "lib/oauth2client/client.py", line 490, in new_request
    redirections, connection_type)
  File "lib/httplib2/__init__.py", line 1570, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "lib/httplib2/__init__.py", line 1317, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "lib/httplib2/__init__.py", line 1286, in _conn_request
    response = conn.getresponse()
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/gae_override/httplib.py", line 520, in getresponse
    **extra_kwargs)
  File "lib/httplib2/__init__.py", line 1089, in fixed_fetch
    validate_certificate=validate_certificate)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 270, in fetch
    return rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 612, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 375, in _get_fetch_result
    rpc.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 578, in check_success
    self.__rpc.CheckSuccess()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
    raise self.exception
DeadlineExceededError: The API call urlfetch.Fetch() took too long to respond and was cancelled.

0 个答案:

没有答案