我尝试使用适用于Python的Google客户端库以csv
格式导出Google电子表格:
# OAuth and setups...
req = g['service'].files().export_media(fileId=fileid, mimeType=MIMEType)
fh = io.BytesIO()
downloader = http.MediaIoBaseDownload(fh, req)
# Other file IO handling...
适用于MIMEType:application / pdf,MS Excel等。
根据Google's documentation,支持text/csv
。但是当我尝试发出请求时,服务器会提供500 Internal Error
。
即使使用谷歌的Drive API playground,也会出现同样的错误。
与v2一样,我添加了一个字段:
gid = 0
指向工作表的请求,但这是一个错误的请求。
答案 0 :(得分:3)
这是Google代码中的已知错误。 https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4289
但是,如果你手动建立自己的请求,你可以以字节为单位下载整个文件(媒体管理的东西不会起作用)。
以file
作为文件ID,您http
作为您授权的http对象,可以下载文件:
from apiclient.http import HttpRequest
def postproc(*args):
return args[1]
data = HttpRequest(http=http,
postproc=postproc,
uri='https://docs.google.com/feeds/download/spreadsheets/Export?key=%s&exportFormat=csv' % file,
headers={ }).execute()
data
这是一个包含CSV的字节对象。你可以打开它:
import io
lines = io.TextIOWrapper(io.BytesIO(data), encoding='utf-8', errors='replace')
for line in lines:
#Do whatever
答案 1 :(得分:2)
您只需要实施Exponential Backoff。
查看ExponentialBackOffPolicy的文档。
这个想法是服务器暂时不可用,并且在他们试图重新启动时不应该被淹没。
默认实施要求退回500和503状态代码。如果需要不同的状态代码,则子类可以覆盖。
以下是第一个链接的指数退避实现的片段:
ExponentialBackOff backoff = ExponentialBackOff.builder()
.setInitialIntervalMillis(500)
.setMaxElapsedTimeMillis(900000)
.setMaxIntervalMillis(6000)
.setMultiplier(1.5)
.setRandomizationFactor(0.5)
.build();
request.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler(backoff));
您可能需要查看此文档以获取ExponentialBackoff implementation的摘要。