Добавить в контакты, как Добавить в календарь кнопку / HTML / Ajax вариант - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы разработать кнопку «Добавить в контакты» для веб-страницы, очень похожую на кнопки типа «добавить в календарь - Google, ICal, Outlook», которые вы видите на вебинаре и на страницах событий , как эта .

Я начал исследовать Google Контакты, поскольку я использую это. Я начал создавать форму для отправки приложения / atom + xml по URL-адресу, о котором они говорят в файлах справки здесь и аналогичном вопросе для Google on Stack .

Я полагаю, что создание этого сервиса, подобного Open Source, сообществу, будет полезна помощь специалиста, когда я с этим справлюсь. Я прошу здесь за этот вклад.

Мой грубый код, который не работает






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



Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если вы используете Outlook и переходите к своим контактам, щелкните правой кнопкой мыши на контакте и скажите « vCard », а затем сохраните его на рабочем столе, вы можете открыть его в чем-то вроде TextEdit на 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

0 голосов
/ 31 января 2019

Доказательство в пудинге, поэтому, прежде чем пытать себя, читая этот длинный пост: Создайте тестовый сайт контактов заставьте его работать :) Если у вас открыта консоль веб-инструмента, вы можете увидеть, что мы вернем контактное лицо ресурс, и Элизабет Беннет теперь будет в ваших контактах!

Да, кстати, при аутентификации пользователя google будет жаловаться на небезопасность как на моем маленьком веб-сайте, так и на вашей локальной версии, просто нажмите "Дополнительно" и продолжайте. (Google будет делать это до тех пор, пока вы не передадите свой OAuth для проверки их командой, что будет хорошо для конечного продукта, но ...)

Так что в справке по Google на самом верху мы видим это:

Примечание. Для доступа к контактам пользователей для чтения и записи используйте приложение Люди. API, который предоставляет контактную информацию и информацию о профиле с использованием JSON вместо старого протокола GData.

Так что, похоже, правильный ответ здесь - перейти на People API . Я потратил некоторое время на изучение этого вопроса и получил для вас краткий ответ.

Я нашел страницу этого примера , которая работает с большинством того, что вы хотите. Если вы будете точно следовать ему, вы получите локальную версию, работающую в формате javascript, которая подключается к их API, что позволяет нам создавать контакты.

Мы должны настроить приложение API в API Google, чтобы по существу аутентифицировать этот процесс.

Как только мы это сделаем, мы можем настроить кнопки, которые запрашивают у пользователя подтверждение аутентификации (позволяют нам создать для них контакт).

Самое интересное - изменить их код, который просто выдвигает топ-10 пользователей для пользователя на странице в создание контакта.

Возможно, есть способы сделать это прямо с помощью обычного http-запроса после того, как вы получите разрешение пользователя, но я обнаружил, что быстрее работать с его crazy api setup .

Нам нужно знать, как настроить вызов API gapi.client.people.people.createContact, и для этого потребуется ресурс Person . На этом ресурсе удобно нажимать, чтобы узнать, как мы можем настроить категории ресурсов для персонала.

Здесь - это место, где мы можем поиграть с API, прежде чем пытаться разместить его на нашей веб-странице. На правой панели заголовок:

Попробуйте этот API

Прямо рядом с ним есть маленькая коробочка, которая расширяет область, чтобы мы могли легче играть с API. В правом верхнем углу есть опция JavaScript, чтобы попытаться взглянуть на JavaScript-эквивалент запроса, который мы выполняем.

Слева у нас есть тело запроса, которое позволяет нам указать детали нашего API-запроса createContacts. Так что для вашего примера, если вы введете:

    {
      "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 справа.

Теперь этот код не идеален для того, как мы хотим, чтобы мы и наш пользователь проходили аутентификацию, поэтому мы выберем две основные вещи:

Эта область действия сообщает API, по сути, то, что мы хотим получить для пользователя.

Итак, собери все вместе:

<code><!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;">
// Идентификатор клиента и ключ API из консоли разработчика var CLIENT_ID = ' '; var API_KEY = '<ВАШ API-КЛЮЧ ЗДЕСЬ! > '; // Массив URL-адресов документов для обнаружения API для API, используемых при быстром запуске var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/people/v1/rest"]; // Области авторизации, требуемые API; несколько областей могут быть // включено, разделено пробелами. 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'); / ** * При загрузке вызывается для загрузки библиотеки auth2 и клиентской библиотеки API. * / function handleClientLoad () {gapi.load ('client: auth2', initClient); } / ** * Инициализирует клиентскую библиотеку API и устанавливает состояние входа * слушатели. * / function initClient () { gapi.client.init ({ apiKey: API_KEY, clientId: CLIENT_ID, discoveryDocs: DISCOVERY_DOCS, область применения: ОБЛАСТИ ПРИМЕНЕНИЯ }). then (function () { // Прослушивание изменений состояния входа. . Gapi.auth2.getAuthInstance () isSignedIn.listen (updateSigninStatus); // Обработка начального состояния входа. updateSigninStatus (gapi.auth2.getAuthInstance () isSignedIn.get ().); authorizeButton.onclick = handleAuthClick; signoutButton.onclick = handleSignoutClick; contactButton.onclick = handleContactClick; }, функция (ошибка) { appendPre (JSON.stringify (error, null, 2)); }); } / ** * Вызывается при изменении статуса входа в систему для обновления пользовательского интерфейса. * соответственно. После входа вызывается API. * / function updateSigninStatus (isSignedIn) { if (isSignedIn) { authorizeButton.style.display = 'none'; signoutButton.style.display = 'block'; contactButton.style.display = 'block'; } еще { authorizeButton.style.display = 'block'; signoutButton.style.display = 'none'; } } / ** * Войдите в систему после нажатия кнопки. * / function handleAuthClick (event) { . Gapi.auth2.getAuthInstance () зарегистрировались (); } / ** * Выход пользователя после нажатия кнопки. * / function handleSignoutClick (event) { . Gapi.auth2.getAuthInstance () SignOut (); } / ** * Создать контакт по нажатию кнопки. * / function handleContactClick () { gapi.client.people.people.createContact ({ "ресурс": { "имена": [ { «GivenName»: «Элизабет», "familyName": "Беннет" } ], "телефонные номера": [ { "тип": "дом", «значение»: «(206) 555-1212» .signIn ({scope: "https://www.googleapis.com/auth/contacts"})}, { "тип": "клетка", «значение»: «(206) 555-1213» } ], "адреса": [ { "тип": "дом", "streetAddress": "1600 Амфитеатр Pkwy", "postalCode": "94043", "страна": "Соединенные Штаты", "город": "Маунтин-Вью", "регион": "Калифорния" } ] } }). then (function (response) { // Обработка результатов здесь (response.result имеет проанализированное тело). console.log («Ответ», ответ); }, function (err) {console.error ("Ошибка выполнения", err); }); } / ** * Добавить элемент pre к телу, содержащему данное сообщение * как его текстовый узел. Используется для отображения результатов вызова API. * * @param {string} message Текст для размещения в предварительном элементе. * / function appendPre (message) { var pre = document.getElementById ('content'); var textContent = document.createTextNode (message + '\ n'); pre.appendChild (TextContent); }

Переменные client и api вверху - это то место, куда вы кладете свои ключи, пройдя их шаги на странице быстрого запуска.

Очевидно, что кнопки и то, как все работает, можно изменить, но это было только для того, чтобы доказать, что это работает: P

Вот мой github: GitHub вам нужно только обратить внимание на index.html, которым был php, чтобы я мог открыть небольшой тестовый сайт, чтобы показать вам.

Google API снова бьют!

Надеюсь, это поможет, удари меня, если есть что-нибудь еще!

...