2013-04-05 96 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