private List <Person> GetPeopleFromConnectionResponse(ExternalConnectionResponse connectionResponse) { List <Person> people = new List <Person>(); foreach (ExternalConnection connection in connectionResponse.Connections ?? new List <ExternalConnection>()) { string connectionId = connection.ResourceName?.Substring(7); if (string.IsNullOrEmpty(connectionId)) { continue; } if (connection.Names == null || connection.PhoneNumbers == null) { continue; } var names = connection.Names.Where(n => !string.IsNullOrEmpty(n.GivenName) || !string.IsNullOrEmpty(n.FamilyName)); if (!names.Any()) { continue; } ExternalConnectionName primaryName = names.FirstOrDefault(n => (n.Metadata?.Primary).GetValueOrDefault()); ExternalConnectionName nameToUse = primaryName != null ? primaryName : names.First(); var phoneNumbers = connection.PhoneNumbers.Where(p => !string.IsNullOrEmpty(p.CanonicalForm)); if (!phoneNumbers.Any()) { continue; } foreach (ExternalConnectionPhoneNumber phoneNumber in phoneNumbers) { Person person = new Person { ExternalId = connectionId, FirstName = nameToUse.GivenName, LastName = nameToUse.FamilyName, PhoneType = phoneNumber.FormattedType, Phone = phoneNumber.CanonicalForm }; people.Add(person); } } return(people); }
public async Task <List <Person> > GetPeopleAsync(string accessToken) { try { HttpClient client = _httpClientFactory.CreateClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); string response = await client.GetStringAsync("https://people.googleapis.com/v1/people/me/connections?pageSize=1000&personFields=names,phoneNumbers"); ExternalConnectionResponse connectionResponse = JsonConvert.DeserializeObject <ExternalConnectionResponse>(response); return(GetPeopleFromConnectionResponse(connectionResponse)); } catch (Exception) { } return(null); }