Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
RybolovlevN
Добрый день, переделываю немного скрипт "Поздравление именинников".
Использую функцию mGetUserDataAsJSON:

Часть кода//

dBirthday: double;
//////
sJSON := mGetUserDataAsJSON(iUIN, 'Birthday');
JSONGetDateTime(sJSON, 'Birthday', dBirthday); // получение даты рождения
sBirthday:= FormatDateTime('ddmmyyyy', dBirthday);

Функция возвращает значение 01012004. Хотя я несколько раз проверил данные пользователя, менял дату рождения - бесполезно.

Другие данные (WorkDept, WorkPosition) выводит правильно.

Для интереса попробовал другие данные из функции mGetUserDataAsJSON с типом double
LastAccess и Registered - выводит опять 01012004.

В чем моя ошибка? Спасибо заранее.
Аватара пользователя
Алексей Пикуров
mGetUserDataAsJSON возвращает дату в формате double, а функция JSONGetDateTime — обрабатывает текстовую строку, а не double-значение, в справке это описано в примере.

Для JSON не хватает функций для работы с типом double, я добавлю.

А пока делайте так:

Код: Выделить всё
sDateTime := mGetUserAttribute(iUIN, 'Home_Birthday');

Получите текстовую строку типа "09.10.1979.00.00.00" и с помощью Fetch, StrToInt и EncodeDate получите нужное значение в Double.

Для отладки скриптов, чтобы увидеть промежуточные значения переменных, рекомендую использовать функцию mLogScript.
Аватара пользователя
Алексей Пикуров
P.S. Можно ещё так получить double значение даты:

Код: Выделить всё
sJSON := mGetUserDataAsJSON(iUIN, 'Birthday'); // получили JSON с данными
JSONGetString(sJSON, 'Birthday', sBirthday); // достали оттуда строку
dt := StrToFloat(sBirthday); // преобразовали строку в float (этот тот же double, с бОльшей размерностью)
Аватара пользователя
Алексей Пикуров
В новой версии добавили десяток новых функций, с ними будет удобнее решать задачи, как у вас.