不幸的是,Google 联系人 API 无法与新的 Javascript 客户端库一起使用。它仅适用于 GData 客户端库。我尝试过使用 GData 客户端库,但是这很困难,因为您在每个时刻都会在文档中收到该库已被弃用的警告。
因此,我使用了氢化物,
- 使用新的客户端库,以获得身份验证。
- 使用 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 以及 如何在没有 JQuery 的情况下从 Javascript 发出 JSONP 请求?
您需要提供自己的 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 客户端库一起使用。我希望其他人同时能够使用此解决方案。