Как загрузить файлы в Документы Google через API данных Google? - PullRequest
0 голосов
/ 29 сентября 2011

В соответствии с моим пониманием я разрабатываю приложение, которое работает с Google API.

def push_to_ga(request):
    client = gdata.docs.service.DocsService()
    client.ClientLogin('account@gmail.com', 'password')

    entrys = Entry.objects.all()
    for entry in entrys:
        splitted = entry.file.split('/')
        client.UploadDocument(entry.file, splitted[-1])

    return HttpResponseRedirect('https://docs.google.com/#home')

Ошибка:

Traceback: File "/ home / i159 / Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py "в get_response 111. response = callback (запрос, * callback_args, ** callback_kwargs) файл" / home / i159 / workspace / apiroot/googleapi/../googleapi/apiapp/views.py "в push_to_ga 38. client.UploadDocument (entry.file, 'My entry #' + str (entry.id)) файл" / home / i159 / Env / googleapi /lib / python2.6 / site-packages / atom / init .py "в deprecated_function 1475. вернуть файл f (* args, ** kwargs)" / home / i159 / Env / googleapi / lib / python2.6 / site-packages / gdata / docs / service.py "в UploadDocument 494. folder_or_uri = folder_or_uri) Файл" /home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py "in _UploadFile 160. extra_headers = {'Slug': media_source.file_name},

Тип исключения: AttributeError at / push_to_ga / Значение исключения: 'unicode' object не имеет атрибута 'имя_файла'

Я не могу найти документы с описанием методов.Как загрузить файл в Google Docs через API?

1 Ответ

1 голос
/ 29 сентября 2011

Какую версию Google API вы используете?

Согласно документации Google , для версий 1.0 и 2.0 необходимо обернуть документ как объект MediaSource , чтобы передать его в метод Upload. Итак, я думаю, вам нужно заменить:

client.UploadDocument(entry.file, splitted[-1])

с:

ms = gdata.MediaSource(file_path=entry.file, content_type=gdata.docs.service.SUPPORTED_FILETYPES['DOC'])
client.Upload(ms, splitted[-1])

Примечание. Предполагается, что вы загружаете файлы Word. Вы должны установить для параметра content_type правильный тип для каждого загружаемого файла.

Если вы используете версию 3.0 , вам больше не нужно создавать объект MediaSource - вы можете просто передать имя пути, заголовок и тип mime напрямую в метод Upload:

client.Upload(entry.file, splitted[-1], content_type='application/msword')

Загрузка файлов PDF

Если вы попытаетесь загрузить файлы PDF с помощью API версии 2.0, произойдет сбой с ошибкой:

{'status': 415, 'body': 'Content-Type application/pdf is not a valid input type.', 'reason': 'Unsupported Media Type'}

Это можно исправить с помощью обходного пути, показанного в комментарии 77 к проблеме 591 на сайте Google Code. Просто отредактируйте метод _UploadFile в файле site-packages/gdata/docs/services.py, как показано на этом билете. После того как вы внесли это изменение, загрузка PDF должна работать нормально (я проверил это, и у меня это работает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...