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

В одной из заметок, посвященных Google Docs List API я рассказывал как скачать с сервера документ в необходимом нам формате (doc, html, zip и т.д.). В целом вся работа заключался в получении параметра ResourceID документа и составления правильного URL для скачивания документа. Однако, воспользовавшись предложенным мной способом, Вы можете заметить следующее: абсолютно верно экспортируются только документы типа Document (текстовый формат – аналог MS Word). Сегодня поговорим более детально об экспорте, а также немного “допишем” документацию Google API, включив в описании то, что не было сказано в официальной версии, но так или иначе может использоваться в Ваших приложениях.

Прежде, чем начнем рассмотрение вопроса, ещё раз напомню – Google Docs List API находится в разделе Лаборатория Google и следует помнить, что состав и возможности того API могут изменяться без каких-либо предупреждений.

Форматы документов для экспорта из Google Docs

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

Document.

Документ в формате Document – это текстовый документ, аналогичный документам MS Word или Open Office Writer. Соответственно при загрузке doc- или odt-файла в свой аккаунт Вы можете автоматически преобразовывать его в формат Document. Для экспорта Document Вы должны использовать URL следующего формата:

https://docs.google.com/feeds/download/documents/Export?docID=resource_id&exportFormat=format

где resource_id – значение узла ResourceID в XML-документе со списком документов Google, а format может принимать одно из следующих значений:

Значение format

Формат загружаемого документа

doc Microsoft Word
html HTML-документ
odt Текстовый документ Open Office
pdf PDF-документ
png Изображение в формате png первой страницы документа
rtf Rich Text Format
txt Простой текстовый документ
zip HTML-документ, включая все изображения, запакованный в архив

 

Обратите внимание на протокол передачи данных – https. В принципе Вы имеете возможность скачать документ используя http:// на в этом случае при первом GET-запросе вернется редирект на другой адрес. Поэтому желательно не отходить от спецификации протокола, не полениться и при работе с Synapse в Delphi включить в uses модуль ssl_openssl.pas для поддержки https.

Пример закачки Document можно посмотреть здесь.

Spreadsheet

Табличный формат документа, аналог Microsoft Excel. Для экспорта таких документов должен использоваться следующий URL:

https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=resource_id&exportFormat=format

 

Тот, кто следит за моей работой с этим API или сам хотя бы раз пробовал проанализировать состав XML со списком документов может задать вполне логичный вопрос: почему в URL вместо docs.google.com используется spreadsheets.google.com – в XML совершенно чётко прописан URL экспорта, начинающийся именно с docs?

Все дело в том, что, если мы запросим документ Spreadsheet по URL:

https://docs.google.com/feeds/download/spreadsheets/Export?key=resource_id&exportFormat=format

То нас в любом случае автоматически перенаправят на работу с API Таблиц Google и более того запросят ключ авторизации в Spreadsheets API. Поэтому, чтобы лишний раз не перенаправляться и экспортировать табличный документ из своего аккаунта Google Docs Вы должны предусмотреть в своих приложениях следующее:

1. Хранение двух ключей авторизации: первый ключ на сервис writely, второй – на сервис wise (API таблиц).

2. Для экспорта SpreadSheet использовать URL, начинающийся именно с spreadsheets.google.com и использовать, соответственно, второй ключ для авторизации (wise)

В этом случае Вы избежите лишних операций при работе с Google API в Delphi в т.ч. и перенаправлений, ошибочных запросов и т.д.

Документы Spreadsheet могут экспортироваться в следующих форматах:

Значение format Формат загружаемого документа
xls Microsoft Excel
csv csv (comma separated value)
pdf PDF-документ
ods Таблица Open Office
tsv tsv (tab separated value)
html HTML-документ

 

Presentation

Презентации – аналог Microsoft PowerPoint. Для экспорта презентаций должен использоваться следующий URL:

https://docs.google.com/feeds/download/presentations/Export?docID=resource_id&exportFormat=format

Параметр exportFormat может принимать следующие значения:

Значение format Формат загружаемого документа
pdf PDF-документ
png Изображение PNG первого слайда
ppt Microsoft PowerPoint
swf Flash-формат
txt Весь текст презентации без изображений

 

Drawing

Документы Drawing – это по сути обычные изображения. В официальной документации Google про экспорт этих документов ничего не сказано, однако, судя по содержанию XML списка документов документ Drawing также может экспортироваться причем в различных форматах. Для экспорта необходимо использовать следующий URL:

https://docs.google.com/feeds/download/drawings/Export?id=resource_id&exportFormat=format

Документ Drawing может экспортироваться в следующих форматах:

Значение format Формат загружаемого документа
png png-изображение
jpeg jpeg-изображение
svg svg-изображение

 

Form

Form, как следует из название представляет собой форму заполнения чего-либо. Формат этого документа соответствует SpreadSheet и, соответственно экспорт документа Form полностью соответствует экспорту таблиц со всеми вытекающими последствиями, включая и наличие ключа авторизации в сервисе wise. Отличием при экспорте является то, что Form может экспортироваться только в трех форматах (против шести для SpreadSheet):

Значение format Формат загружаемого документа
xls Microsoft Excel
ods Таблица Open Office
pdf PDF-документ

Экспорт файлов других форматов (тип file).

Согласно пользовательскому соглашению, пользователи Google Docs имеют возможность загружать в свои аккаунты файлы различных форматов, при этом владельцы premium-аккаунтов вообще не ограничиваются в плане формата файла – могут грузить что угодно. Соответственно API Google в случае экспорта таких файлов не может проводить какие-либо преобразования формата и сам URL для закачки файла формируется исходя из Mime-типа документа.

Чтобы получить URL для загрузки документа произвольного формата, в т.ч. и документа в формате PDF вам необходимо загрузить список документов и для необходимого Вам документа прочитать атрибут src XML-узла content. Например, ссылка для загрузки не преобразованного в формат Google файла MS Word может выглядеть так:

http://doc-0c-08-docs.googleusercontent.com/docs/secure/lv0jias…/cg6515tgqif…/1286…/…/…/…NmMz?h=16…&e=download&gd=true

Для скачивания документа необходимо использовать эту ссылку и ключ авторизации в сервисе writley.

Общий алгоритм экспорта документов Google

В целом экспорт документа любого типа из аккаунта в Google Docs можно представить следующим образом:

  1. Авторизуемся в сервисе writley. Запоминаем полученный ключ Auth. Используя этот ключ, мы будем экспортировать все документы за исключением SpreadSheet и Form.
  2. Авторизуемся в сервисе Wise. Запоминаем полученный ключ Auth. Используя этот ключ, мы будем экспортировать документы Spreadsheet и Form.
  3. Скачиваем список всех документов
  4. Парсим полученный XML, запоминая для каждого документа resourceID, тип документа, значение атрибута src узла content и значение узла title.
  5. Выбираем документ для экспорта и, в зависимости от его типа (document, spreadsheet, form и т.д.) формируем URL запроса и заполняем заголовок Authorization.
  6. Отправляем запрос.
  7. Сохраняем файл на жесткий диск.

Также при экспорте файлов из Google Docs следует учитывать то, что в список документов по умолчанию заносятся все документы, в т.ч. и те, владельцем которых Вы не являетесь, но у Вас есть к ним доступ. В этом случае необходимо проводить дополнительную проверку перед экспортом.

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

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

1. https вроде веде не используется для получения документов…
2. ссылки на скачивание/экспорт находятся в теге content, атрибуте src и никаких дополнительных урлов выдумывать не надо …

Dennis
Dennis
22/10/2010 01:44

I want to export a Google document but keep getting this response.
 
——————————
HTTP/1.0 404 Not Found
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Thu, 21 Oct 2010 19:37:05 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
——————————
 
Google Login component works OK.
 
Document list is working OK.
 
[code]
HTTP:=THTTPSend.Create;
HTTP.Headers.Add('GData-Version: 3.0');
HTTP.Headers.Add('Authorization: GoogleLogin auth='+Edit3.Text);
 
URL:='http://docs.google.com/feeds/download/documents/Export?docID=%s&exportFormat=%s';
 
URL:=Format(URL,[Edit4.Text,'doc']);
 
if HTTP.HTTPMethod('GET',URL) then
begin
HTTP.Document.SaveToFile('c:\file.doc');
Memo1.Lines.Add('-----------------------------');
Memo1.Lines.Add(HTTP.Headers.Text);
Memo1.Lines.Add('-----------------------------');
end
[/code]