2016-02-24 27 views
2

我使用的是谷歌云端硬盘API导出谷歌表和保存在本地,但我已经遇到了以下问题:谷歌云端硬盘API下载表问题

一个纸张的不正常下载。我不确定这是因为它的大小还是复杂性,但是通过使用文档中的建议代码,该过程会停滞几分钟,然后超时。

下面是流动

file_id = '0BwwA4oUTeiV1UVNwOHItT0xfa2M' # Changed to my file id 
mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' # MS Excel 
request = drive_service.files().export_media(fileId=file_id, mimeType=mimetype) 
fh = io.BytesIO() 
downloader = MediaIoBaseDownload(fh, request) 
done = False 
while not done: 
    status, done = downloader.next_chunk() 
if done: 
    # process the downloaded file 

因为我并不需要所有的床单,我试过另一种解决方案通过手动请求出口使用HTTP请求在documentation与小的改动我的工作指示的代码和在URL上设置gid=0参数以指示所需的工作表。

首先我想简单get API调用只是为了确保它的工作原理如下:

curl https://www.googleapis.com/drive/v3/files/<my_file_id>?access_token=<my_access_token> 

这工作得很好,我得到了与文件细节的响应。

在那之后,我尝试了export请求之下,但我总能得到即使该请求是一样的文档中的一个TEMPORARY REDIRECT响应。

curl https://www.googleapis.com/drive/v3/files/<my_file_id>/export?mimeType=application%2Fvnd.openxmlformats-officedocument.spreadsheetml.sheet&access_token=<my_access_token> 
<HTML> 
<HEAD> 
<TITLE>Temporary Redirect</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Temporary Redirect</H1> 
The document has moved <A HREF="big_giant_huge_url">here</A>. 
</BODY> 
</HTML> 

所以我的问题是:

  • 有没有什么办法来指定使用纸张Python官方API下载或解决下载问题?
  • 任何人都知道我的HTTP请求中Temporary Redirect的原因?
  • 是否有另一种解决方案来下载工作表?

谢谢!

+2

这可能有所帮助:http://stackoverflow.com/questions/3287651/download-a-spreadsheet-from-google-docs-using-python – abielita

回答

0

因此,经过很长一段时间后,我们无法找到解决方案并最终使用不同的方法来处理这种情况。

这就是我们所做的:

  • 找遍了所有独特的纸张,我们希望
  • 复制(挂)他们到一个单独的文件在传动
  • 使用的API来获取每个这些文件分别

由于这是一个使用官方API的非常直接的解决方案,因此取得了成功。

将所有内容都复制到其他文件是件麻烦的事情,但是AFAIK是现在唯一的方法。

+0

您是否将文件保存到磁盘?由于我在做这个 – mp252

+0

@ mp252时遇到了困难,所以我使用原始问题中的确切代码将文件下载到内存并处理它。您可以查看[documentation](https://developers.google.com/drive/v3/web/manage-downloads)以获取更多示例。你有什么困难? – ihhcarus