Я работаю над простым скриптом на Python, который может загружать и экспортировать все файлы из домена Google Apps Drive Service. Мне удалось создать сеанс Drive с помощью учетной записи службы, и я получаю вывод JSON из запроса списка. Я также определил функцию загрузки в соответствии с этой статьей:Howto скачать файл из Drive API с помощью скрипта Python
https://developers.google.com/drive/manage-downloads
Проблема заключается в том, что эта функция возвращает другой выход JSON под названием содержание, но я не могу понять, как сохранить файл на локальном жестком диске. Я искал CURL, если он может быть использован внутри скрипта Python и найден urllib/urllib2, который следует использовать аналогично CURL. Но если я пытаюсь использовать urllib2 прочитать удаленный файл с помощью:
remote_file = urllib2.urlopen(download_url).read()
Я получаю 401 Ошибка самовольных.
Таким образом, похоже, что urllib2 работает, но не использует сохраненные учетные данные.
Так как я могу создать авторизованный запрос с помощью urllib/2? Или как правильно хранить файл локально из сценария? Есть ли другая другая библиотека python или google, которая может помочь мне хранить файлы локально?
Заранее спасибо.
EDIT: Я использую клиентскую библиотеку API Google API. Проблема в том, что функция download_file возвращает некоторый вывод JSON, но я не могу сохранить файл в локальном хранилище.
Я пытался что-то вроде этого:
def download_file(service, drive_file):
"""Download a file's content.
Args:
service: Drive API service instance.
drive_file: Drive File instance.
Returns:
File's content if successful, None otherwise.
"""
download_url = drive_file.get('downloadUrl')
if download_url:
resp, content = service._http.request(download_url)
if resp.status == 200:
print 'Status: %s' % resp
#return content
title = drive_file.get('title')
path = './data/'+title
file = open(path, 'wb')
# remote_file = urllib2.urlopen(download_url).authorize().read()
file.write(content.read())
else:
print 'An error occurred: %s' % resp
return None
else:
# The file doesn't have any content stored on Drive.
return None
Это создает файл на жестком диске, но он терпит неудачу, когда пытается читать содержимое. Я не знаю, как обрабатывать контент, подходящий для записи на локальный диск.
EDIT2:
Хорошо, так что я, наконец, понять, что из. Моя ошибка заключалась в том, что я пытался использовать функцию read() в контенте. Мне просто нужно использовать file.write (content).
Спасибо за ответ, на самом деле это именно то, что я использую. Но проблема в том, что эта функция возвращает контент, который является только выходом JSON, но я не могу понять, как сохранить файл в локальном хранилище (HDD). – Beneato