Usuário com melhor resposta
Ler contatos do Gmail via C#

Pergunta
-
Eu tenho necessidade de ler meus contatos do gmail através de um programa que fiz em C#.
Encontrei na internet um trecho do programa, mas não sei como utilizá-lo, ou seja, não sei como chamar esse código.
Segue abaixo o código.
private List<string[]> GetContact() { // login ContactsService Service = new ContactsService("google-contacts"); Service.setUserCredentials("your.email@gmail.com", "yourPassword"); Service.QueryClientLoginToken(); List<string[]> Contacts = new List<string[]>(); ContactsQuery query = new ContactsQuery(ContactsQuery.CreateContactsUri("default")); query.StartIndex = 1; ContactsFeed feed = Service.Query(query); while (feed != null && feed.Entries.Count > 0) { foreach (ContactEntry entry in feed.Entries) { // This Example gets the phone numbers but we can obtain the info we want/need about the contact if (entry.Phonenumbers.Count > 0) { string phoneNumbers = ""; // get all phone numbers for (int a = 0; a < entry.Phonenumbers.Count; a++) { phoneNumbers += entry.Phonenumbers[a].Value + "; "; } int x = phoneNumbers.LastIndexOf(";"); phoneNumbers = phoneNumbers.Substring(0, phoneNumbers.LastIndexOf(";")); // in the array "item" there are: fullname(name and surname), phone number1;phonenumber2;...., contact url for edit string[] item = { entry.Name.FullName, phoneNumbers, entry.Id.AbsoluteUri }; Contacts.Add(item); } } // move to next page until end if (feed.NextChunk != null) { query.Uri = new Uri(feed.NextChunk); feed = Service.Query(query) as ContactsFeed; } else feed = null; } // sorting the list for full name Contacts.Sort(delegate(string[] item1, string[] item2) { return item1[0].CompareTo(item2[0]); }); return Contacts; }
Como executar o código acima?
Obrigado.
prof. Taveira
Respostas
-
Para que isso funcione é necessario adicionar uma biblioteca..
https://code.google.com/p/google-gdata/downloads/list
na pagina acima, exsitem diversos exemplos de uso, veja:
public static void PrintAllContacts(ContactsRequest cr) { Feed<Contact> f = cr.GetContacts(); foreach (Contact entry in f.Entries) { if (entry.Name != null) { Name name = entry.Name; if (!string.IsNullOrEmpty(name.FullName)) Console.WriteLine("\t\t" + name.FullName); else Console.WriteLine("\t\t (no full name found)"); if (!string.IsNullOrEmpty(name.NamePrefix)) Console.WriteLine("\t\t" + name.NamePrefix); else Console.WriteLine("\t\t (no name prefix found)"); if (!string.IsNullOrEmpty(name.GivenName)) { string givenNameToDisplay = name.GivenName; if (!string.IsNullOrEmpty(name.GivenNamePhonetics)) givenNameToDisplay += " (" + name.GivenNamePhonetics + ")"; Console.WriteLine("\t\t" + givenNameToDisplay); } else Console.WriteLine("\t\t (no given name found)"); if (!string.IsNullOrEmpty(name.AdditionalName)) { string additionalNameToDisplay = name.AdditionalName; if (string.IsNullOrEmpty(name.AdditionalNamePhonetics)) additionalNameToDisplay += " (" + name.AdditionalNamePhonetics + ")"; Console.WriteLine("\t\t" + additionalNameToDisplay); } else Console.WriteLine("\t\t (no additional name found)"); if (!string.IsNullOrEmpty(name.FamilyName)) { string familyNameToDisplay = name.FamilyName; if (!string.IsNullOrEmpty(name.FamilyNamePhonetics)) familyNameToDisplay += " (" + name.FamilyNamePhonetics + ")"; Console.WriteLine("\t\t" + familyNameToDisplay); } else Console.WriteLine("\t\t (no family name found)"); if (!string.IsNullOrEmpty(name.NameSuffix)) Console.WriteLine("\t\t" + name.NameSuffix); else Console.WriteLine("\t\t (no name suffix found)"); } else Console.WriteLine("\t (no name found)"); foreach (EMail email in entry.Emails) { Console.WriteLine("\t" + email.Address); } } }
ContactsRequest (parametro da funçao acima) criado desta maneira:
using Google.Contacts; using Google.GData.Contacts; using Google.GData.Client; using Google.GData.Extensions; // ... RequestSettings settings = new RequestSettings("YOUR_APPLICATION_NAME"); // Add authorization token. // ... ContactsRequest cr = new ContactsRequest(settings); // ...
Note que como é uma aplicaçao externa acessando a sua lista de contatos, provevelmente voce vai ter que permitir acesso.
toda a explicaçao esta no link acima, que explica como usar a API.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 18 de novembro de 2015 17:52
- Sugerido como Resposta Mr. GMSOFT quarta-feira, 18 de novembro de 2015 19:42
- Marcado como Resposta Marcos SJ quinta-feira, 19 de novembro de 2015 17:44
Todas as Respostas
-
Para que isso funcione é necessario adicionar uma biblioteca..
https://code.google.com/p/google-gdata/downloads/list
na pagina acima, exsitem diversos exemplos de uso, veja:
public static void PrintAllContacts(ContactsRequest cr) { Feed<Contact> f = cr.GetContacts(); foreach (Contact entry in f.Entries) { if (entry.Name != null) { Name name = entry.Name; if (!string.IsNullOrEmpty(name.FullName)) Console.WriteLine("\t\t" + name.FullName); else Console.WriteLine("\t\t (no full name found)"); if (!string.IsNullOrEmpty(name.NamePrefix)) Console.WriteLine("\t\t" + name.NamePrefix); else Console.WriteLine("\t\t (no name prefix found)"); if (!string.IsNullOrEmpty(name.GivenName)) { string givenNameToDisplay = name.GivenName; if (!string.IsNullOrEmpty(name.GivenNamePhonetics)) givenNameToDisplay += " (" + name.GivenNamePhonetics + ")"; Console.WriteLine("\t\t" + givenNameToDisplay); } else Console.WriteLine("\t\t (no given name found)"); if (!string.IsNullOrEmpty(name.AdditionalName)) { string additionalNameToDisplay = name.AdditionalName; if (string.IsNullOrEmpty(name.AdditionalNamePhonetics)) additionalNameToDisplay += " (" + name.AdditionalNamePhonetics + ")"; Console.WriteLine("\t\t" + additionalNameToDisplay); } else Console.WriteLine("\t\t (no additional name found)"); if (!string.IsNullOrEmpty(name.FamilyName)) { string familyNameToDisplay = name.FamilyName; if (!string.IsNullOrEmpty(name.FamilyNamePhonetics)) familyNameToDisplay += " (" + name.FamilyNamePhonetics + ")"; Console.WriteLine("\t\t" + familyNameToDisplay); } else Console.WriteLine("\t\t (no family name found)"); if (!string.IsNullOrEmpty(name.NameSuffix)) Console.WriteLine("\t\t" + name.NameSuffix); else Console.WriteLine("\t\t (no name suffix found)"); } else Console.WriteLine("\t (no name found)"); foreach (EMail email in entry.Emails) { Console.WriteLine("\t" + email.Address); } } }
ContactsRequest (parametro da funçao acima) criado desta maneira:
using Google.Contacts; using Google.GData.Contacts; using Google.GData.Client; using Google.GData.Extensions; // ... RequestSettings settings = new RequestSettings("YOUR_APPLICATION_NAME"); // Add authorization token. // ... ContactsRequest cr = new ContactsRequest(settings); // ...
Note que como é uma aplicaçao externa acessando a sua lista de contatos, provevelmente voce vai ter que permitir acesso.
toda a explicaçao esta no link acima, que explica como usar a API.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 18 de novembro de 2015 17:52
- Sugerido como Resposta Mr. GMSOFT quarta-feira, 18 de novembro de 2015 19:42
- Marcado como Resposta Marcos SJ quinta-feira, 19 de novembro de 2015 17:44
-
Olá William.
Já li e reli as informações do link que me enviou mas não dá certo.No caso do seu exemplo, a chamada a procedure
public static void PrintAllContacts(ContactsRequest cr)
é feita como? Na linha
RequestSettings settings = new RequestSettings("YOUR_APPLICATION_NAME");
o que é YOUR APPLICATION NAME? Qualquer nome serve?
Desculpe, mas precisaria de conseguir isso, mas não tenho conseguido.
No caso do código que eu postei na pergunta não é possível fazer por ele?
Obrigado
prof. Taveira
-
>o que é YOUR APPLICATION NAME? Qualquer nome serve?
A API precisa de um nome de uma aplicaçao para saber quem esta tendando acessar. Qualquer nome serve.
>No caso do código que eu postei na pergunta não é possível fazer por ele?
Aparentemente ele tambem usa a mesma bliblioteca, mas algumas classes estao diferentes. Pode ser que o codigo esteja baseado na versao 2 desta API. O link que eu te passei é a da versao 3.
Sugiro que voce encontre o topico original de onde voce extraiu o codigo para ver se o autor faz referencia à qual versao da API ele usa.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
William.
Tenho um pouco de dificuldade em algumas situações em C#. O meu conhecimento é pequeno.
Eu na realidade, só precisava fazer a leitura dos contatos, porque ai eu gravava em um banco de dados Access que tenho na minha aplicação. Assim essa minha aplicação estaria sempre atualizada.
Você não quer fazer um teste no código que te passei? Te informo o email e senha.
Obrigado mais uma vez.
Taveira
prof. Taveira
-
Professor Taveira,
Eu poderei fazer um teste com seu código somente à partir da semana que vem (caso possa esperar). Como eu disse, seria interessante saber o endereço do artigo original. Se possivel poste aqui.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Boa tarde William.
Posso esperar sim.
O endereço do artigo original é:
http://dotnetoday.blogspot.com.br/2012/10/c-google-api-getting-google-contacts.html
Texto completo com exclusão, inclusão, etc.
http://dotnetoday.blogspot.com.br/search/label/Google%20API%20-%20Contact
Tem esse também:
https://developers.google.com/google-apps/contacts/v2/developers_guide_dotnet
Muito obrigado novamente.
prof. Taveira
- Editado José Carlos Taveira segunda-feira, 23 de novembro de 2015 16:45
-
using Google.Contacts; using Google.GData.Contacts; using Google.GData.Client; using Google.GData.Extensions; // ... RequestSettings settings = new RequestSettings("YOUR_APPLICATION_NAME");
// O que meter aqui? é que diz para meter o token, mas o token agora é criado com uso ao jason certo?
já não é da mesma forma como na V1 e 2???
fico mesmo confuso com esta API // ...
ContactsRequest cr = new ContactsRequest(settings); // ...