2013-04-05 19 views
8

Udało mi się dotychczas hakować pakiety googleapis i gapitoken, aby tworzyć wydarzenia w Kalendarzu Google za pośrednictwem interfejsu API. Chodziło o to, aby znaleźć sposób na programowe generowanie linku do Google Hangout, którego nie można zrobić za pomocą interfejsu API, o ile wiem. Zgodnie z this post, masz możliwość włączenia automatycznego tworzenia linków do Hangoutów podczas tworzenia wydarzeń, które zrobiłem dla konta.Tworzenie zdarzeń Kalendarza Google przy użyciu interfejsu API nie powoduje utworzenia linku do Hangouta

Kod, którego używam, będzie uruchamiany tylko z Node.js, więc nie ma żadnej części skierowanej do użytkownika. Używam techniki konta usługi do uwierzytelniania za pośrednictwem protokołu OAuth2.0. Wszystko wydaje się działać dobrze, z wyjątkiem zdarzenia, które zostało utworzone, nie zawiera właściwości o nazwie "hangoutLink". Jakieś pomysły?

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

Odpowiedz

0

Ustaw poświadczenia do klienta auth extenso:

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

nie jest to kompletne rozwiązanie, ale miałem częściowy sukces zmieniając ograniczeń trochę. Automatyczne tworzenie linków do Hangoutów ze zdarzeniami wydaje się być ustawieniem specyficznym dla konta, a nie ustawieniem specyficznym dla kalendarza. Oznacza to, że używanie modelu konta usługi do tworzenia wydarzeń nie powoduje utworzenia spotkania, ponieważ nie możemy (o ile mogę to stwierdzić) włączyć automatycznych spotkań na kontach Google utworzonych w model konta usługi.

Aby przetestować tę teorię, przygotowałem wersję opartą na OAuth, która otrzymuje tradycyjny token konta Google. Wygląda to tak: https://gist.github.com/drewww/5665130

Jest mniej więcej taki sam jak przykład, z wyjątkiem używanego tokena. W wywołaniu zwrotnym hangout Link jest niezawodnie wypełniony.

Oczywiście nie jest to tak czyste, jak w twoim przykładzie. To zależy od tradycyjnego przepływu oauth, a użytkownik tworzący wydarzenia musi automatycznie skonfigurować Hangout w ustawieniach konta osobistego. Jest to oczywiście bardzo niewygodne z punktu widzenia doświadczenia użytkownika. Zamierzam spróbować utworzyć obojętne konto Google i mieć wszystkie moje hangouty.

+0

Obecnie robię coś podobnego, używając przestarzałego interfejsu API, który pozwala używać tokenów. Zobacz tutaj, co aktualnie działa: https://gist.github.com/eliperelman/b0201cbea1556ed1fe2e Zauważ, że wprowadziłem pewne modyfikacje do modułu podstawowego, aby umożliwić mi przekazanie kilku dodatkowych parametrów. – Eli

+0

Ah, tak. To są zwykłe tokeny użytkownika od użytkownika, który ma włączone automatyczne tworzenie hangoutów? Mogę skończyć robiąc coś podobnego. Przepływ oauth najwyraźniej nie jest tak dobry dla usługi, która powinna działać bez interwencji użytkownika, więc przydałaby się umiejętność twardego kodowania poświadczeń użytkowników do generowania tokenów. Dam ci ten strzał. Ostatecznie oba podejścia wydają się dość kruche i Google może je złamać w dowolnym momencie. Frustrujące, że nie mają na to wstępnego sposobu. – drewww

+0

Mam aspiracje, aby to działało w sposób zautomatyzowany bez ClientLogin, ale nie widzę w tym momencie ścieżki. Nie wydaje się to możliwe bez interwencji człowieka/przeglądarki na pewnym poziomie. Tak bardzo, jak mnie to boli, myślę, że muszę również przejść na trasę ClientLogin. Czy chcesz podzielić się zmianami wprowadzonymi w ClientLogin? Lub po prostu wskazać mi właściwy kierunek regulacji? – drewww

Powiązane problemy