На данный момент у нас уже есть информация о том как загрузить документ на сервер и получить список всех документов, используя Delphi и Google Docs List API. Теперь разберемся каким образом можно скачать необходимый документ с сервера и при этом автоматически его экспортировать в различные форматы, поддерживаемые в Google Docs.
Для того, чтобы загрузить документ с сервера нам необходимо знать его ID (значение узла ResourceId из списка документов) и формат в котором мы хотим получить документ.
Шаблон URL для загрузки документа должен быть следующим:
https://docs.google.com/documents/Export?docID=resource_id&exportFormat=format
Параметр Format может иметь следующие значения для текстовых документов (Documents):
- doc— документ в формате Microsoft Word
- html документ в формате HTML
- odt документ в формате Open Document Format (Open Office)
- pdf документ в формате Portable Document Format
- png документ в формате Portable Networks Graphic. Если документ содержит несколько страниц текста, то вернется картинка, содержащая только первую страницу документа.
- rtf Rich Format
- txt текстовый
- zip ZIP архив, который будет содержать HTML-страницу с текстом документа и всеми изображениями
Как получить ResourceID — читайте здесь. И приступим к закачке. Во-первых, что касается ID. В XML-документе, содержащем список всех документов, узел ResourceID содержит примерно следующую строку:
var HTTP: THTTPSend; begin try HTTP:=THTTPSend.Create; //вставляем заголовки авторизации HTTP.Headers.Add('GData-Version: 3.0'); HTTP.Headers.Add('Authorization: GoogleLogin auth='+Edit3.Text);//всавляем Auth URL:='http://docs.google.com/feeds/download/documents/Export?docID=%s&exportFormat=%s'; URL:=Format(URL,[res_id,'png']); if HTTP.HTTPMethod('GET',URL) then begin HTTP.Document.SaveToFile('file.png'); Memo1.Lines.Add('-----------------------------'); Memo1.Lines.Add(HTTP.Headers.Text); Memo1.Lines.Add('-----------------------------'); end
Здесь мы скачиваем документ в формате png и выводим полученные заголовки в Memo1. Почему именно заголовки, а не, что-то другое?
Во-первых, для того, чтобы видеть вообще, что возвращает сервер. А именно: при первом запросе сервер возвращает всегда 3хх код статуса и новый URL по которому лежит наш документ. Поэтому нам необходимо по-мимо простой отправки запроса ещё и обеспечить обработку редиректа. Сделать это можно, воспользовавшись, например, моим class helper’ом для Synapse, который обеспечит авторедирект на полученный URL и при это сохранит все заголовки авторизации.
Во-вторых, в приведенном выше коде мы сохраняем файл с совершенно непонятным именем file.формат. А как быть если мы грузим два документа подряд? Для этого нам и потребуется знание того, какие заголовки присылает нам сервер. Имя файла документа возвращается в следующем заголовке:
Content-Disposition: attachment; filename="Имя файла.doc.png"
И для того, чтобы сохранить файл с его родным именем, нам необходимо узнать значение заголовка Content-Disposition и вытащить из его значения всё, что стоит filename. Чтобы узнать значение заголовка Вы, опять же, можете воспользоваться class helper‘ом.
Также для сохранения файла с его именем можно воспользоваться данными из списка документов — узлом title элемента entry.
На сегодня, пожалуй, всё. Теперь мы можем загружать/скачивать документы с сервера и получать из список. Дело движется к оформлению всей информации в один общий модуль и небольшую Demo-программу, но об этом в следующий раз :)
Книжная полка
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
Сегодня первое октября ;)
Опс, сорри — а что за время такое на серваке?
Да. Вот такое вот местное время на серваке. У кого-то 1 октября, у кого-то 2 ;)
Не подскажите аналогичную процедуру, но для PHP.
есть айди файла, доступ на директорию, даже доступ к файлу через бразуер есть если ткунть прямую ссылку ttp://docs.google.com/feeds/download/documents/Export?docID=%s&exportFormat=%s,
а вот копирование с гугла на сервер не работает
для PHP есть готовая библиотека работы с API — там все функции есть