编程语言
首页 > 编程语言> > python – 使用OAuth和gdata复制谷歌电子表格

python – 使用OAuth和gdata复制谷歌电子表格

作者:互联网

我正在使用gspread修改现有的Google电子表格,并希望复制现有的电子表格.不幸的是,gspread不支持这一点,但可以使用gdata完成(如this thread所述):

import gdata.docs.client

docs_client = gdata.docs.client.DocsClient()
docs_client.ClientLogin('ashe@pokemon.com', 'Pikachu', 'Any non empty string')
base_resource = docs_client.GetResourceById(resource_id)
new_resource = docs_client.copy_resource(base_resource, 'pokedex')

我希望使用OAuth而不是ClientLogin的单独电子邮件/密码组合(或任何可以获得所需结果的方法)来实现这一点;对于Google API来说,文档看起来很糟糕.有一个简单的方法吗?

解决方法:

使用新的Drive API,我找到了一种方法,并希望它对其他人有所帮助:

import httplib2
from apiclient import errors
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

to_copy = '<id/key_string_from_desired_file_url>'
# Service account e-mail from Google dev console
drive_id = '<my_long_service_account_string>@developer.gserviceaccount.com'
# Get the right permissions
drive_scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']    
# pem key converted from p12 key generated in dev console
with open(os.path.abspath('my_key.pem'), 'rb') as keyfile:
    drive_key = keyfile.read()

credentials = SignedJwtAssertionCredentials(drive_id, drive_key, drive_scope)

http = httplib2.Http()
http = self.credentials.authorize(http)
drive_service = build('drive', 'v2', http=http)
file_copy = {'title': title}

try:               
    drive_service.files().copy(fileId=to_copy, body = file_copy).execute()
except errors.HttpError, error:
    print error

标签:python,google-drive-sdk,google-sheets,gdata,gspread
来源: https://codeday.me/bug/20190703/1361669.html