添加到联系人像添加到日历按钮/ HTML / Ajax的选项

问题描述 投票:5回答:2

我想建立一个“添加到通讯录”按钮,网页,很像“添加到日历 - 谷歌,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



javascript outlook addressbook google-contacts
2个回答
3
投票

证据是在布丁所以,如果你折磨自己阅读这篇很长的帖子: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请求。

现在,代码是不完美的,我们要如何保持自己和我们的用户进行验证,因此我们将樱桃挑选出两两件事:

  • 该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再次发动攻击!

希望这可以帮助,打我,如果有别的!


0
投票

如果你使用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

© www.soinside.com 2019 - 2024. All rights reserved.