2016-11-21 8 views
3

これはGoogleドライブからファイルをダウンロードするためのスクリプト(他のユーザーからハッキングされたもの)です。しかし、私がファイルをダウンロードしたとき、自分のローカルドライブ上のファイルの作成日/変更日は、スクリプトが実行されていてそのファイルが処理されていた時間です。GoogleドライブのPython経由のバックアップファイル

Modified 
Jun 10, 2015 by me 
Opened 
Aug 10, 2016 by me 
Created 
Oct 23, 2015 

は、それがの日付を保持しますので、ダウンロード・スクリプトを変更することがとにかくあり:有用であるために、私は、彼らがこのような、Googleのドライブに表示されるファイルの日付を維持できるようにする必要がありますファイルをドライブにダウンロードしてもそのまま残りますか?これは私が答えを見つけることができたhaventはAPIのリファレンスです:

https://developers.google.com/drive/v2/reference/

これはスクリプトです:

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 ->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() 

私は何ができるよう最善をここにCREATEDATEを追加することです。

downloadFile(item.get('name'), item.get('id'), item.get('mimeType'), item.get('createdDate'), service) 
+0

私は、あなたが変更された時間(https://developers.google.com/drive/v2/reference/files/update)を取得するための呼び出しを組み合わせて、その時刻をPythonの 'os。 utime'(https://docs.python.org/3/library/os.html#os.utime) – Joe

答えて

2

gdcp: Google Drive cpを本当にお勧めします。

あなたが持っている必要があるのは、次のとおりです。

  • Python2.7
  • ピップ

、あなたはそれらの依存関係をインストールする必要があります。

$ pip install pydrive 
$ pip install backoff 

そして最後に、続きますsetup procedureあなたのGDriveアカウントをgdcpにリンクし、あなたのGにアップロード/ダウンロードするにはドライブアカウント

関連する問題