C# Google Contacts API返回我发送到的电子邮件地址列表,但不返回我联系人列表中的电子邮件地址?
Google Contacts API返回我发送到的电子邮件地址列表,但不返回我联系人列表中的电子邮件地址 我正在使用谷歌联系人api,并尝试在我的gmail联系人中获取电子邮件列表。谷歌联系人位于 下面是我使用的代码:C# Google Contacts API返回我发送到的电子邮件地址列表,但不返回我联系人列表中的电子邮件地址?,c#,google-api,google-contacts-api,C#,Google Api,Google Contacts Api,Google Contacts API返回我发送到的电子邮件地址列表,但不返回我联系人列表中的电子邮件地址 我正在使用谷歌联系人api,并尝试在我的gmail联系人中获取电子邮件列表。谷歌联系人位于 下面是我使用的代码: public List<GMail> GetContacts(GooglePlusAccessToken serStatus) { List<GMail> ret = new List<GMail>(); string go
public List<GMail> GetContacts(GooglePlusAccessToken serStatus)
{
List<GMail> ret = new List<GMail>();
string google_client_id = _ClientId;
string google_client_sceret = _ClientSeceret;
string refreshToken = serStatus.refresh_token;
string accessToken = serStatus.access_token;
string scopes = "https://www.google.com/m8/feeds/contacts/default/full/";
OAuth2Parameters oAuthparameters = new OAuth2Parameters()
{
ClientId = google_client_id,
ClientSecret = google_client_sceret,
RedirectUri = GetRedirectUrl(),
Scope = scopes,
AccessToken = accessToken,
RefreshToken = refreshToken
};
RequestSettings settings = new RequestSettings("<var>Invite GMail Friends</var>", oAuthparameters);
ContactsRequest cr = new ContactsRequest(settings);
ContactsQuery query = new ContactsQuery(ContactsQuery.CreateContactsUri("default"));
query.NumberToRetrieve = _NumberToRetrieve;
Feed<Contact> feed = cr.Get<Contact>(query);
foreach (Contact entry in feed.Entries)
{
foreach (EMail email in entry.Emails)
{
GMail g = new GMail(email.Address);
ret.Add(g);
}
}
return ret;
}
public List GetContacts(GooglePlusAccessToken serStatus)
{
List ret=新列表();
字符串google\u client\u id=\u ClientId;
字符串google\u client\u sceret=\u ClientSeceret;
字符串refreshttoken=serStatus.refresh\u token;
字符串accessToken=serStatus.access\u token;
字符串范围=”https://www.google.com/m8/feeds/contacts/default/full/";
OAuth2Parameters OAuth2Parameters=新的OAuth2Parameters()
{
ClientId=google\u client\u id,
ClientSecret=google\u client\u sceret,
RedirectUri=GetRedirectUrl(),
范围=范围,
AccessToken=AccessToken,
RefreshToken=RefreshToken
};
RequestSettings=newRequestSettings(“邀请GMail好友”,oAuthparameters);
ContactsRequest cr=新的ContactsRequest(设置);
ContactsQuery query=newcontactSquery(ContactsQuery.CreateContactsUri(“默认”));
query.numbertorRetrieve=\u numbertorRetrieve;
Feed=cr.Get(查询);
foreach(feed.Entries中的联系人条目)
{
foreach(条目中的电子邮件。电子邮件)
{
GMail g=新的GMail(email.Address);
再加上(g);
}
}
返回ret;
}
但是由于某些原因,代码返回我过去发送到的电子邮件地址列表,而不是我联系人列表中的电子邮件。这是正确的吗?有人知道为什么吗
谢谢
**谢谢Allen的回答,这是我的代码,非常好用!联络小组实际上是:系统小组:MyContacts@gmail.com**
public List<GMail> GetContacts_2(GooglePlusAccessToken serStatus)
{
List<GMail> ret = new List<GMail>();
string google_client_id = _ClientId;
string google_client_sceret = _ClientSeceret;
/*Get Google Contacts From Access Token and Refresh Token*/
string refreshToken = serStatus.refresh_token;
string accessToken = serStatus.access_token;
string scopes = "https://www.google.com/m8/feeds/groups/default/full/?v=3.0";
OAuth2Parameters oAuthparameters = new OAuth2Parameters()
{
ClientId = google_client_id,
ClientSecret = google_client_sceret,
RedirectUri = GetRedirectUrl(),
Scope = scopes,
AccessToken = accessToken,
RefreshToken = refreshToken
};
RequestSettings settings = new RequestSettings("<var>Invite GMail Friends</var>", oAuthparameters);
ContactsRequest cr = new ContactsRequest(settings);
GroupsQuery query = new GroupsQuery(GroupsQuery.CreateGroupsUri("default"));
query.NumberToRetrieve = 1000; // _NumberToRetrieve; // 100;// 5000;
//Feed feed = cr.Get(query);
Feed<Group> feed = cr.Get<Group>(query);
string gpId = string.Empty;
foreach (Group gp in feed.Entries)
{
if (gp.Title.Contains("Contacts"))
{
gpId = gp.Id;
//break;
}
//// for testing
//GMail g = new GMail(gp.Title.Replace(" ", "") + "@gmail.com");
//ret.Add(g);
}
if (gpId.Length > 0)
{
scopes = "https://www.google.com/m8/feeds/contacts/default/full/?v=3.0";
oAuthparameters = new OAuth2Parameters()
{
ClientId = google_client_id,
ClientSecret = google_client_sceret,
RedirectUri = GetRedirectUrl(),
Scope = scopes,
AccessToken = accessToken,
RefreshToken = refreshToken
};
settings = new RequestSettings("<var>Invite GMail Friends</var>", oAuthparameters);
//ContactsRequest cr = new ContactsRequest(settings);
cr = new ContactsRequest(settings);
ContactsQuery query2 = new ContactsQuery(ContactsQuery.CreateContactsUri("default"));
query2.NumberToRetrieve = _NumberToRetrieve; // 100;// 5000;
query2.OrderBy = ContactsQuery.OrderByLastModified;
query2.SortOrder = ContactsQuery.SortOrderDescending;
query2.Group = gpId;
Feed<Contact> feed2 = cr.Get<Contact>(query2);
foreach (Contact entry in feed2.Entries)
{
foreach (EMail email in entry.Emails)
{
GMail g = new GMail(email.Address);
ret.Add(g);
}
}
//if (ret.Count <= 0)
//{
// GMail g = new GMail("NoContact@gmail.com");
// ret.Add(g);
//}
}
//else
//{
// // for testing
// GMail g = new GMail("NoGroup@gmail.com");
// ret.Add(g);
//}
return ret;
}
public List GetContacts_2(GooglePlusAccessToken serStatus)
{
List ret=新列表();
字符串google\u client\u id=\u ClientId;
字符串google\u client\u sceret=\u ClientSeceret;
/*从访问令牌和刷新令牌获取Google联系人*/
字符串refreshttoken=serStatus.refresh\u token;
字符串accessToken=serStatus.access\u token;
字符串范围=”https://www.google.com/m8/feeds/groups/default/full/?v=3.0";
OAuth2Parameters OAuth2Parameters=新的OAuth2Parameters()
{
ClientId=google\u client\u id,
ClientSecret=google\u client\u sceret,
RedirectUri=GetRedirectUrl(),
范围=范围,
AccessToken=AccessToken,
RefreshToken=RefreshToken
};
RequestSettings=newRequestSettings(“邀请GMail好友”,oAuthparameters);
ContactsRequest cr=新的ContactsRequest(设置);
GroupsQuery query=newgroupsquery(GroupsQuery.CreateGroupsUri(“默认”));
query.numbertorretrieve=1000;//\u numbertorretrieve;//100;//5000;
//Feed=cr.Get(查询);
Feed=cr.Get(查询);
string gpId=string.Empty;
foreach(提要条目中的组gp)
{
如果(总标题包含(“联系人”))
{
gpId=gp.Id;
//中断;
}
////用于测试
//GMail g=新的GMail(gp.Title.Replace(“,”)+“@GMail.com”);
//再加上(g);
}
如果(gpId.Length>0)
{
作用域=”https://www.google.com/m8/feeds/contacts/default/full/?v=3.0";
oAuthparameters=新的OAuth2Parameters()
{
ClientId=google\u client\u id,
ClientSecret=google\u client\u sceret,
RedirectUri=GetRedirectUrl(),
范围=范围,
AccessToken=AccessToken,
RefreshToken=RefreshToken
};
设置=新请求设置(“邀请GMail好友”,oAuthparameters);
//ContactsRequest cr=新的ContactsRequest(设置);
cr=新联系人请求(设置);
ContactsQuery query2=新的ContactsQuery(ContactsQuery.CreateContactsUri(“默认”));
query2.numbertorRetrieve=\u numbertorRetrieve;//100;//5000;
query2.OrderBy=ContactsQuery.OrderByLastModified;
query2.SortOrder=ContactsQuery.SortOrderDescending;
query2.Group=gpId;
Feed feed2=cr.Get(查询2);
foreach(feed2.条目中的联系人条目)
{
foreach(条目中的电子邮件。电子邮件)
{
GMail g=新的GMail(email.Address);
再加上(g);
}
}
//如果(ret.Count首先,我感觉到了你的痛苦。谷歌的API是最糟糕的
我绕过它的方式(不是一种有效的做事方式,但这是我能找到的最好的方式。否则谷歌会返回所有与账户持有人交流过的虚假联系电子邮件,在一个典型的GMail账户中可能有数千个这样的条目)是这样的(它的VB.net代码,但你可以很容易地获得要点并转换)
首先检索联系人组并查找标题“联系人”
然后使用联系人组的ID在联系人中搜索
Dim query As New ContactsQuery(ContactsQuery.CreateContactsUri("default"))
query.NumberToRetrieve = 2000
query.OrderBy = ContactsQuery.OrderByLastModified
query.SortOrder = ContactsQuery.SortOrderDescending
query.Group = GroupAtomId
Dim f As Feed(Of Contact) = cr.Get(Of Contact)(query)
For Each entry As Contact In f.Entries
'Do something with the data, these are real contacts in GMail
Next
因此,这里的重点是首先获取组id并在联系人搜索中使用它。我相信这就是您的代码缺少的部分。首先,我感受到了您的痛苦。谷歌的API是最糟糕的
我绕过它的方式(不是一种有效的做事方式,但这是我能找到的最好的方式。否则谷歌会返回所有与账户持有人交流过的虚假联系电子邮件,在一个典型的GMail账户中可能有数千个这样的条目)是这样的(它的VB.net代码,但你可以很容易地获得要点并转换)
首先检索联系人组并查找标题“联系人”
然后使用联系人组的ID在联系人中搜索
Dim query As New ContactsQuery(ContactsQuery.CreateContactsUri("default"))
query.NumberToRetrieve = 2000
query.OrderBy = ContactsQuery.OrderByLastModified
query.SortOrder = ContactsQuery.SortOrderDescending
query.Group = GroupAtomId
Dim f As Feed(Of Contact) = cr.Get(Of Contact)(query)
For Each entry As Contact In f.Entries
'Do something with the data, these are real contacts in GMail
Next
因此,这里的要点是首先获取组id并在联系人搜索中使用它。我相信这就是您的代码所缺少的。谢谢。这很有效!组名实际上是:SystemGroup:MyContacts@gmail.com.我将更新C#代码示例的原始问题