20 Октябрь 2010 – 18:38
Недавно потребовалось решить на Ruby одну задачку: синхронизировать контакты из GMail аккаунта со своим приложением. Под синхронизацией подразумевалось получение и добавление контактов. Вкурив доки от Гугла я не сразу нашел нужный мне протокол, который помог бы мне в реализации поставленной задачи. Это связанно с их крайне похожими именами и запутывании в том, какие данные к какому протоколу относятся. Хорошенько покопавшись в литературе, я понял, что для реализации решения моей задачи надо курить Google Data Protocol. Если кому надо, то почитать документацию по оному можно в Developer’s Guide Overview . После непродолжительного поиска были найдены и примеры работы с данным протоколом из под Рубина, даже в связке с Рельсами, за что корпорации добра отдельное спасибо. Во втором случае, как оказалось, все просто — достаточно поставить gem «gdata» и будет мне счастье. Ставим его как и все гемы: sudo gem install gdata. Работать с ним очень удобно, так как многие вещи реализованы за вас. Пример моего рабочего кода с использованием данной либы можно найти на Pastebin (GData).
Но все бы хорошо, если бы одним из условий моей задачи не было юзание старой версии Рельс (или вовсе отказ от них). А gdata требует Rails версией => 2.2.2.
«Плохо» — подумал я и продолжил вкуривание доков. Под пресс изучения попала первая статья, описанная выше, где приведен пример работы с spreadsheets с использованием стандартной Ruby либы «NET». В ней рассмотрен процесс авторизации и получения нужных данных. То что надо. Код хорошо расписан, однако попробовав переделать его для работы с контактами из GMail акка я словил «Invalid token» при запросе к ленте контактов. Хм.. Перелопатив кучу статей и заставив пыхтеть гугл, я все же пришел к решению, причем очевидному и, почему-то, пропущенному мною. Данный токен в примере от Гугла получен для сервиса «wise» (это видно при инициализации переменной data, где в качестве параметра «service» задается соответствующее значение). Wise — это имя для Spreadsheets Data API. Для того, чтобы получить контактные данные, мне требуется иное имя сервиса — «cp» (Contacts Data API). Просмотреть все имена сервисов для Гугла можно по этой ссылочке, которая меня и навела на верное решение проблемы. Поменяв всего лишь пару символов в коде я получил заветный результат, обработанный впоследствии гемом REXML в удобоваримый формат. Либо я такой олень и не сразу понял, что именно надо менять, чтобы получить доступ к ленте контактов, либо попросту это никому ранее не нужно было, так как в Инете я ничего полезного не насерфил.
Рабочий код импорта контактных данных из GMail аккаунта не используя сторонних гемов можно посмотреть так же на Pastebin (NET Ruby). Рассматривать добавление нового контакта я не стал, так как это можно найти в приведенных выше статьях. Достаточно понять, что мы создаем переменную, которая будет хранить данные о контакте в нужном формате, а затем отправляем ее серверу посредством POST запроса.
В результате мы имеем два возможных варианта работы с контактами GMail аккаунта в зависимости от требований к разработке.
Написано в ИТ, Кодинг, Новости | Нет комментариев »