Чем больше изучаю работы с Google API в Delphi, тем больше убеждаюсь в том, что все вновь узнанное, прочитанное и переработанное у себя в голове следует записывать, дабы спустя некоторое время, опять не нарваться на одни и те же ошибки и потерять время. Вот и сегодня обнаружил, что в документации к API отсутствует некоторая информация, которую видимо, упустили из виду после обновления протокола, а равно и введения новых функций в Google Docs. Но это, можно сказать, несущественная мелочь, на обнаружение которой ушло совсем немного времени. Дело касалось описания доступных типов документов – по документации это: document, folder, pdf, presentation, spreadsheet, form. А на деле при анализе XML добавляется ещё два: file и drawing. Так как с Google Docs особого дела до последнего времени не имел – начал вплотную использовать сервис буквально недавно, в т.ч. и API, то могу только предположить, что два новых типа документов появились в последней версии протокола и в документацию пока не попали – тестируется работа, доделывается чего-нибудь, в общем –не критично, но стоит помнить, что в Google Docs на данный момент 8 типов документов и под file может находится файл практически любого произвольного формата от zip-архива до avi и mp3.
Теперь, что касается устройства API в целом:
Работа с документами и папками:
В Google Docs есть замечательная возможность – распределение документов по отдельным “папкам”. Можно получить подобие дерева каталогов как на своем домашнем ПК. Ничего не скажешь – реально удобная штука. Но следует помнить, что при работе с API Вы не сможете воссоздать на своем жестком диске точную копию расположения папок как на сервере. Так как по большому счёту “папка” в Google Docs – это простая запись в БД (или, говоря терминами Google – Хранилища данных) и Вы можете легко сделать себе вот такую структуру папок на сервере:
Папка_1
Папка_2
Папка_3
Папка_3
Папка_4
То есть на одном “уровне” две или более папок с одним названием. И это нормально, учитывая ещё и то обстоятельство, что Вам могут открыть доступ к какой-нибудь чужой папке, которая имеет точно такое же название как у Вас. Чтобы сортировать документы по папкам, определять какие папки на каком уровне вложенности находятся и т.д. необходимо знать два параметра:
- ResourceID объекта entry из XML. С помощью него легко определяется есть ли у объекта дочерние элементы
- Значение атрибута href у узла link, который содержит rel=»http://schemas.google.com/docs/2007#parent». Если такого узла нет – то документ или папка находятся “сверху” вне других папок. Если есть, то чтобы узнать ResourceID родителя достаточно из значения атрибута href удалить подстроку “http://docs.google.com/feeds/default/private/full/folder%3A”
Ну и, соответственно, зная какие элементы находятся сверху, какие являются вложенными можно уже воссоздать структуру расположения документов, например в TreeView.
Что касается документов, то здесь практически то же самое, что и с папками, т.е. в одной “папке”, на одном уровне может находиться любое количество документов с одинаковыми названиями. Поэтому при экспорте нескольких документов себе на компьютер следует проверять существование файла с таким названием, предлагать замену/переименование и т.д. Все объекты в Google Docs различаются по ResourceID.
Полнотекстовый поиск по документам:
Ещё одна отличная возможность, добавленная совсем недавно. Здесь опять же стоит помнить, что API находится в Лаборатории и в любой момент что-то может измениться. Пока, судя по тому, что мне удалось испробовать в поиске, могу сказать, что поиск с использованием API работает отлично с документами на английском, но мне не удалось отыскать документы, содержащие текст на русском. Хотя по заголовкам документов поиск работает отлично. Так что ждем пока в этом направлении изменений в лучшую сторону.
Работа с XML-документами:
При получении данных о всех документах и папках, доступных в аккаунте пользователя можно использовать два запроса:
- На получение данных о папках: GET /feeds/default/private/full/-/folder
- На получение данных о документах: GET /feeds/default/private/full
Либо, если хотите получить всё содержимое в одном документа, сделать такой запрос:
GET /feeds/default/private/full?showfolders=true
И соответственно, используя различные вариации URL можно получать данные по отдельным типам документов (см. описание здесь)
Загрузка файлов:
В общих чертах эту операцию я рассматривал в статье “Экспорт документов Google Docs”. Единственное, что следует здесь помнить – это-то, что документы с типом pdf или file скачиваются иным образом, который описан вот в этом разделе документации.
Пока вроде бы все, что хотел запомнить по поводу API. Надеюсь, что в следующей статье, посвященной работе с Google API в Delphi, смогу предоставить рабочий пример программки для работы с аккаунтом Google Docs.
Книжная полка
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|