2012-07-31 15 views
5

Googleドライブでデスクトップアプリを使用してファイルのリストを取得しようとしています。次のようにコードは次のとおりです。ドライブAPIリクエストにGoogleドライブのファイルが表示されていません

def main(argv): 

    storage = Storage('drive.dat') 
    credentials = storage.get() 

    if credentials is None or credentials.invalid: 
     credentials = run(FLOW, storage) 

    # Create an httplib2.Http object to handle our HTTP requests and authorize it 
    # with our good Credentials. 
    http = httplib2.Http() 
    http = credentials.authorize(http) 

    service = build("drive", "v2", http=http) 
    retrieve_all_files(service) 

次にretrieve_all_filesに、私は、ファイルの印刷:

param = {} 
if page_token: 
    param['pageToken'] = page_token 
    files = service.files().list(**param).execute() 
    print files 

をしかし、私は自分のアカウントへの認証後、印刷されたファイルリストにはアイテムがありません。誰もが似たような問題を抱えているのか、これに対する解決策を知っていますか?

+0

retrieve_all_files全体を貼り付けることはできますか?これは便利な機能のようです。 –

+0

@ AliAfshar、あなたはそれをここに見つけることができます:https://developers.google.com/drive/v2/reference/files/list –

答えて

7

私が間違っているが、私はあなただけのアプリが作成したか、または明示的にGoogle Drive UIまたはPicker APIを使用して、アプリで開かれているファイルを返しhttps://www.googleapis.com/auth/drive.fileスコープを使用していると考えているなら、私を修正してください。

すべてのファイルを取得するには、より広い範囲:https://www.googleapis.com/auth/driveを使用する必要があります。

さまざまなスコープについて詳しくは、documentationをご覧ください。

+0

私はあなたの提案を試みましたが、返されたリストにはまだ内容はありません... –

+1

Isソースはどこからでも入手可能なので、再生しようとするときに撃つことができますか?スコープを変更するときには、 'drive.dat'を削除してください。これは、より広いスコープで承認されていない古いトークンを使用する可能性があるからです。 – Alain

+0

ありがとうございました〜 –

0

マイドライブのすべてのコンテンツとすべてのサブフォルダを取得するには、page_tokenを繰り返し実行する必要があります。これを試してみてください。

def retrieve_all_files(service): 
    """ RETURNS a list of files, where each file is a dictionary containing 
     keys: [name, id, parents] 
    """ 

    query = "trashed=false" 

    page_token = None 
    L = [] 

    while True: 
     response = service.files().list(q=query, 
              spaces='drive', 
              fields='nextPageToken, files(id, name, parents)', 
              pageToken=page_token).execute() 
     for file in response.get('files', []): # The second argument is the default 
      L.append({"name":file.get('name'), "id":file.get('id'), "parents":file.get('parents')}) 

     page_token = response.get('nextPageToken', None) # The second argument is the default 

     if page_token is None: # The base My Drive folder has None 
      break 

    return L 
関連する問題