четверг, 29 октября 2015 г.

Простой пример работы с Google Docs из 1С V8

Рассмотрены только некоторые простые операции: получение списка документов/коллекций, загрузка документа на сервер, установка прав доступа, удаление документа.
Это простой пример работы с Google Docs из 1С V8.

Рассмотрены только некоторые простые операции: получение списка документов/коллекций, загрузка документа на сервер, установка прав доступа, удаление документа.
Модификация документов средствами API мне не требовалась, и поэтому делать не пробовал.

Первым делом получаем идентификатор/параметр авторизации (authentication token)
ФайлИд = ПолучитьИмяВременногоФайла();                 
Соединение = Новый HTTPСоединение("www.google.com", , , , , Истина);
Соединение.Получить("accounts/ClientLogin?accountType=GOOGLE&service=writely&source=1C&Email=" + ИмяПользователя + "&Passwd=" +  Пароль, ФайлИд);

//writely,wise 
ФайлОтвета = Новый ТекстовыйДокумент;
ФайлОтвета.Прочитать(ФайлИд, "utf-8");
ПараметрАвторизации = ФайлОтвета.ПолучитьСтроку(3);

А дальше пытаемся управлять сервисом с помощью методов HTTPСоединения: ОтправитьДляОбработки(Put), Получить(Get), Удалить(Delete).

Например, чтобы опубликовать документ Excel
Файл = Новый Файл(ИсточникИмяФайла);
РазмерФайла = Файл.Размер();
ИмяФайла = Файл.Имя;
Файл = Неопределено;
 
СайтУРЛ = "docs.google.com";
УРЛ = "feeds/default/private/full";
РезультатИмяФайла = ПолучитьИмяВременногоФайла();
//ПараметрАвторизации = ПолучитьПараметрАвторизации(); 
 
Соединение = Новый HTTPСоединение(СайтУРЛ, , , , , Истина);//"spreadsheets0.google.com"
 
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "GoogleLogin auth=" + Сред(ПараметрАвторизации, 6));
Заголовки.Вставить("GData-Version", "3.0");
Заголовки.Вставить("Content-Length", Формат(РазмерФайла, "ЧГ="));
Заголовки.Вставить("Content-Type", "application/vnd.ms-excel");
Заголовки.Вставить("Slug", ИмяФайла);
                               
//Теперь можно отправлять GET или POST запросы гугловскому API.
//Отправка POST Запроса
Соединение.ОтправитьДляОбработки(ИсточникИмяФайла, УРЛ, РезультатИмяФайла, Заголовки);
В результате выполнения команды получаем XML-документ (структура файла документирована).
Из файла ответа можно вытащить идентификатор ресурса (resourceId), выглядит как строка вида «0ApemGBzasF4MdC1WaEE1UGxDYjlnWUxDdTRlbDZzdEU».
Если нужно добавить документ в существующую коллекцию (папку), то URL должен содержать идентификатор папки
УРЛ = "feeds/default/private/full" + "/folder%3A0B5emGBzasF4MZmViYTJjNmMtNGI0ZS00YmMzLWIzYmYtYzIzMDhlYmUwMzlR/contents";
//Здесь «0B5emGBzasF4MZmViYTJjNmMtNGI0ZS00YmMzLWIzYmYtYzIzMDhlYmUwMzlR» это идентификатор папки.
А теперь удалим документ
СайтУРЛ = "docs.google.com";
УРЛ = "feeds/default/private/full/" + ИдентификаторДокумента + "";//?delete=true
 //ПараметрАвторизации = ПолучитьПараметрАвторизации(); 
Соединение = Новый HTTPСоединение(СайтУРЛ, , , , , Истина);//"spreadsheets0.google.com"
 
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "GoogleLogin auth=" + Сред(ПараметрАвторизации, 6));
Заголовки.Вставить("If-Match", "*");//If-Match: 
Заголовки.Вставить("GData-Version", "3.0");
                               
//Теперь можно отправлять GET или POST, DELETE запросы гугловскому API.
Соединение.Удалить(УРЛ, Заголовки);//feeds/spreadsheets/private/full
Получим список документов (и коллекций)
СайтУРЛ = "docs.google.com";
УРЛ = "feeds/default/private/full";
//УРЛ = "feeds/default/private/full/-/folder";
//GET /feeds/default/private/full/-/folder
//GET /feeds/default/private/full?showfolders=true
 
РезультатИмяФайла = ПолучитьИмяВременногоФайла();
//ПараметрАвторизации = ПолучитьПараметрАвторизации(); 
 
Соединение = Новый HTTPСоединение(СайтУРЛ, , , , , Истина); //"spreadsheets0.google.com"
 
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "GoogleLogin auth=" + Сред(ПараметрАвторизации, 6));
Заголовки.Вставить("GData-Version", "3.0");
                               
//Теперь можно отправлять GET или POST запросы гугловскому API.
//Например получение списка spreadsheets через GET:
Соединение.Получить(УРЛ, РезультатИмяФайла, Заголовки); //feeds/spreadsheets/private/full
 
Обработка для 1C 8.2 во вложении к публикации - это просто заготовка, на которой изучалась/проверялась работа с API.

PS: Google Docs & Spreadsheets (сервисы writely, wise) изначально разные продукты (созданные в разное время), похоже Google немножко менял API и некоторые примеры из интернета не работают.

Источник: здесь

Комментариев нет:

Отправить комментарий