我想建立一个“添加到通讯录”按钮,网页,很像“添加到日历 - 谷歌,iCal中,展望”您在网上讲座和活动页面上看到式按键like this one。
我开始调查谷歌联系,因为我使用它。我开始建立一个形式提交申请/原子+ XML来他们the help files here谈URL和Google on Stack类似的问题。
我想创造这个就像是服务社会的一个开放源代码,因为我用它鼓捣一些专家的帮助将不胜感激。我问这里获得的贡献。
我粗略的代码,不工作
function SendToGoogle() { var url = "https://www.google.com/m8/feeds/contacts/default/full"; var data = contactData(); alert(data); /* $.post(url, data, function(data, status){ alert("Data: " + data + "\nStatus: " + status); }); */ $.ajax({type: "POST", url: url, dataType: "xml", contentType: "application/atom+xml", cache: false, async: true, crossDomain: true, success: function(data, status){ alert("Data: " + data + "\nStatus: " + status)} }) } //end SendToGoogle function contactData() { return ' Elizabeth Bennet Elizabeth Bennet Notes (206)555-1212 (206)555-1213 Mountain View 1600 Amphitheatre Pkwy CA 94043 United States 1600 Amphitheatre Pkwy Mountain View '; } //end contactData
证据是在布丁所以,如果你折磨自己阅读这篇很长的帖子:Create Contacts Test Site得到它的工作:)如果你有webtool控制台打开,你可以看到我们回来联系人资源,伊丽莎白现在将在您的联系人!
哦,通过为用户谷歌认证会抱怨它不是我的小网站和本地版本都安全时,只要按一下先进和继续。 (直到您提交的OAuth验证通过自己的球队这么好一个最终产品,但...谷歌将做到这一点)
因此,在最顶部,我们看到这个google help docs:
注:对于读取和写入访问用户的联系人,使用人民API,它提供了使用代替旧的GData协议JSON接触和配置文件信息。
所以,它真的好像正确答案这里是移动到People API。我花了一些时间寻找到它,并为您粗略的答案。
我发现this example页面能够统计出的大部分你想要什么。如果你严格地遵守它,你会得到一个本地版的JavaScript连接到他们的API工作这确实让我们createContacts。
我们必须建立谷歌的API中的API应用程序基本上验证了这个过程。
一旦我们这样做,我们可以为用户所请求接受身份验证设置按钮(让我们为他们创造一个接触)。
有趣的是改变他们的代码,它只是拿出前10用户的用户页面上为创建接触。
确实出现的方式与常规的HTTP请求或许做直你已经得到了用户的权限,但我发现它更快地与他们的工作crazy api setup后。
我们需要知道如何设置gapi.client.people.people.createContact
API调用,它需要一个Person resource。这资源是很方便的按一下周围,看看安装我们如何才能的人的资源类别。
Here是我们可以使用API之前,我们试图把它放在我们的网页游戏。在右侧面板中有一个标题:
试试这个API
它旁边还有,扩大了面积,所以我们可以更容易地与API玩一个小盒子。有一个在该右上方给在JavaScript的相当于我们正在做的请求的尝试看看一个JavaScript选项。
在左边,我们有请求主体,它可以让我们把在细节上我们createContacts API请求。因此,对于你的例子,如果你把在:
{
"names": [
{
"givenName": "Elizabeth",
"familyName": "Bennet"
}
],
"phoneNumbers": [
{
"type": "home",
"value": "(206)555-1212"
},
{
"type": "cell",
"value": "(206)555-1213"
}
],
"addresses": [
{
"type": "home",
"streetAddress": "1600 Amphitheatre Pkwy",
"postalCode": "94043",
"country": "United States",
"city": "Mountain View",
"region": "California"
}
]
}
在左边的方框,你可以看到它的输入它到右边的JavaScript createContacts请求。
现在,代码是不完美的,我们要如何保持自己和我们的用户进行验证,因此我们将樱桃挑选出两两件事:
.signIn({scope: "https://www.googleapis.com/auth/contacts"})
内的网址该范围基本上告诉我们要访问用户的API。
所以,把他们放在一起现在:
<!DOCTYPE html>
<html>
<head>
<title>People API Quickstart</title>
<meta charset="utf-8" />
</head>
<body>
<p>People API Quickstart</p>
<!--Add buttons to initiate auth sequence and sign out-->
<button id="authorize_button" style="display: none;">Authorize</button>
<button id="signout_button" style="display: none;">Sign Out</button>
<button id="contact_button" style="display: none;">Create Contact</button>
<pre id="content" style="white-space: pre-wrap;"></pre>
<script type="text/javascript">
// Client ID and API key from the Developer Console
var CLIENT_ID = '< YOUR CLIENT ID HERE! >';
var API_KEY = '< YOUR API KEY HERE! >';
// Array of API discovery doc URLs for APIs used by the quickstart
var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/people/v1/rest"];
// Authorization scopes required by the API; multiple scopes can be
// included, separated by spaces.
var SCOPES = "https://www.googleapis.com/auth/contacts";
var authorizeButton = document.getElementById('authorize_button');
var signoutButton = document.getElementById('signout_button');
var contactButton = document.getElementById('contact_button');
/**
* On load, called to load the auth2 library and API client library.
*/
function handleClientLoad() {
gapi.load('client:auth2', initClient);
}
/**
* Initializes the API client library and sets up sign-in state
* listeners.
*/
function initClient() {
gapi.client.init({
apiKey: API_KEY,
clientId: CLIENT_ID,
discoveryDocs: DISCOVERY_DOCS,
scope: SCOPES
}).then(function () {
// Listen for sign-in state changes.
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
// Handle the initial sign-in state.
updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
authorizeButton.onclick = handleAuthClick;
signoutButton.onclick = handleSignoutClick;
contactButton.onclick = handleContactClick;
}, function(error) {
appendPre(JSON.stringify(error, null, 2));
});
}
/**
* Called when the signed in status changes, to update the UI
* appropriately. After a sign-in, the API is called.
*/
function updateSigninStatus(isSignedIn) {
if (isSignedIn) {
authorizeButton.style.display = 'none';
signoutButton.style.display = 'block';
contactButton.style.display = 'block';
} else {
authorizeButton.style.display = 'block';
signoutButton.style.display = 'none';
}
}
/**
* Sign in the user upon button click.
*/
function handleAuthClick(event) {
gapi.auth2.getAuthInstance().signIn();
}
/**
* Sign out the user upon button click.
*/
function handleSignoutClick(event) {
gapi.auth2.getAuthInstance().signOut();
}
/**
* Create a contact upon button click.
*/
function handleContactClick() {
gapi.client.people.people.createContact({
"resource": {
"names": [
{
"givenName": "Elizabeth",
"familyName": "Bennet"
}
],
"phoneNumbers": [
{
"type": "home",
"value": "(206)555-1212"
.signIn({scope: "https://www.googleapis.com/auth/contacts"}) },
{
"type": "cell",
"value": "(206)555-1213"
}
],
"addresses": [
{
"type": "home",
"streetAddress": "1600 Amphitheatre Pkwy",
"postalCode": "94043",
"country": "United States",
"city": "Mountain View",
"region": "California"
}
]
}
}).then(function(response) {
// Handle the results here (response.result has the parsed body).
console.log("Response", response);
},
function(err) { console.error("Execute error", err); });
}
/**
* Append a pre element to the body containing the given message
* as its text node. Used to display the results of the API call.
*
* @param {string} message Text to be placed in pre element.
*/
function appendPre(message) {
var pre = document.getElementById('content');
var textContent = document.createTextNode(message + '\n');
pre.appendChild(textContent);
}
</script>
<script async defer src="https://apis.google.com/js/api.js"
onload="this.onload=function(){};handleClientLoad()"
onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>
</body>
</html>
顶部的客户端和API变量,就是你把你的钥匙,通过其快速启动页面上的步骤走之后。
所以很明显的按钮,以及如何工作的事情可以围绕改变,但是这只是为了证明它的工作:P
这是我在它的github:GitHub你只需要注意的index.html PHP中,所以我可以忍受的小测试网站给你看。
谷歌的API再次发动攻击!
希望这可以帮助,打我,如果有别的!
如果你使用Outlook,转到您的联系人,然后右键单击联系人,并说前一个电子名片,然后将其保存到桌面上,你可以像文本编辑Mac或记事本或者记事本++对Windows机器中打开它。你会看到它有一个标准格式:
begin:vcard
version:3.0
prodid:Microsoft-MacOutlook/10.15.0.190117
UID:<uid string>
fn;charset=utf-8:<first> <last>
n;charset=utf-8:<last>;<first>;;;
title;charset=utf-8:<title>
office;charset=utf-8:<location>
note;charset=utf-8:
adr;charset=utf-8;type=work;type=pref:;;;;;;<country>
label;charset=utf-8;type=work;type=pref:<country>
tel;charset=utf-8;type=cell:<mobile>
email;charset=utf-8;type=internet;type=pref;type=work:<email address>
end:vcard
如果在此基础上工作,你就可以下载这样的文件没有问题。这里是一个Wiki link