如何通过Google Data API将文件上传到Google文档?

时间:2011-09-29 09:24:59

标签: python google-api

根据我的理解,我开发了一个适用于Google API的应用程序。

def push_to_ga(request):
    client = gdata.docs.service.DocsService()
    client.ClientLogin('account@gmail.com', 'password')

    entrys = Entry.objects.all()
    for entry in entrys:
        splitted = entry.file.split('/')
        client.UploadDocument(entry.file, splitted[-1])

    return HttpResponseRedirect('https://docs.google.com/#home')

出错:

  

回溯:   在get_response中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py”     111. response = callback(request,* callback_args,** callback_kwargs)   在push_to_ga中输入文件“/home/i159/workspace/apiroot/googleapi/../googleapi/apiapp/views.py”     38. client.UploadDocument(entry.file,'我的条目#'+ str(entry.id))   在deprecated_function中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/atom/init.py”     返回f(* args,** kwargs)   在UploadDocument中输入文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py”     494. folder_or_uri = folder_or_uri)   _UploadFile中的文件“/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py”     160. extra_headers = {'Slug':media_source.file_name},

     

异常类型:/ push_to_ga /的AttributeError   异常值:'unicode'对象没有属性'file_name'

我找不到带有方法描述的文档。如何通过API将文件上传到Google文档?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Google API?

根据Google documentation,对于版本1.0和2.0,您必须将文档包装为MediaSource对象,以便将其传递给Upload方法。所以,我认为你需要替换:

client.UploadDocument(entry.file, splitted[-1])

使用:

ms = gdata.MediaSource(file_path=entry.file, content_type=gdata.docs.service.SUPPORTED_FILETYPES['DOC'])
client.Upload(ms, splitted[-1])

注意:这假定您正在上载Word文件。您应该为您上传的每个文件将content_type参数设置为correct type

如果您正在使用version 3.0,则不再需要创建MediaSource对象 - 您只需将路径名,标题和mime类型直接传递给Upload方法:

client.Upload(entry.file, splitted[-1], content_type='application/msword')

上传PDF

如果您尝试使用API​​的2.0版上传PDF文件,则会因错误而失败:

{'status': 415, 'body': 'Content-Type application/pdf is not a valid input type.', 'reason': 'Unsupported Media Type'}

可以使用Google代码网站上第591期comment 77中显示的解决方法修复此问题。简单地编辑_UploadFile文件中的site-packages/gdata/docs/services.py方法,如该票证上所示。一旦你做了这个改变,PDF上传应该可以正常工作(我已经检查了这个&它对我有用)。