不确定这里的API下发生了什么,但从我的调试输出来看,一切都正常。它将ID传递给有效文件等等。有没有办法在Google SDK中启用调试输出?
在HTTP错误之前,我看到了几个警告:
WARNING:oauth2client.util:new_request() takes at most 1 positional argument (2 given)
WARNING:oauth2client.util:new_request() takes at most 1 positional argument (2 given)
代码如下:
def update(self, path, properties, media_body = None):
info = self.stat(path)
if not info:
debug("No such file: %s" % path)
return None
# Merge properties
for k, v in properties.iteritems():
# Do not update the ID, always use the path obtained ID.
if k == 'id': continue
setattr(info, k, v)
try:
debug("Updating: %s" % info)
return self.service().files().update(
fileId = info.id,
body = info.dict(),
media_body = media_body
).execute()
except Exception, e:
debug("Update failed: %s" % str(e))
debug.stack()
return None
好的,这个函数是通过文件类(本地或远程)调用的。在这种情况下,是远程文件类调用此函数,提供对本地文件类上载程序(media\u upload)的引用:
所以在远程文件类中,我实现了这个方法。Drive()类是我自己的Google API包装器:
def _updateFile(self, path, src):
debug("Updating remote file: %s" % path)
if GsyncOptions.dry_run: return
drive = Drive()
info = drive.update(path, src.getInfo(), src.getUploader())
if info is None:
debug("Update failed")
“src”变量是对另一个文件类(本地文件)的引用。它调用getUploader将引用传递给上传程序。具体实施如下:
def getUploader(self, path = None):
info = self.getInfo(path)
if info is None:
raise Exception("Could not obtain file information: %s" % path)
path = self.getPath(path)
f = open(path, "r")
if f is None:
raise Exception("Open failed: %s" % path)
from apiclient.http import MediaIOBaseUpload
return MediaIoBaseUpload(f, info.mimeType, resumable=True)
问题似乎是,用于创建文档的API方法需要为文档正文(或media\u body)定义一个值。我最初创建的文档是空的,没有提供任何文档正文,基本上保留为无。这就产生了这样一个场景:我的驱动器上有一个无法更新的文档。通过创建具有空正文的文档,更新随后开始工作:
return self.service().files().insert(
body = info.dict(),
# An empty media_body.
media_body = ""
).execute()
回答“是否有任何方法可以在Google SDK中启用调试输出?”问题的一部分,请检查https://developers.google.com/api-client-library/python/guide/logging.
更新:这是GoogleDrive中的一个错误,CORS未启用上传URI。@Nivco向我指出了使用iframe和代理(而不是CORS)的Google客户端库的工作。我将(测试过的)工作代码放在底部,并附有详细说明。请参阅下面的示例答案。 通过API将文件插入到谷歌云端硬盘并使用JavaScript授权谷歌云端硬盘表示上传终端节点支持CORS,但我无法使用它们。我可以使用 Files: insert
我正试图使用Google API将视频上传到youtube上,并收到以下错误通知:未定义变量:在/home/critter/public_html/test-video.php第136行中的htmlBody 出现服务错误:调用PUT https://www.googleapis.com/Upload/youtube/v3/videos?part=status%2csnippet&uploadtyp
我已经使用zappa在aws lambda上部署了一个flask应用程序,现在该应用程序在所有endpoint上都运行良好,除了我的主endpoint,当我对其发出post请求时,它返回{“消息”:“endpoint请求超时”} 真的需要一个修复或想法如何克服这个我需要调用分析路线,部署的url是 https://2ixfyfcsik.execute-api.eu-west-2.amazonaws
再一次在布罗斯沃尔,一切都很完美。在PhoneGap应用程序上仅GET request有效
我正在尝试从JavaScript应用程序向另一个应用程序中的endpoint进行API调用。 当我调用endpoint时,我得到了状态代码和消息,但我无法以任何方式访问响应体。我已经尝试了不同的方法来获取数据,但似乎没有一种方法对我有效。 在方法“someAction”中,我想使用来自API调用的响应/结果中的数据。我在代码中添加了单个日志行打印的输出。 如何在定义“result.status/m
问题内容: 我正在尝试通过COM端口发送AT命令,但只重新发送了相同的命令。 日志: 16:19:21.910 [main]调试SerialConnections.M234Serial-创建实例。 16:19:21.974 [main]调试SerialConnections.M234Serial-发送请求:AT ^ SCFG? 16:19:23.976 [EventThread COM55]调试S