2013-04-05 45 views
8

迄今为止,我一直在成功破解googleapisgapitoken程序包,以通过API在Google日历上创建事件。所有这一切都是为了找到一种方法来编程生成一个Google Hangout链接,据我所知,这是你无法通过API完成的。根据this post,您应该能够在创建活动时启用自动创建环聊链接,这是我为该帐户完成的。使用API​​创建Google日历事件不会创建环聊链接

我使用的代码只能从Node.js运行,因此没有面向用户的部分。我正在使用服务帐户技术通过OAuth2.0进行身份验证。一切似乎都很好,除非创建的事件不包含名为“hangoutLink”的属性。有任何想法吗?

var moment = require('moment'); 
var googleapis = require('googleapis'); 
var GoogleToken = require('gapitoken'); 
var OAuth2Client = googleapis.OAuth2Client; 

var token = new GoogleToken({ 
    iss: '*******************@developer.gserviceaccount.com', 
    scope: 'https://www.googleapis.com/auth/calendar', 
    keyFile: './*****************.pem' 
}, function (err) { 
    if (err) { 
     return console.log(err); 
    } 

    token.getToken(function (err, token) { 
     if (err) { 
      return console.log(err); 
     } 

     googleapis.load('calendar', 'v3', function (err, client) { 
      var oauthClient = new OAuth2Client('', '', '', {}, { 
       token_type: 'Bearer', 
       access_token: token 
      }); 

      var now = moment().format(); 

      client 
       .calendar 
       .events 
       .insert({ 
        calendarId: 'primary', 
        resource: { 
         summary: 'hangout', 
         description: 'hangout', 
         reminders: { 
          overrides: { 
           method: 'popup', 
           minutes: 0 
          } 
         }, 
         start: { 
          dateTime: now 
         }, 
         end: { 
          dateTime: now 
         }, 
         attendees: [{ 
          email: '****@**********.com' 
         }] 
        } 
       }) 
       .withAuthClient(oauthClient) 
       .execute(function (err, event) { 
        // event does not contain hangoutLink 
        console.log(event.hangoutLink); 
       }); 
     }); 
    }); 
}); 

回答

0

设置凭据AUTH客户明确:

var oauthClient = new OAuth2Client('', '', ''); 
oauthClient.credentials = { 
    token_type: 'Bearer', 
    access_token: token 
}; 
2

这不是一个完整的解决方案,但我已经通过改变约束的点点部分成功。通过事件自动创建视频群聊链接似乎是特定于帐户的设置,而不是特定于日历的设置。这意味着使用服务帐户模型创建事件不会触发环聊的创建,因为我们没有(据我所知)有办法打开自动创建环聊的Google帐户中创建服务帐户模型。

为了测试这个理论,我把一个基于OAuth的版本放在一起,它获得了一个传统的谷歌账户令牌。它看起来像这样:https://gist.github.com/drewww/5665130

它或多或少与您的示例相同,除了使用的令牌类型。在回调中,hangoutLink可靠地填充。

很明显,这不像你的例子那样干净。它取决于传统的oauth流程,并且创建事件必须的用户才能在其个人帐户设置中自动创建环聊。从用户体验角度来看,这显然非常不方便。我将尝试创建一个虚拟的Google帐户,并拥有它自己的所有环聊。

+0

我目前通过使用允许使用令牌的弃用API来做类似的事情。看看这里是什么目前的工作:https://gist.github.com/eliperelman/b0201cbea1556ed1fe2e请注意,我对底层模块做了一些修改,以允许我传递一些额外的参数。 – Eli 2013-05-29 15:15:42

+0

啊,是的。这些是来自开启了自动创建环聊功能的用户的普通用户令牌?我最终可能会做类似的事情。 oauth流对于没有用户干预的服务显然不太好,所以能够硬编码用户的凭证来生成令牌会很方便。我会给那个镜头。最终,这两种方法看起来都非常脆弱,谷歌随时都可能破坏它们。令人沮丧的是没有一个前沿的方式来做到这一点。 – drewww 2013-05-29 15:33:47

+0

我希望能够在没有ClientLogin的情况下以自动化的方式工作,但目前我还没有看到路径。如果没有人类/浏览器的干预,在某些层面上似乎不可行。尽管它让我很痛苦,但我认为我也需要去ClientLogin路线。您介意分享您对ClientLogin所做的更改吗?或者只是指出我在调整的正确方向? – drewww 2013-06-25 23:00:14

相关问题