如何通过Google Data API上传文件到Google Docs?
我正在开发一个与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')
出现了一个错误:
错误追踪信息: 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/django/core/handlers/base.py" 中的 get_response 111. response = callback(request, *callback_args, **callback_kwargs) 文件 "/home/i159/workspace/apiroot/googleapi/../googleapi/apiapp/views.py" 中的 push_to_ga 38. client.UploadDocument(entry.file, '我的条目 #' + str(entry.id)) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/atom/init.py" 中的 deprecated_function 1475. return f(*args, **kwargs) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py" 中的 UploadDocument 494. folder_or_uri=folder_or_uri) 文件 "/home/i159/Env/googleapi/lib/python2.6/site-packages/gdata/docs/service.py" 中的 _UploadFile 160. extra_headers={'Slug': media_source.file_name},
异常类型:AttributeError 在 /push_to_ga/ 异常信息:'unicode' 对象没有 'file_name' 属性
我找不到关于这些方法的文档。怎么通过API把文件上传到Google Docs呢?
1 个回答
你正在使用哪个版本的Google API?
根据Google的文档,在1.0和2.0版本中,你需要把文档包装成一个MediaSource对象,这样才能传给上传方法。所以,我觉得你需要把:
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
参数设置为每个文件的正确类型。
如果你使用的是3.0版本,你就不需要再创建MediaSource对象了——你可以直接把文件路径、标题和mime类型传给上传方法:
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 Code网站上的问题591的评论77中提供的解决方法来修复。只需按照那个票据中的说明,简单编辑你在site-packages/gdata/docs/services.py
文件中的_UploadFile
方法。做完这个修改后,PDF上传应该就能正常工作了(我试过,确实可以)。