使用镜像api python cli从Raspberry Pi连接到Glass时可能出现OAuth错误

使用镜像api python cli从Raspberry Pi连接到Glass时可能出现OAuth错误,python,raspberry-pi,google-oauth,google-glass,Python,Raspberry Pi,Google Oauth,Google Glass,我正在尝试使用命令行界面将Raspberry Pi的时间线卡发送到Google Glass。我能够完成第一步,使用get-credentials.py中的代码使用我的应用程序客户端id和密码连接到Google。此代码提示转到授权URL以获取代码,并且在输入代码后,将继续使用身份验证信息(包括访问令牌和刷新令牌)正确填充凭证文件 然后,我运行第二个文件send-to-glass.py中的代码,将“hello world”消息传递到Google glass时间表。我没有收到任何错误信息,但玻璃没有收

我正在尝试使用命令行界面将Raspberry Pi的时间线卡发送到Google Glass。我能够完成第一步,使用get-credentials.py中的代码使用我的应用程序客户端id和密码连接到Google。此代码提示转到授权URL以获取代码,并且在输入代码后,将继续使用身份验证信息(包括访问令牌和刷新令牌)正确填充凭证文件

然后,我运行第二个文件send-to-glass.py中的代码,将“hello world”消息传递到Google glass时间表。我没有收到任何错误信息,但玻璃没有收到任何信息

我已经使用谷歌游乐场为应用程序创建了一个单独的web客户端,它能够将卡片发送到时间轴,因此我知道谷歌应用程序端没有问题

我还打印了一份insert_timeline_item call,我认为这可能为问题所在提供了线索。json响应中的姓氏-值对是selfLink,它的url中xxxxxx是id值。如果我遵循此URL,则会得到以下信息:

{ "error": { "errors": [{ "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" }], "code": 401,   "message": "Login Required" }}
----------更新----------

正如珍妮建议的那样,我使用了CURL和一个新的访问令牌。我必须承认我对CURL并不熟悉,所以我试了几次才让它工作起来。首先地址没有解析,所以我在googleapis前面添加了www,然后它抱怨需要SSL,所以我在前面添加了https,然后它抱怨证书,所以我添加了-k参数,最后它试图将承载和访问令牌解析为地址,所以我使用双引号而不是单引号。请在这里尽情地笑,但这可能会对将来的人有所帮助

我的最后一个curl命令如下所示:

{ curl -H "Authorization: Bearer MY-ACCESS-TOKEN" https://www.googleapis.com/mirror/v1/timeline -k }
{"kind": "mirror#timeline", "nextPageToken": "LONG-STRING-OF-CHARACTERS",
 "items": [
 {
  "kind": "mirror#timelineItem",
  "id": "ITEM-ID",
  "selfLink": "https://www.googleapis.com/mirror/v1/timeline/ITEM-ID",
  "created": "2014-04-19T01:40:40.597Z",
  "updated": "2014-04-19T01:40:40.597Z",
  "etag": "1397871640597",
  "text": "Hello World",
  "notification": {
   "level": "DEFAULT"
  }
 },
 { ... }
结果返回了一大堆json,看起来像是我试图从Raspberry Pi发送的所有时间线卡。我不会列出所有条目,但json的顶部如下所示:

{ curl -H "Authorization: Bearer MY-ACCESS-TOKEN" https://www.googleapis.com/mirror/v1/timeline -k }
{"kind": "mirror#timeline", "nextPageToken": "LONG-STRING-OF-CHARACTERS",
 "items": [
 {
  "kind": "mirror#timelineItem",
  "id": "ITEM-ID",
  "selfLink": "https://www.googleapis.com/mirror/v1/timeline/ITEM-ID",
  "created": "2014-04-19T01:40:40.597Z",
  "updated": "2014-04-19T01:40:40.597Z",
  "etag": "1397871640597",
  "text": "Hello World",
  "notification": {
   "level": "DEFAULT"
  }
 },
 { ... }

所以看起来,不知何故,这些卡片已经到达了我的时间线,但它们并没有被送到玻璃上。作为提醒,在操场上对同一个项目使用web客户端时,我能够看到卡片从玻璃上穿过。

所以这有点尴尬,我已经确切地发现了问题所在。整个练习与我儿子正在做的一个科学展览项目有关。他一直在通过自己的谷歌账号登录WebIDE为Raspberry Pi编程。我已经建立了一个项目,在一个单独的Chrome浏览器中通过我的Google帐户访问Glass。每次我在Raspberry Pi上运行get-credentials.py,它指示我将URL复制到浏览器中以供批准时,我都是在我儿子的浏览器中使用他的Google帐户执行此操作。凭证被正确保存,卡片被正确填充时间线,但都是针对我儿子的谷歌账户,他没有眼镜


我重新运行了get-credentials.py,在与我自己的帐户关联的浏览器会话中运行了URL。将代码复制回Pi,现在send-to-glass.py可以完美地工作。我的儿子认为我是个白痴,并从中得到了很多笑声,但我很高兴地报告,现在一切正常。

出于某种原因,您的授权被拒绝:(是时候进行故障排除了。您能验证访问令牌的有效性吗?使用命令行curl执行此操作。再次运行Get-credentials.py获得一个新的令牌,然后在curl命令中使用它,例如:curl-H’Authorization:Bearer无论您的访问令牌是什么’,您应该会看到一些漂亮的json作为时间轴的输出。您的测试是这是一个很好的方法,但并不能完全告诉你它在告诉你什么,原因有两个:(1)如果你收到一个带有时间线项目的回复,这意味着它应该被插入。(2)该项目的URL可能有效,但仍需要授权凭据才能访问,而且听起来不像是您发送的。请参阅Jenny的回复,了解如何使用curl指定auth标头。在curl测试后,我已使用新信息更新了原始帖子。但是,从Pi发送的所有卡片都显示在json响应中没有人能通过玻璃。事实上,你自己的诊断很好!我想知道这是否是我今天下午想到的那样,我很高兴看到你明白了。别难过——这比你(或你儿子)想象的更普遍!(这也是我们鼓励人们同时要求配置文件范围的原因——否则,我们无法知道将使用哪个帐户。)