Toggl сменил API с V8 на V9

27 марта попробовал загрузить данные из Toggl в ППМ, но получил ошибку:

Ошибка аутентификации: "The V8 API was shutdown on 23/05/2024. Please find the migration guide for V8 -\u003e V9 at https://engineering.toggl.com/changes/2022/10/01/api-v8-deprecation/index.html"

Внезапно сменилось API у Toggl.

Вот код чтения данных о рабочем времени. Изменения отмечены комментариями.

	ТекСервер = "api.track.toggl.com"; //https:
	ТекПорт = 443;
	
	Соединение = Новый HTTPСоединение(
	ТекСервер, //    сервер (хост)
	ТекПорт,  //порт, по умолчанию для http используется 80, для https 443
	Объект.Логин, //пользователь для доступа к серверу (если он есть)
	Объект.Пароль, //пароль для доступа к серверу (если он есть)
	, // здесь указывается прокси, если он есть
	, // таймаут в секундах, 0 или пусто - не устанавливать
	Новый ЗащищенноеСоединениеOpenSSL() // защищенное соединение, если используется https
	);
	
	//Про авторизацию смотреть тут: https://github.com/toggl/toggl_api_docs/blob/master/chapters/authentication.md
	ТекКоманда = 
	"api/v9/me";
	Запрос = Новый HTTPЗапрос(ТекКоманда);
	РезультатЗапроса = Соединение.Получить(Запрос);
	Ответ = РезультатЗапроса.ПолучитьТелоКакСтроку();
	
	Если РезультатЗапроса.КодСостояния <> 200 Тогда
		Сообщить("Ошибка аутентификации: " + Ответ);
		Возврат;
	КонецЕсли;
	
	//Создаем то же соединение, но уже с другим логином и паролем, получеными из API
	СтруктураJSON = json.ПолучитьСтруктуруИзJSON(Ответ);
	
	//V8
	//api_token = СтруктураJSON.data.api_token;
	//workspace_id = XMLСтрока(СтруктураJSON.data.workspaces[0].id);
	//V9
	api_token = СтруктураJSON.api_token;
	workspace_id = XMLСтрока(СтруктураJSON.default_workspace_id);
	
	Соединение = Новый HTTPСоединение(
	ТекСервер, //    сервер (хост)
	ТекПорт,  //порт, по умолчанию для http используется 80, для https 443
	api_token, //пользователь для доступа к серверу (если он есть)
	"api_token", //пароль для доступа к серверу (если он есть)
	, // здесь указывается прокси, если он есть
	, // таймаут в секундах, 0 или пусто - не устанавливать
	Новый ЗащищенноеСоединениеOpenSSL() // защищенное соединение, если используется https
	);
	
	
	ТекДата1 = Объект.Дата1;
	ТекДата2 = Объект.Дата2;
	Если Не ЗначениеЗаполнено(ТекДата2) Тогда
		ТекДата2 = ТекущаяДата();
	КонецЕсли;
	//Информация по запросам тут:
	//Максимальный период - год
	//https://github.com/toggl/toggl_api_docs/blob/master/reports/detailed.md
	//https://github.com/toggl/toggl_api_docs/blob/master/reports/summary.md
	//by defalut - grouping:projects and subgrouping:time_entries
	Страница = 1;
	ВсеСтроки = Новый Массив();
	Пока (Истина) Цикл //По страницам
		ТекКоманда = 
		"reports/api/v2/details?user_agent=api_test";
		ТекКоманда = ТекКоманда + "&workspace_id=" + workspace_id;
		ТекКоманда = ТекКоманда + "&since=" + Формат(ТекДата1, "ДФ=yyyy-MM-dd");  //since=2013-05-19
		ТекКоманда = ТекКоманда + "&until=" + Формат(ТекДата2, "ДФ=yyyy-MM-dd");
		ТекКоманда = ТекКоманда + "&workspace_id=" + workspace_id;
		ТекКоманда = ТекКоманда + "&page=" + XMLСтрока(Страница);
		
		
		Запрос = Новый HTTPЗапрос(ТекКоманда);
		РезультатЗапроса = Соединение.Получить(Запрос);
		
		Ответ = РезультатЗапроса.ПолучитьТелоКакСтроку();
		Если РезультатЗапроса.КодСостояния <> 200 Тогда
			Сообщить("Ошибка получения данных: " + Ответ);
			Возврат;
		КонецЕсли;
		
		СтруктураJSON = json.ПолучитьСтруктуруИзJSON(Ответ);
		Для Каждого Структура ИЗ СтруктураJSON.data Цикл
			ВсеСтроки.Добавить(Структура);
		КонецЦикла;
		
		Если СтруктураJSON.data.Количество() = 0 Тогда
			Прервать;
		КонецЕсли;
		//json.ПолучитьСтруктуруИзJSON(Ответ).data[0].title.project - проект
		Страница = Страница + 1;
	КонецЦикла;

На выходе таблица значений с колонками:

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *