title: Backup files from Google Drive via Python
body: <p>This is my script (hacked from someone elses) which works to download files from Google Drive. However when I download a file the created/modified date of my files on my local drive is all the time in which the script was run and that file was processed. In order to be useful I need to be able to preserve the dates of the files as they appear on google drive, such as this:</p>
  
  <pre><code>Modified
  Jun 10, 2015 by me
  Opened
  Aug 10, 2016 by me
  Created
  Oct 23, 2015 
  </code></pre>
  
  <p>Is there anyway to change the download script so it keeps the dates of the files intact when they are downloaded to my drive? This is the API reference which I havent been able to find the answer in:</p>
  
  <p><a href="https://developers.google.com/drive/v2/reference/" rel="nofollow noreferrer">https://developers.google.com/drive/v2/reference/</a></p>
  
  <p>This is the script:</p>
  
  <pre><code>from __future__ import print_function
  import sys, httplib2, os, datetime, io
  from time import gmtime, strftime
  from apiclient import discovery
  import oauth2client
  from oauth2client import client
  from oauth2client import tools
  from datetime import date
  
  #########################################################################
  # Fixing OSX el capitan bug -&gt;AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urlencode'
  os.environ["PYTHONPATH"] = "/Library/Python/2.7/site-packages"
  #########################################################################
  
  CLIENT_SECRET_FILE = 'client_secrets.json'
  TOKEN_FILE="drive_api_token.json"
  SCOPES = 'https://www.googleapis.com/auth/drive'
  APPLICATION_NAME = 'Drive File API - Python'
  OUTPUT_DIR=str(date.today())+"_drive_backup"
  
  try:
      import argparse
      flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
  except ImportError:
      flags = None
  
  def get_credentials():
      home_dir = os.path.expanduser('~')
      credential_dir = os.path.join(home_dir, '.credentials')
      if not os.path.exists(credential_dir):
          os.makedirs(credential_dir)
      credential_path = os.path.join(credential_dir, TOKEN_FILE)
      store = oauth2client.file.Storage(credential_path)
      credentials = store.get()
      if not credentials or credentials.invalid:
          flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
          flow.user_agent = APPLICATION_NAME
          if flags:
              credentials = tools.run_flow(flow, store, flags)
          else: # Needed only for compatibility with Python 2.6
              credentials = tools.run(flow, store)
          print('Storing credentials to ' + credential_path)
      return credentials
  
  def prepDest():
      if not os.path.exists(OUTPUT_DIR):
          os.makedirs(OUTPUT_DIR)
          return True
      return False
  
  def downloadFile(file_name, file_id, mimeType, service):
      request = service.files().get_media(fileId=file_id)
      if "application/vnd.google-apps" in mimeType:
          if "document" in mimeType:
              request = service.files().export_media(fileId=file_id, mimeType='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
              file_name = file_name + ".docx"
          else: 
              request = service.files().export_media(fileId=file_id, mimeType='application/pdf')
              file_name = file_name + ".pdf"
      print("Downloading -- " + file_name)
      response = request.execute()
      with open(os.path.join(OUTPUT_DIR, file_name), "wb") as wer:
          wer.write(response)
  
  def listFiles(service):
      def getPage(pageTok):
          return service.files().list(q="mimeType != 'application/vnd.google-apps.folder'",
                 pageSize=1000, pageToken=pageTok, fields="nextPageToken,files(id,name,mimeType)").execute()
      pT = ''; files=[]
      while pT is not None:
          results = getPage(pT)
          pT = results.get('nextPageToken')
          files = files + results.get('files', [])
      return files
  
  def main():
          credentials = get_credentials()
          http = credentials.authorize(httplib2.Http())
          service = discovery.build('drive', 'v3', http=http)
          for item in listFiles(service):
              downloadFile(item.get('name'), item.get('id'), item.get('mimeType'), service)
  
  if __name__ == '__main__':
      main()
  </code></pre>
  
  <p>The best that I could do is to add the createdate here:</p>
  
  <pre><code>downloadFile(item.get('name'), item.get('id'), item.get('mimeType'), item.get('createdDate'), service)
  </code></pre>