уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Первое апреля прошло — приступим к работе. Вначале небольшое отступление от темы статьи.

Спасибо всем, кто отписался в комментариях к статье о продаже блога. С временем публикации я, конечно, немного пролетел, но, как Вы понимаете, конечно же никакой продажи блога не планируется…тем более за 10 000 руб. Наиболее внимательные читатели могли заметить и особенный заголовок первоапрельского поста и alt картинки :) Хотя и не всё, что сказано в статье является вымыслом. Про домен webdelphi.com — правда. Получил его на год при покупке нового хостинга, но с переносом блога вышел неприятный конфуз и так быстро «спрыгнуть» со старого хостинга не удалось. На выходных попробую ещё раз попробовать перенести БД на новый хостинг. Если всё получится — webdelphi заработает по-быстрее. Ну, а если не получится, то попробую оптимизировать по-максимуму движок блога, а для нового хостинга придумаем чего-нибудь для публикации статей по Delphi (коллективный блог или ещё чего-нибудь). Так же правда и то, что март выдался на редкость проблемным для работы в блоге. Надеюсь, что со следующей недели будет чуть по-проще. Сейчас же решил, что, пока времени маловато, снова вернуться к написанию постов про Google API (тем более, что на второй работе именно ими и занимаюсь в основном) и рассказать о том, как использовать разные версии и возможности API сервисов Google в своих Delphi-проектах. Итак, сегодня посмотрим как использовать JSON при работе с Google API.

Введение

В последнее время «Корпорация Добра» запустила довольно много новинок, на забыв при этом отсеить «лишнее». Так, из свободного доступа ушел Translate API, став на 100% платным, ушли Friend Connect и Google Buzz,  которые сейчас вполне заменены на относительно новый Google+. В общем, много чего произошло и хорошего и плохого как для простых пользователей сервисов, так и для разработчиков.

Вообще, могу предположить, что в обозримом будущем разработчиков использующих в своих проектах Google API ожидает «приятный» сюрприз — перенос 100% API под управление из Консоли Google. Пишу в кавычках т.к. нынешние лимиты на использование API в консоли, если и не заставляют задуматься о поиске альтернатив (которых не так и много), то недоуменную улыбку вызовут точно — 10000 запросов в сутки для клиента Calendar API по крайней мере не серьёзно для проекта (читай — клиента API), скажем с 1000 пользователей. И каждый раз просить увеличения лимита — это не совсем удачное решение. Выход один — надо будет платить $$$ за безлимитный доступ. Но, пока не все так плачевно. Основные API типа Contacts API, Doc List API, Calendar API и т.д. всё ещё доступны через обычный ClientLogin и чувствуют себя при этом вполне сносно.

Что касается использования JSON, то сейчас новые API уже по умолчанию возвращают данные в JSON-формате, а некоторые, типа Tasks API так и вообще «не знают», что такое XML. Но нам, пользователям Delphi 2010 — XE2, переживать вообще не с чего — поддержка JSON имеется. Да и обладатели более ранних версий могут использовать, например, SuperObject для разбора JSON-объектов.

Как попросить сервер Google API вернуть данные в формате JSON?

Для этого у Google есть несколько способов, основанных на передаче дополнительного параметра в URL. Рассмотрим их.

Способ №1. Использование параметра alt=jsonc

Обычно в описании протокола для того или иного протокола даются пояснения о том, как получать данные в JSON-формате. Например, для Calendar API дается такое пояснение:

(To request JSON-C format, append the alt=jsonc query parameter.)

Вставляем параметр alt=jsonc в URL запроса и дело сделано — все данные будут возвращаться в заданном формате. Остается только разобрать полученный JSON-объект. О том, как работать с JSON в Delphi 2010/XE2 я рассказывал в статье «Работа с JSON в Delphi 2010 — XE2.»

Способ №2. Использование параметра alt=json

Буквально сегодня нарвался на ситуацию, когда в описании API нет ни слова про возможность использования JSON, но такая возможность предусмотрена. Например, смотрим описание Contacts API — ни слова про JSON, все примеры содержат исключительно XML. Есть экспериментальный API Portable Contacts API, который возвращает JSON, но возможности этого API пока настолько скудны, что даже рассказывать не хочется.

Решил воспользоваться ранее используемым параметром URL — alt=json. Отправил запрос с параметром на URL получения всех контактов и сработало — сервер предоставил JSON-объект, содержащий описание всех контактов. Погуглил на тему описания этого параметра в Google Developers и нашел полезную статейку на самом Google под названием «Using JSON in the Google Data Protocol», где и рассказывается про этот самый параметр и ещё один, который может показаться полезным для пользователей SuperObject в Delphi.

Способ №3. Использование параметра alt=json-in-script

Использование этого параметра идентично двум предыдущим, но имеет свою фичу — в паре с параметром alt=json-in-script указывается ещё один параметр — callback, который определяет название Callback-функции для скрипта. Думаю, что пользователям SuperObject эта фича пригодиться. Как пользоваться calback’ами можно посмотреть например в статье «Быстрая обработка RSS-канала с использованием AJAX API загрузки фидов Google.» — не могу сейчас сказать жив ли этот API или нет, но, приведенный в статье пример, «расскажет» Вам о чем идет речь.

Какой способ из трех предложенных подойдет для Вас — не важно, т.к. результат будет одним и тем же — сервер вернет данные в формате JSON. Ну, а разобрать полученный объект, думаю, не составит никакого труда, тем более, что статья по этой теме имеется на webdelphi.

Что потребуется для работы с JSON в Google API?

Не так уж и много:

  1. любой компонент для авторизации в сервисах Google, например, наши разработки для ClientLogin или OAuth 2.0 или любой другой
  2. любая библиотека для работы с HTTP-протоколом
  3. библиотека для парсинга JSON.

За время отсутствия в блоге мне довелось разработать необходимые классы для синхронизации с такими сервисами как Google Docs, Calendar и Contacts. К сожалению, так как разработки велись в рамках моей второй работы, то, по понятным причинам, я не могу выложить и рассмотреть в блоге эти классы и, тем более выгрузить все исходники в открытый доступ, но, думаю, что некоторые моменты по работе с этими API при использовании JSON опубликовать можно будет. В частности, сейчас хочу протестировать различные сочетания библиотек и компонентов при работе с API, чтобы выяснить какое сочетание будет самым оптимальным по скорости и качеству.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
6 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей Румянцев

Пока в разработках использую SuperObject, но нет точной уверенности об его переносимости между платформами (ещё не экспериментировал). Логика SuperObject боле всего приближена к работе с JSON данными в PHP и JS.  А вот с DBXJSON я с ходу не разобрался, хотя нужно будет понять его работу, чтоб сделать точную переносимость между платформами.
Vlad, может напишешь статью об DBXJSON с точки зрения программиста JS, приводя аналогии между двумя языками программирования?

Сергей Румянцев

Vlad, ну тогда хотя бы статью, в которой разбирается один и тот же объект JSON с помощью SuperObject и DBXJSON, чтоб упростить людям переход между библиотеками. ;)
П.С. Хоть мой путь профессионального программирования и начинался с Pascal, но после 7 лет использования PHP сейчас сложно привыкнуть к разнице логик языков программирования. Частые ошибки происходят в операторах сравнения и присвоения, спасает только разница в подсветке синтаксиса в программах для написания кода.

Алексей Тимохин

По поводу кастомизации блога. Хорошо бы ещё у webdelphi была лёгкая версия для мобильника (без больших/лишних картинок, ссылок, аватарок).