В одной из заметок, посвященных 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-документ | |
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-документ | |
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-документ | |
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-документ |
Экспорт файлов других форматов (тип 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 можно представить следующим образом:
- Авторизуемся в сервисе writley. Запоминаем полученный ключ Auth. Используя этот ключ, мы будем экспортировать все документы за исключением SpreadSheet и Form.
- Авторизуемся в сервисе Wise. Запоминаем полученный ключ Auth. Используя этот ключ, мы будем экспортировать документы Spreadsheet и Form.
- Скачиваем список всех документов
- Парсим полученный XML, запоминая для каждого документа resourceID, тип документа, значение атрибута src узла content и значение узла title.
- Выбираем документ для экспорта и, в зависимости от его типа (document, spreadsheet, form и т.д.) формируем URL запроса и заполняем заголовок Authorization.
- Отправляем запрос.
- Сохраняем файл на жесткий диск.
Также при экспорте файлов из Google Docs следует учитывать то, что в список документов по умолчанию заносятся все документы, в т.ч. и те, владельцем которых Вы не являетесь, но у Вас есть к ним доступ. В этом случае необходимо проводить дополнительную проверку перед экспортом.
Книжная полка
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
1. https вроде веде не используется для получения документов…
2. ссылки на скачивание/экспорт находятся в теге content, атрибуте src и никаких дополнительных урлов выдумывать не надо …
Anatol, 1) проверьте любым снифером куда ведет ссылка; 2) уверены, что там ссылка именно та которую взял и получил документ в необходимом формате? Нет? — сравните. то, что написано у меня с тем, что пишется в scr — найдите отличия
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]
URL should be: httpS://docs.google.com/feeds/download/documents/Export?docID=%s&exportFormat=%s