Сохранение контактной информации с сайтов

в 12:00, , рубрики: google app engine, google contacts, QR-коды, vcf, Веб, Веб-разработка, интерфейсы, контакты, упрощение, Юзабилити в IT, метки: , , , , , , ,

Добрый день, коллеги!

Когда-то давно, еще не не имея полноценного аккаунта на Хабре, я написал статью в песочницу, надеясь получить инвайт. Инвайта я не получил, и думал, что статья ушла в никуда. Сегодня, просматривая логи Google App Engine, я обнаружил ссылку с сайта, на котором, как оказалось, размещена моя статья из песочницы. Оставляя за скобками вопрос о корректности такой публикации, хочу поблагодарить неизвестных мне добрых людей с сайта ajc.su/ за то, что сохранили для меня мою статью. :) Но, собственно, по теме.

Первый раз идея посетила меня, когда у меня возникла необходимость снять квартиру. Я просматривал объявления на Циане и отзванивался по наиболее интересным. После пары-тройки звонков я понял, что надо как-то упорядочивать обзвон — сохранять не только номера, но и адреса, а заодно и описания квартир. В этот момент я осознал, что при всем развитии Интернета контактную информацию по-прежнему приходится обрабатывать руками — в лучшем случае копировать поблочно и где-то сохранять. При том, что контакт — это объект, аналогичный, к примеру, календарю. Но если кнопки «Добавить событие в календарь» на многих сайтах уже есть, то вот кнопку «Добавить контакт в записную книжку» я пока еще не видел. Я решил восполнить этот пробел, и результатами своих размышлений и наработок хочу поделиться.

Кому оно надо?

Первое, над чем я задумался, осознав проблему — а является она актуальной для кого-либо, кроме меня самого. Здравый смысл подсказывал, что наверняка есть еще кто-то кроме меня, для кого эта проблема актуальна, осталось только понять, кто эти люди.

Из собственного опыта — это, видимо, арендаторы квартир в поиске предложений по сайтам. Наверняка сами риэлторы, которые точно так же просматривают объявления, будут заинтересованы. Еще одна большая группа — это хедхантеры и HRы. Это всё люди, у которых с регулярной периодичностью появляются новые контакты, с которыми требуется связываться (звонить и писать) неоднократно.

Думаю, что есть и другие группы людей, которым было бы интересно иметь такую возможность.

Общий подход

В задаче обработки контактов с сайта я вижу два этапа:

  1. Получение контактной информации с сайта
  2. Манипуляции с контактом

Задачу первого этапа можно решить тремя способами:

  1. Парсер страницы по ссылке
  2. Подключаемый скрипт для сайта
  3. Плагин к браузеру

На втором этапе полученные контактные данные можно:

  1. Показать как QR-код
  2. Сохранить как файл vCard
  3. Переслать в виде vCard через SMS
  4. Сохранить в Google Contacts
  5. Сохранить в записную книжку MS Exchange
  6. Использовать для VoIP-звонка

Думаю, что это не полный перечень, но как минимум основные возможные действия я перечислил.

Получение контактной информации

Первоначальная идея была выделять номера телефонов эвристически, используя различные шаблоны. Но это ненадежный способ — не всякая последовательность цифр, пусть даже и выглядящая как номер телефона, является таковым. Кроме того, выделять эвристически названия и адреса мне вообще не представляется возможным.
В настоящее время наиболее перспективным мне видится разбор разметки hCard. Во-первых, в этой разметке контактная информация уже структурирована, а во-вторых, она продвигается Яндексом. Хотя, конечно, этот подход предполагает определенную кооперацию со стороны вебмастеров — ответственность за разметку контактной информации ложится на них.

Парсер страницы по ссылке

Этот способ видится мне не очень удобным. Во-первых, страница с контактной информацией будет запрошена дважды — первый раз пользователем, чтобы увидеть ее содержимое, а второй раз сервером, чтобы получить из этой страницы контакт. Это несколько увеличивает нагрузку на сервер, на котором размещена запрашиваемая страницы, и искажает статистику посещаемости. Во-вторых, данный способ неприменим к страницам сайтов, которые показываются только авторизованным пользователям. Тем не менее, этот подход уже реализован здесь. Автор данного сервиса — Tantek Çelik, один из соавторов микроформата hCard.

Подключаемый скрипт для сайта

Данный способ получения контактной информации предполагает размещение на сайте JavaScript’а (например, в форме плагина к jQuery), который сканирует страницу на предмет наличия на ней разметки hCard и добавления к ней ссылки для передачи полученного контакта для дальнейшей обработки.
При таком подходе контакт может быть выделен с любой страницы — доступной только авторизованным пользователям, или генерируемой динамически. Правда, этот подход предполагает большую кооперацию со стороны вебмастера — предполагается, что он не только делает разметку hCard, но и размещает скрипт на сайте.

Плагин к браузеру

Данный подход аналогичен предыдущему, но с той разницей, что скрипт, выделяющий контакт из разметки страницы, работает не в контексте страницы сайта, а в контексте браузера. Он позволяет пользователю получать контакт с любых страниц, содержащих разметку hCard. Недостаток подхода — необходимость создания плагинов для всех популярных браузеров (Chrome, FF, IE, Opera), при том, что системы плагинов у них разные. Хотя не так давно здесь, на Хабре, пробегала статья про фреймворк, позволяющий создавать плагины сразу для всех браузеров.

Манипуляции с контактом

Полученный тем или иным образом контакт далее может быть обработан каким-либо образом. Способы обработки (далее — действия) я для себя делю на две группы:

  1. Сохранить
  2. Позвонить/связаться

В данный момент я представляю себе, как реализовать действия группы «Сохранить». Действия группы «Позвонить» я отложил на потом, для более детального изучения.

Показать QR-код

Данное действие предполагает преобразование полученного контакта в vCard, и далее кодирование его в QR-код. Наиболее простой способ кодирования — воспользоваться имеющимся у Google Charts API. Все, что требуется — это сформировать ссылку к сервису Google, в качестве одного из параметров указав строку, содержащую VCard-представление контакта.

Сохранить файл VCF

Действие также предполагает преобразование контакта в vCard, и далее передачу его в виде ответа сервера с соответствующими заголовками в браузер.

Сохранить в Google Contacts

Данное действие реализуется несколько сложнее, чем предыдущие, поскольку потребует не только преобразования контакта к XML-формату GData (элемент типа Contact), но и обработку авторизации доступа к Google Contacts через OAuth. Это, как выяснилось, не так сложно, но имеющаяся на на Google Developers документация в этом вопросе не очень внятна. Я предполагаю посвятить этому вопросу отдельную статью.

Несколько слов в заключение

Все свои размышления я воплотил в прототип сервиса, который я назвал Act4Contact. Он сейчас работает на Google App Engine (и я опасаюсь, что бесплатный вариант сервиса вряд ли выдержит блога-эффект и не превысит квоту), в нем пока нет интерфейсных красот и ставшего нынче стандартом де-факто интерфейса на AJAX, но он уже может выполнять свою основную задачу — формировать из разметки hCard контакт и сохранять его.

Я планирую развивать этот сервис и довести его до рабочего состояния, в связи с этим буду рад, если кто-то заинтересуется и будет готов объединить со мной усилия в этом направлении. Еще мне было бы интересно получить отзывы от вебмастеров — я предполагаю, что представление контактной информации в виде «манипулябельного» объекта должно увеличивать конверсию за счет того, что для пользователя страница контактов будет являться не последней, после которой его взаимодействие с сайтом переходит из виртуальной плоскости в физическую (набрать номер телефона), а продолжает взаимодействие и делает его более плавным. Поэтому приглашаю заинтересовавшихся провести совместный эксперимент по преобразованию контактной информации из текстовой формы в объектно-манипулябельную и посмотреть, насколько это оправдано.

И еще. За время работы над этой задачей у меня уже появилось несколько тем, которыми я могу поделиться. Например, рассказать о работе с Google Contacts API. Я думаю, что продолжение работы над сервисом даст еще не одну тему для того, чтобы поделиться ей с вами.

Автор: gorynych_zmey

* - обязательные к заполнению поля