我正在尝试访问asp.net Web应用程序中的gmail联系人。
我仍然可以从谷歌获取access_token,但是当我将此acccess_token发送给谷歌联系api时,它给了我错误。
以下是我从我的应用程序重定向的网址,用户通过提供他的电子邮件和密码进行身份验证。
https://accounts.google.com/o/oauth2/auth?scope=https://www.google.com/m8/feeds&redirect_uri=http://localhost:3223/WebSite1/Default.aspx&response_type=token&client_id=881595232473.apps.googleusercontent.com
此用户使用访问令牌返回我的Web应用程序后。
在这里,我使用了两种不同的方法来获取所有联系人:
方法1 - 网络申请:
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(url1);
HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
System.IO.Stream ReceiveStream1 = response1.GetResponseStream();
StreamReader readStream1 = new StreamReader(ReceiveStream1);
string result = readStream1.ReadToEnd();
它工作正常,并给我XML结果。但问题是它只提供了前25个接触,而我总共有246个接触。
方法2 - Google Contact API :
RequestSettings rs = new RequestSettings("aman contact", Request.QueryString["access_token"].ToString());
rs.AutoPaging = true;
ContactsRequest cr = new ContactsRequest(rs);
PrintAllContacts(cr);
Feed<Contact> f = cr.GetContacts();
这给了我以下错误:
Execution of request failed: http://www.google.com/m8/feeds/contacts/default/full
之后,它会显示一个黄色页面,其中包含以下错误:
The remote server returned an error: (401) Unauthorized.
答案 0 :(得分:1)
我只能评论您关于方法1 - Web请求的问题,因为我没有使用.Net与Google Contacts API集成。
我建议您尝试传递max-query
的值(默认情况下为25)。根据我的经验,从api中提取大约500个联系人只需不到一秒钟,因此您应该能够安全地一次性查询特定的地址簿。但是,您应该将此值调整为应用程序的要求。例如,如果您需要应用程序响应速度非常快,则可能需要将此值设置得更小,以便可以更快地填充联系人。如果您在后台进行此项工作,则可以接受等待5秒钟以获得5000个联系人。
由于人们的地址簿大小各不相同,因此您需要能够使用start-index
参数多次查询API。在第一次查询之后,请查看此处返回的值:
<openSearch:totalResults>1</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
total-results
可让您计算需要使用其他start-index
查询以获取所有数据的次数。
Google Contacts API(v3)介绍了这些parameters。作为警告,start-index
是联系人数组的基于1的索引,而不是页面索引,因此您必须进行数学计算。例如,您可以请求max-query=25&start-index=26
访问联系人的第2页。