![](/img/trans.png)
[英]Google contacts API problems from JavaScript client with OAuth2 authentication
[英]Google Contacts API with Google JavaScript Client Lib
我正在嘗試使用Google Contacts API v3 。
由於OAuth2身份驗證和授權,我開始使用適用於JavaScript的Google API客戶端庫 。 我對API訪問的那部分沒有任何問題。
但在做了auth部分后,我不知道接下來該做什么。 我可以將google-api-javascript-client用於Google Contacts API v3嗎? 在javascript-client支持的Google API列表中,不顯示聯系人API。 但我可以使用OAuth 2.0 Playground工具完全訪問。
我真的很困惑哪個客戶端最適合使用最新的Google Contacts API。 什么是gdata-javascript-client ?
要將v3 contacts api與gapi(Google JS客戶端lib)提供的身份驗證令牌一起使用,這個有用,使用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));
});
您遇到的問題是Contacts API v3是一個較舊的API,可與不推薦使用的GData客戶端庫一起使用。 因此,它與較新的Google API JavaScript客戶端不兼容。
現在,您需要加載並使用GData Client庫。 有關GData庫與Google API客戶端之間差異的更多信息,請參閱最近的SO問題: gapi.client.load與google.load
我知道這是一個老問題,但在查看如何從Google帳戶中讀取聯系人信息時會出現此問題。
如果您只需要訪問聯系人以將其導入或顯示電子郵件,電話號碼或其他信息而您無需對其進行修改,則可以使用People API( https://developers.google.com/people) / )。 對於javascript,您可以查看示例選項卡。
我創建了一個要點,這幾乎是來自Google的示例,但添加了requestField參數。
不幸的Google Contacts API無法與新的Javascript客戶端庫配合使用。 它僅適用於GData Client Library。 我嘗試過使用GData客戶端庫,但是很難在文檔的每個關頭都收到不推薦使用庫的警告。
因此,我用了一個復合物,
不幸的是,由於跨域限制,您需要使用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 for JSONP但你也可以使用jquery或vanilla js 如何在沒有JQuery的情況下從Javascript發出JSONP請求?
您需要提供自己的YOURCLIENTID,並定義processContacts函數。
gdata.io.handleScriptLoaded(data)是必要的,因為這是url在回調期間所期望的。
我使用7000的限制,但我認為沒有必要。
如果您不想使用JSONP,您可以將access_token轉發到您的網絡服務器,並在那里處理URL,例如使用cURL或Node.js,只需用json替換json-in-script。
在json-in-script中,瀏覽器很重要,否則瀏覽器就會出現問題。
感謝此頁面上的其他答案,這使我指出了正確的方向。
我希望Google能夠使用新的Javascript客戶端庫支持Contacts API。 我希望其他人能夠在此期間使用這個解決方案。
要使用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從google開發者控制台獲取客戶端ID。
這是我們發現用於獲取個人數據的方法:
var data = (JSON.stringify(data.feed.entry[0].gd$email, null, 4));
console.log(data);
如果您運行JSON.stringify(數據),您可以看到可以調用的所有標頭。
google contact v3是你這份工作的最好朋友
在這里,您可以找到所有可靠的請求端點https://developers.google.com/google-apps/contacts/v3/
與所有聯系人列表一樣,這是終點https://developers.google.com/google-apps/contacts/v3/#retrieving_all_contacts
獲得身份驗證后,您可以獲取此網址的請求以獲取所有聯系人列表這是python中的示例http://code.google.com/p/gdata-python-client/source/browse/samples/contacts/contacts_example。 PY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.