使用asp.net中的access_token访问所有Gmail联系人

时间:2012-10-18 10:31:15

标签: asp.net google-apps google-contacts

我正在尝试访问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.

1 个答案:

答案 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页。