2016-03-01 2 views
1

Я хотел получить адрес электронной почты для контактов для пользователя. Я планирую использовать API Google People. Вот моя функция для извлечения:Получите контактные адреса электронной почты с помощью API Google People в Javascript

function makeApiCall() { 
    gapi.client.load('people', 'v1').then(function() { 
     var request = gapi.client.people.people.connections.list({ 
      resourceName: 'people/me', 
      pageSize: 200, 
      fields: 'connections(resourceName)' 
     }); 
     request.execute(function(resp) { 
      if (resp.connections){ 
       var batch = gapi.client.newBatch(); 
       var emails = []; 
       for(var i = 0; i < resp.connections.length; i++){ 
        var req = gapi.client.people.people.get({ 
         resourceName: resp.connections[i].resourceName, 
         fields: "emailAddresses(value)" 
        }); 
        batch.add(req); 
        req.then(function (email){ 
         var idx = email.body.indexOf("{"); 
         var jsonString = email.body.substring(idx > 0 ? idx : 0); 
         var obj; 
         try { 
          obj = JSON.parse(jsonString); 
          if (obj.emailAddresses){ 
           for (j = 0; j < obj.emailAddresses.length; j++){ 
            emails.push(obj.emailAddresses[j].value); 
           } 
          } 
         } catch (err) { 
          console.error(email); 
         } 
        }) 
       } 
       batch.then(function(){ 
        console.log(emails); 
       }, function (err){ 
        console.error(err); 
       }); 
      } else { 
       console.error("Error", resp); 
      } 
     }); 
    }, function (err){ 
     console.error(err); 
    }); 
} 

В принципе, я выборка 200 соединений, чтобы получить их ResourceName.
Это имя reresourceName будет использоваться для получения адреса электронной почты пользователя.
Я использую пакетный запрос, чтобы получить 200 пользователей электронной почты.

Вопрос заключается в том, что для некоторых пользователей, я получаю следующее сообщение об ошибке:

{ 
    "error": { 
    "code": 429, 
    "message": "Insufficient tokens for quota group and limit ReadGroupUSER-100s using the limit by ID [email protected]", 
    "status": "RESOURCE_EXHAUSTED", 
    "details": [ 
     { 
     "@type": "type.googleapis.com/google.rpc.Help", 
     "links": [ 
      { 
      "description": "Google developer console API key", 
      "url": "https://console.developers.google.com/project/991457241470/apiui/credential" 
      } 
     ] 
     } 
    ] 
    } 
} 

Что может быть причиной и как я могу решить эту проблему?

Спасибо

+0

Сообщение об ошибке превышает количество запросов, которые ваш клиент может сделать за 100 секунд. Если вы похожи на меня, возможно, вы создали цикл, который случайно сверлит сервер повторно. Извините, я не могу помочь с вашей основной проблемой. –

+0

У меня такая же проблема. Согласно https://console.developers.google.com/apis/api/people.googleapis.com/quotas, ограничение составляет 17 000 запросов за 100 секунд ... я не могу превышать этого, поэтому я не уверен что происходит:/ –

+0

Вы решили эту проблему ?? –

ответ

1

Наконец-то я получил решение. Он использует API Google для входа в систему и вызов AJAX для получения контактных данных.

function getEmailList($scope, callback, fetchBeginCallback) { 
    _googleLogin(AppConstants.GOOGLE_API.scopes.contactEmailListing, function(err) { 
     if (err) { 
      $scope.$apply(function() { 
       callback(err); 
      }); 
     } else { 
      fetchBeginCallback ? fetchBeginCallback() : $.noop(); 
      var emails = []; 
      $.ajax({ 
        url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + gapi.auth.getToken().access_token + "&alt=json&max-results=1000", 
        dataType: 'jsonp' 
      }).done(function(data) { 
       var entries = data.feed.entry; 
       for (var i = 0; i < entries.length; i++) { 
        if (entries[i].gd$email) { 
         if (emails.indexOf(entries[i].gd$email[0].address) < 0) { 
          emails.push(entries[i].gd$email[0].address); 
         } 
        } 
       } 
       callback(undefined, emails); 
      }).fail(function(jqXHR, textStatus, errorThrown) { 
       callback(errorThrown, emails); 
      }); 
     } 
    }); 
} 

function _googleLogin(scope, callback) { 
    gapi.auth.authorize({ 
      client_id: AppConstants.GOOGLE_API.clientId, 
      scope: scope, 
      immediate: false 
    }, function handleAuthResult(authResult) { 
     if (authResult && !authResult.error) { 
      callback(); 
     } else { 
      callback(authResult ? authResult.error : "Empty Response"); 
     } 
    }); 
} 
Смежные вопросы