- PVSM.RU - https://www.pvsm.ru -
Добрый день, коллеги!
Когда-то давно, еще не не имея полноценного аккаунта на Хабре, я написал статью в песочницу, надеясь получить инвайт. Инвайта я не получил, и думал, что статья ушла в никуда. Сегодня, просматривая логи Google App Engine, я обнаружил ссылку с сайта, на котором, как оказалось, размещена моя статья из песочницы. Оставляя за скобками вопрос о корректности такой публикации, хочу поблагодарить неизвестных мне добрых людей с сайта ajc.su/ [1] за то, что сохранили для меня мою статью. :) Но, собственно, по теме.
Первый раз идея посетила меня, когда у меня возникла необходимость снять квартиру. Я просматривал объявления на Циане и отзванивался по наиболее интересным. После пары-тройки звонков я понял, что надо как-то упорядочивать обзвон — сохранять не только номера, но и адреса, а заодно и описания квартир. В этот момент я осознал, что при всем развитии Интернета контактную информацию по-прежнему приходится обрабатывать руками — в лучшем случае копировать поблочно и где-то сохранять. При том, что контакт — это объект, аналогичный, к примеру, календарю. Но если кнопки «Добавить событие в календарь» на многих сайтах уже есть, то вот кнопку «Добавить контакт в записную книжку» я пока еще не видел. Я решил восполнить этот пробел, и результатами своих размышлений и наработок хочу поделиться.
Первое, над чем я задумался, осознав проблему — а является она актуальной для кого-либо, кроме меня самого. Здравый смысл подсказывал, что наверняка есть еще кто-то кроме меня, для кого эта проблема актуальна, осталось только понять, кто эти люди.
Из собственного опыта — это, видимо, арендаторы квартир в поиске предложений по сайтам. Наверняка сами риэлторы, которые точно так же просматривают объявления, будут заинтересованы. Еще одна большая группа — это хедхантеры и HRы. Это всё люди, у которых с регулярной периодичностью появляются новые контакты, с которыми требуется связываться (звонить и писать) неоднократно.
Думаю, что есть и другие группы людей, которым было бы интересно иметь такую возможность.
В задаче обработки контактов с сайта я вижу два этапа:
Задачу первого этапа можно решить тремя способами:
На втором этапе полученные контактные данные можно:
Думаю, что это не полный перечень, но как минимум основные возможные действия я перечислил.
Первоначальная идея была выделять номера телефонов эвристически, используя различные шаблоны. Но это ненадежный способ — не всякая последовательность цифр, пусть даже и выглядящая как номер телефона, является таковым. Кроме того, выделять эвристически названия и адреса мне вообще не представляется возможным.
В настоящее время наиболее перспективным мне видится разбор разметки hCard [2]. Во-первых, в этой разметке контактная информация уже структурирована, а во-вторых, она продвигается Яндексом [3]. Хотя, конечно, этот подход предполагает определенную кооперацию со стороны вебмастеров — ответственность за разметку контактной информации ложится на них.
Этот способ видится мне не очень удобным. Во-первых, страница с контактной информацией будет запрошена дважды — первый раз пользователем, чтобы увидеть ее содержимое, а второй раз сервером, чтобы получить из этой страницы контакт. Это несколько увеличивает нагрузку на сервер, на котором размещена запрашиваемая страницы, и искажает статистику посещаемости. Во-вторых, данный способ неприменим к страницам сайтов, которые показываются только авторизованным пользователям. Тем не менее, этот подход уже реализован здесь [4]. Автор данного сервиса — Tantek Çelik, один из соавторов микроформата hCard.
Данный способ получения контактной информации предполагает размещение на сайте JavaScript’а (например, в форме плагина к jQuery), который сканирует страницу на предмет наличия на ней разметки hCard и добавления к ней ссылки для передачи полученного контакта для дальнейшей обработки.
При таком подходе контакт может быть выделен с любой страницы — доступной только авторизованным пользователям, или генерируемой динамически. Правда, этот подход предполагает большую кооперацию со стороны вебмастера — предполагается, что он не только делает разметку hCard, но и размещает скрипт на сайте.
Данный подход аналогичен предыдущему, но с той разницей, что скрипт, выделяющий контакт из разметки страницы, работает не в контексте страницы сайта, а в контексте браузера. Он позволяет пользователю получать контакт с любых страниц, содержащих разметку hCard. Недостаток подхода — необходимость создания плагинов для всех популярных браузеров (Chrome, FF, IE, Opera), при том, что системы плагинов у них разные. Хотя не так давно здесь, на Хабре, пробегала статья про фреймворк, позволяющий создавать плагины сразу для всех браузеров.
Полученный тем или иным образом контакт далее может быть обработан каким-либо образом. Способы обработки (далее — действия) я для себя делю на две группы:
В данный момент я представляю себе, как реализовать действия группы «Сохранить». Действия группы «Позвонить» я отложил на потом, для более детального изучения.
Данное действие предполагает преобразование полученного контакта в vCard, и далее кодирование его в QR-код. Наиболее простой способ кодирования — воспользоваться имеющимся у Google Charts API [5]. Все, что требуется — это сформировать ссылку к сервису Google, в качестве одного из параметров указав строку, содержащую VCard-представление контакта.
Действие также предполагает преобразование контакта в vCard, и далее передачу его в виде ответа сервера с соответствующими заголовками в браузер.
Данное действие реализуется несколько сложнее, чем предыдущие, поскольку потребует не только преобразования контакта к XML-формату GData (элемент типа Contact), но и обработку авторизации доступа к Google Contacts через OAuth. Это, как выяснилось, не так сложно, но имеющаяся на на Google Developers [6] документация в этом вопросе не очень внятна. Я предполагаю посвятить этому вопросу отдельную статью.
Все свои размышления я воплотил в прототип сервиса [7], который я назвал Act4Contact. Он сейчас работает на Google App Engine (и я опасаюсь, что бесплатный вариант сервиса вряд ли выдержит блога-эффект и не превысит квоту), в нем пока нет интерфейсных красот и ставшего нынче стандартом де-факто интерфейса на AJAX, но он уже может выполнять свою основную задачу — формировать из разметки hCard контакт и сохранять его.
Я планирую развивать этот сервис и довести его до рабочего состояния, в связи с этим буду рад, если кто-то заинтересуется и будет готов объединить со мной усилия в этом направлении. Еще мне было бы интересно получить отзывы от вебмастеров — я предполагаю, что представление контактной информации в виде «манипулябельного» объекта должно увеличивать конверсию за счет того, что для пользователя страница контактов будет являться не последней, после которой его взаимодействие с сайтом переходит из виртуальной плоскости в физическую (набрать номер телефона), а продолжает взаимодействие и делает его более плавным. Поэтому приглашаю заинтересовавшихся провести совместный эксперимент по преобразованию контактной информации из текстовой формы в объектно-манипулябельную и посмотреть, насколько это оправдано.
И еще. За время работы над этой задачей у меня уже появилось несколько тем, которыми я могу поделиться. Например, рассказать о работе с Google Contacts API. Я думаю, что продолжение работы над сервисом даст еще не одну тему для того, чтобы поделиться ей с вами.
Автор: gorynych_zmey
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/interfejsy/10789
Ссылки в тексте:
[1] ajc.su/: http://ajc.su/
[2] hCard: http://microformats.org/wiki/hcard-ru
[3] Яндексом: http://help.yandex.ru/webmaster/?id=1111573
[4] здесь: http://h2vx.com/vcf/
[5] Charts API: http://code.google.com/intl/ru/apis/chart/infographics/docs/qr_codes.html
[6] Google Developers: https://developers.google.com/google-apps/contacts/v3/
[7] сервиса: http://www.act4contact.com
Нажмите здесь для печати.