2013-04-05 5 views
8

Ich war bisher erfolgreich beim Hacken der Pakete googleapis und gapitoken, um Ereignisse in einem Google Kalender über die API zu erstellen. Der Sinn von all dem war, einen Weg zu finden, um programmatisch einen Google Hangout-Link zu generieren, den Sie, soweit ich weiß, nicht über API machen können. Laut this post sollen Sie die automatische Erstellung von Hangout-Links aktivieren können, wenn Sie Ereignisse erstellen, die ich für das Konto ausgeführt habe.Erstellen von Google Kalenderereignissen mithilfe der API erstellt keinen Hangout-Link

Der Code, den ich verwende, wird nur von Node.js ausgeführt, also gibt es keinen Benutzer zugewandten Teil. Ich verwende das Service Account-Verfahren zur Authentifizierung über OAuth2.0. Alles scheint gut zu funktionieren, außer dass das erstellte Ereignis keine Eigenschaft namens "HangoutLink" enthält. Irgendwelche Ideen?

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); 
       }); 
     }); 
    }); 
}); 

Antwort

0

die Anmeldeinformationen an den Auth-Client explizit Set:

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

Dies ist keine vollständige Lösung ist, aber ich habe teilweise Erfolg hatte durch die Zwänge ein wenig zu verändern. Die automatische Erstellung von Hangout-Links mit Ereignissen scheint eine kontospezifische Einstellung und keine kalenderspezifische Einstellung zu sein. Das bedeutet, dass die Erstellung eines Hangouts nicht mit einem Service-Account-Modell zur Erstellung der Events ausgelöst wird, da wir (soweit ich es beurteilen kann) keine Möglichkeit haben, automatisch erstellte Hangouts für die in Google erstellten Google-Konten zu aktivieren das Dienstkontomodell.

Um diese Theorie zu testen, habe ich eine OAuth-basierte Version zusammengestellt, die ein traditionelles Google-Konto Token erhält. Es sieht so aus: https://gist.github.com/drewww/5665130

Es ist mehr oder weniger das gleiche wie Ihr Beispiel, außer für die Art von Token verwendet wird. Beim Rückruf wird HangoutLink zuverlässig ausgefüllt.

Offensichtlich ist dies nicht so sauber wie in Ihrem Beispiel. Es hängt von einem traditionellen oauth-Fluss ab, und der Benutzer, der die Ereignisse erstellt, muss automatisch erstellter Hangout in seinen persönlichen Kontoeinstellungen aktiviert haben. Dies ist offensichtlich in Bezug auf die Benutzererfahrung sehr unbequem. Ich werde versuchen, ein Dummy-Google-Konto zu erstellen und alle meine Hangouts zu besitzen.

+0

Ich mache derzeit etwas ähnliches, indem ich die veraltete API benutze, die es erlaubt, Token zu verwenden. Sehen Sie hier, was gerade funktioniert: https://gist.github.com/eliperelman/b0201cbea1556ed1fe2e Beachten Sie, dass ich einige Änderungen am zugrunde liegenden Modul vorgenommen habe, damit ich einige zusätzliche Parameter übergeben kann. – Eli

+0

Ah, ja. Das sind normale Benutzer-Tokens von einem Benutzer, bei dem der automatische Erstellungs-Hangout aktiviert ist? Ich könnte am Ende etwas ähnliches tun. Der oauth-Fluss ist offensichtlich nicht so gut für einen Dienst, der ohne Benutzereingriff ausgeführt werden sollte, so dass es praktisch wäre, die Anmeldeinformationen der Benutzer fest zu codieren, um Token zu generieren. Ich werde diesen Schuss geben. Letztendlich scheinen diese beiden Ansätze ziemlich zerbrechlich zu sein und Google könnte sie jederzeit brechen. Frustrierend, dass ich dazu keinen Vorweg nehme. – drewww

+0

Ich hatte die Bestrebungen, dies ohne ClientLogin automatisiert zu machen, aber ich sehe an dieser Stelle keinen Weg. Es scheint nicht möglich, ohne Mensch/Browser-Intervention auf irgendeiner Ebene. So sehr es mich schmerzt, denke ich, dass ich auch auf die ClientLogin-Route gehen muss. Haben Sie etwas dagegen, die Änderungen an ClientLogin zu teilen? Oder zeigen Sie mir einfach die richtigen Einstellungen? – drewww