不幸的是,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 客户端库一起使用。我希望其他人同时能够使用此解决方案。