带有 Google JavaScript 客户端库的 Google Contacts API

Posted

技术标签:

【中文标题】带有 Google JavaScript 客户端库的 Google Contacts API【英文标题】:Google Contacts API with Google JavaScript Client Lib 【发布时间】:2012-12-15 18:33:04 【问题描述】:

我正在尝试使用Google Contacts API v3。

由于 OAuth2 身份验证和授权,我从 Google APIs Client Library for javascript 开始。 我对 API 访问的那部分没有问题。

但是在完成认证部分之后,我不知道下一步该做什么。我可以将google-api-javascript-client 用于 Google Contacts API v3 吗?在 list of the supported Google APIs by the javascript-client 中没有出现联系人 API。但我可以通过OAuth 2.0 Playground tool 完全访问。

我真的很困惑哪个客户端最适合使用最新的 Google Contacts API。 gdata-javascript-client 是怎么回事?

【问题讨论】:

对此有何更新?这似乎问题仍然存在,我无法使用(或者我可能不知道),谷歌联系人 api v3。有人找到解决方案了吗? 【参考方案1】:

要将 v3 联系人 API 与 gapi(Google JS 客户端库)提供的身份验证令牌一起使用,使用 alt=&json 会很有帮助

$.getJSON('https://www.google.com/m8/feeds/contacts/default/full/?access_token=' + 
             authResult.access_token + "&alt=json&callback=?", function(result)
      console.log(JSON.stringify(result));
);

【讨论】:

注意:这受跨域政策限制 那么有没有办法用javascript客户端库做到这一点? gapi.client.load('联系人','v3',function());例如? 太棒了,这节省了我的时间 我遇到了同样的问题,我通过先获取访问令牌解决了它,然后直接调用API。这是因为 javascript api (gapi) 不支持检索 google 联系人。由于这很麻烦,我在这里写了一篇关于它的博文:labs.magnet.me/nerds/2015/05/11/…【参考方案2】:

我知道这是一个老问题,但是在查看如何从 Google 帐户读取联系人信息时会出现这个问题。

如果您只需要访问联系人以将其导入或显示电子邮件、电话号码或其他信息而无需修改,则可以使用人员 API (https://developers.google.com/people/)。对于 javascript,您可以查看示例选项卡。

我创建了一个 gist,它几乎是来自 Google 的示例,但添加了 requestField 参数。

https://gist.github.com/ddbb1977/7a4b408ed17c7249252a

【讨论】:

如果我的单个网页有一个要发送给谷歌联系人的号码怎么办......首选(但简单)的方式是什么?【参考方案3】:

您遇到的问题是 Contacts API v3 是一个较旧的 API,可与已弃用的 GData Client Library 一起使用。因此它与较新的Google APIs JavaScript Client 不兼容。

现在您需要加载和使用 GData 客户端库。有关 GData 库和 Google API 客户端之间差异的更多信息,请参阅最近的这个 SO 问题:gapi.client.load versus google.load

【讨论】:

感谢您的澄清!我正在尝试使用 GData 客户端库。遗憾的是,身份验证不起作用。我认为这是一个普遍的问题,因为 interactive example from Google 也没有工作。希望这是一个暂时的问题。【参考方案4】:

不幸的是,Google Contacts API 不适用于新的 Javascript 客户端库。它仅适用于 GData 客户端库。我尝试过使用 GData 客户端库,但是这很困难,因为您在每个时刻都会在文档中收到该库已被弃用的警告。

因此,我使用了Hydrid,

    使用新的客户端库来获得身份验证。 使用 URL 获取联系人

很遗憾,由于跨域限制需要使用JSONP,否则浏览器会失效。

 <script src="https://apis.google.com/js/client.js"></script>
.....
function contactsInit() 
  var clientId = 'YOURCLIENTID.apps.googleusercontent.com';
  var scopes = 'https://www.google.com/m8/feeds';
  gapi.auth.authorize(
    client_id: clientId, scope: scopes, immediate: false, 
     handleAuthResult);

 function handleAuthResult(authResult) 
 if (authResult && !authResult.error) 
   var url = 
    "https://www.google.com/m8/feeds/contacts/default/" + 
    "full?alt=json-in-script&access_token=" + 
    authResult.access_token + 
    "&max-results=7000&v=3.0";

   var myJSONP = new Request.JSONP(
      url: url,
      callbackKey: 'jsoncallback',
      data: 
            ,
      onRequest: function(url)
                // a script tag is created with a src equal to url
          ,
      onComplete: function(data)
                // the request was completed.
            
      ).send();
    
 


function Skeleton() 
  if (!gdata) 
    var gdata = new Skeleton();
    gdata.io  = new Skeleton();
    gdata.io.handleScriptLoaded = function(data)    
      processContacts(data);
  

注意事项: 我将 Mootools 用于 JSONP,但您也可以使用 jquery 或 vanilla js 和 How to make a JSONP request from Javascript without JQuery?

您需要提供自己的 YOURCLIENTID,并定义 processContacts 函数。

gdata.io.handleScriptLoaded(data) 是必要的,因为这是 url 在回调期间所期望的。

我使用了 7000 的限制,但我认为没有必要。

如果您不想使用 JSONP,您可以将 access_token 转发到您的网络服务器,并在那里处理 URL,例如使用 cURL 或 Node.js 只需将 json-in-script 替换为 json。

json-in-script 在浏览器中很重要,否则浏览器会发牢骚。

感谢此页面上的其他答案,这为我指明了正确的方向。

我希望 Google 将使联系人 API 能够与新的 Javascript 客户端库一起使用。我希望其他人同时能够使用此解决方案。

【讨论】:

【参考方案5】:

要使用 Google plus 获取联系人列表,请使用:-

<script src="https://apis.google.com/js/client.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
  function auth() 
    var config = 
      'client_id': 'OAUTH_CLIENT_ID',
      'scope': 'https://www.google.com/m8/feeds'
    ;
    gapi.auth.authorize(config, function() 
      fetch(gapi.auth.getToken());
    );
  

  function fetch(token) 
    $.ajax(
    url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&alt=json",
    dataType: "jsonp",
    success:function(data) 
              console.log(JSON.stringify(data));
    
);

html 正文中:-

<button onclick="auth();">GET CONTACTS FEED</button>

输出将包含一个包含电话号码的联系人字段。

确保使用正确的重定向 uri 从谷歌开发者控制台获取客户端 ID。

【讨论】:

【参考方案6】:

这是我们发现用于获取个人数据的方法:

var data = (JSON.stringify(data.feed.entry[0].gd$email, null, 4));
console.log(data);

如果您运行 JSON.stringify(data),您可以看到所有可以调用的标头。

【讨论】:

【参考方案7】:

google contact v3 是你这份工作最好的朋友

在这里你可以找到所有可能的请求端点 https://developers.google.com/google-apps/contacts/v3/

喜欢所有联系人列表,这是终点 https://developers.google.com/google-apps/contacts/v3/#retrieving_all_contacts

获得身份验证后,您可以向此 url 发出请求以获取所有联系人列表 这是python中的一个例子http://code.google.com/p/gdata-python-client/source/browse/samples/contacts/contacts_example.py

【讨论】:

以上是关于带有 Google JavaScript 客户端库的 Google Contacts API的主要内容,如果未能解决你的问题,请参考以下文章

将 Google API Javascript 客户端库加载到 Chrome 扩展程序中

使用 google api javascript 客户端访问 google 联系人 - 如何?

寻找带有 JSON 客户端库的 REST [关闭]

是否有适用于所有内容的通用OpenId Connect客户端库?

如何在Java / Kotlin客户端库中为Google上的操作将一些数据保存到userStorage中

Play Framework 2.3 和 javascript websocket 客户端库