2015-08-26 2 views
3

Я пытаюсь загрузить файл электронной таблицы с моего диска на свой компьютер. Я могу проверить подлинность, получить список файлов и даже получить метаданные. Но когда я пытаюсь загрузить файл, я получаю следующее сообщение об ошибке:Не удалось загрузить электронную таблицу google с помощью Google Drive API с помощью python

downloading file starts 
An error occurred: <HttpError 400 when requesting https://www.googleapis.com/dri 
ve/v2/files/1vJetI_p8YEYiKvPVl0LtXGS5uIAx1eRGUupsXoh7UbI?alt=media returned "The 
specified file does not support the requested alternate representation."> 
downloading file ends 

Я не мог получить любую такую ​​проблему или вопрос о SO и другие методы или решения, предоставляемые на SO для загрузки таблицы устарели . Этим устарели Google.

Вот код, я использую для загрузки файла:

import httplib2 
import os  
from apiclient import discovery 
import oauth2client 
from oauth2client import client 
from oauth2client import tools 


from apiclient import errors 
from apiclient import http 

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

#SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly' 
SCOPES = 'https://www.googleapis.com/auth/drive' 
CLIENT_SECRET_FILE = 'client_secrets.json' 
APPLICATION_NAME = 'Drive API Quickstart' 


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, 
            'drive-quickstart.json') 

    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 compatability with Python 2.6 
      credentials = tools.run(flow, store) 
     print 'Storing credentials to ' + credential_path 
    return credentials 

def main(): 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.build('drive', 'v2', http=http) 

    file_id = '1vJetI_p8YEYiKvPVl0LtXGS5uIAx1eRGUupsXoh7UbI' 

    print "downloading file starts" 
    download_file(service, file_id) 
    print "downloading file ends " 

def download_file(service, file_id): 

    local_fd = open("foo.csv", "w+") 
    request = service.files().get_media(fileId=file_id) 
    media_request = http.MediaIoBaseDownload(local_fd, request) 

    while True: 
     try: 
      download_progress, done = media_request.next_chunk() 
     except errors.HttpError, error: 
      print 'An error occurred: %s' % error 
      return 
     if download_progress: 
      print 'Download Progress: %d%%' % int(download_progress.progress() * 100) 
     if done: 
      print 'Download Complete' 
      return 

if __name__ == '__main__': 
    main() 

ответ

0

Этот код работал для меня. Мне только пришлось загрузить client_secret.json из панели инструментов разработчиков Google и сохранить в том же каталоге, что и скрипт python.

И в переменной list_of_lists я получил список с каждой строкой в ​​виде списка.

import gspread 
import json 
from oauth2client.client import SignedJwtAssertionCredentials 


json_key = json.load(open('client_secret.json')) 
scope = ['https://spreadsheets.google.com/feeds'] 
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope) 

gc = gspread.authorize(credentials) 
sht1 = gc.open_by_key('<id_of_sheet>') 
worksheet_list = sht1.worksheets() 
worksheet = sht1.sheet1 
list_of_lists = worksheet.get_all_values() 

for row in list_of_lists : 
    print row 
1

Google таблица не имеет средств массовой информации. Вместо этого они имеют exportLinks. Получите метаданные файла, затем посмотрите в экспортных ссылках и выберите подходящий URL-адрес.

+0

я получаю следующие метаданные, но не exportlinks или скачать не связывает { 'selfLink': 'parentLink': 'iconLink': 'embedLink': 'alternateLink': 'selfLink': 'selfLink': } – kadamb

+0

вставьте метаданные, которые вы видите в файлах.get Try-It, чтобы мы могли видеть – pinoyyid

Смежные вопросы