尝试使用多部分编码将附件添加到时间轴。之前已经尝试过如下操作:
req = urllib2.Request(url, data={body}, header={header})
resp = urllib2.urlopen(req).read()
此方法适用于 application/json,但未尝试如何将 body 格式化为 multi-part 类型。还尝试过使用 requests 和 poster 两个库,但不知何故这两个库都返回 401 错误。
如何使用库(最好是 urllib2 的插件)或 urllib2 本身(如上面代码块所示)发送多部分请求?
编辑: 还希望此方法能够支持镜面 API 中的 "video/vnd.google-glass.stream-url",网址为 developers.google.com/glass/timel…
以下是使用 poster 库的请求代码:
register_openers()
datagen, headers = multipart_encode({'image1':open('555.jpg', 'rb')})
以下是使用 requests 的请求代码:
headers = {'Authorization' : 'Bearer %s' % access_token}
files = {'file': open('555.jpg', 'rb')}
r = requests.post(timeline_url,files=files, headers=headers)
返回 401 -> 头
谢谢。
2、解决方案 方法一:
提供了一个有效的适用于多部分请求的 Curl 示例,此示例使用 streaming video url 功能,网址为:
Previous Streaming Video Answer with Curl example
此示例完全满足需求,只需将其调整到适合的技术栈即可。
收到的 401 错误将阻止后续操作,即使语法正确。401 响应表示没有修改时间轴的权限。应先确保能够插入一个简单的纯文本卡片。收到 401 错误后,如果遇到解析错误和格式问题,上面链接中的示例应该能满足需求。
最后需要注意的是,无需使用 urllib2,因为 Mirror API 团队提供了一个非常棒的功能,我们无需再费心获取视频二进制数据,只需在多部分有效负载中提供一个 URL,无需流式传输二进制数据!Google 在 XE6 及以上版本中为我们完成了所有神奇的操作。
感谢 Glass 团队!
这个过程比想象中简单。可以尝试一下上面提供的 Curl 示例,注意不兼容的视频类型,当遇到此类问题时,在 Glass 中可能无法正常运行,请确保视频以适合 Glass 的格式进行编码。
祝您好运!
方法二:
如何使用多部分编码将附件添加到时间轴:
使用最简单的方法使用 Google APIs Client Library for Python 将多部分编码的附件添加到时间轴。借助此库,只需使用 Mirror API 时间轴插入文档中提供的以下示例代码(点击示例下的 Python 选项卡)。
from apiclient.discovery import build
service = build('mirror', 'v1')
def insert_timeline_item(service, text, content_type=None, attachment=None,
notification_level=None):
timeline_item = {'text': text}
media_body = None
if notification_level:
timeline_item['notification'] = {'level': notification_level}
if content_type and attachment:
media_body = MediaIoBaseUpload(
io.BytesIO(attachment), mimetype=content_type, resumable=True)
try:
return service.timeline().insert(
body=timeline_item, media_body=media_body).execute()
except errors.HttpError, error:
print 'An error occurred: %s' % error
无法使用 requests 或 poster 自动对数据进行编码,因为这些库将内容编码为 multipart/form-data,而 Mirror API 需要使用 multipart/related。
如何调试当前错误代码:
代码返回 401 错误,这是一个授权错误。这意味着请求中可能缺少访问令牌。若要包含访问令牌,请在请求中将 Authorization 字段设置为 Bearer: YOUR_ACCESS_TOKEN(点击此处查看文档)。
如果不知道如何获取访问令牌,Glass 开发者文档提供了有关如何获取访问令牌的说明,网址为:developers.google.com/glass/auth。… 403 错误:www.googleapis.com/auth/glass.…