4

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

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 来说似乎非常糟糕)。有没有一种简单的方法可以做到这一点?

4

3 回答 3

1

借助新的 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
于 2015-01-24T02:45:15.173 回答
1

电子表格 API 的新版本 3.0 仍然仅在 gdata 中可用。Google Drive API 不包含电子表格 API。

文档

gdata API 主页上有一条警告,内容如下:

警告:大多数较新的 Google API 不是 Google Data API。Google 数据 API 文档仅适用于 Google 数据 API 目录中列出的旧 API。有关特定新 API 的信息,请参阅该 API 的文档。有关使用较新 API 授权请求的信息,请参阅 Google 帐户身份验证和授权。

它没有声称 gdata 已完全弃用。说 gdata 已被弃用是一种误导。

于 2015-03-09T23:59:32.723 回答
0

gdata 已弃用。新的 (2012) Drive API 就是这样做的方法。这一切都记录在https://developers.google.com/drive/

于 2015-01-23T05:58:26.890 回答