Как я смски получал с помощью ИИ
Disclaimer: эта история не про код, а про использование ИИ для упрощения и ускорения написания мелких pet-проектов (и не только).
Я живу в деревне и как практически в любой деревне на постсоветском пространстве у нас интернет идёт через модем с сим-картой.
В моём случае это NR-400
У моего модема на борту есть LUCI.
Возникла необходимость читать смски с этого модема не заходя в web-интерфейс (слишком много времени на это тратится). Но писать самому этот код не очень хотелось. Поэтому решил использовать ChatGPT как помощника.
Задача №1. Получить смски на модеме
Найти код в самом модеме отвечающий за чтение смсок. Тут я справился сам (т.к. уже копался в потрохах LUCI на этом модеме). Нашёл команду которая читает все смс: at -S modem at-sms-list all
. Результат был в виде json данных. Дальше встал вопрос парсинга данных и перекодировки самих сообщений.
Задача №2. Разобрать данные
Из кода web-интерфейса я узнал что значат часть полей json. Но хотелось узнать что значат все поля. Задал этот вопрос чату. И он на удивление всё расписал как надо:
Hidden text
Данные в предоставленной JSON строке представляют собой информацию о SMS-сообщениях, включая метаданные и содержимое сообщений. Вот как расшифровать структуру данных:
"mem"
: Объект с информацией о памяти."type"
: Тип памяти («ME» — внутренняя память телефона)."used"
: Использованная память в единицах."total"
: Общий объем памяти в единицах.
"sms"
: Список объектов SMS-сообщений."idx"
: Индекс сообщения."stat"
: Статус сообщения («read» — прочитано)."fail"
: Признак ошибки отправки («False» — не было ошибки)."smsc"
: Сервисный центр SMS."sender"
: Отправитель сообщения."ts"
: Временная метка сообщения."date"
: Дата сообщения."time"
: Время сообщения."zone"
: Часовой пояс сообщения."c_ref"
: Счетчик ссылок (если есть)."c_cur"
: Текущий номер сообщения."c_tot"
: Общее количество частей сообщения."dcs"
: Кодировка данных."data"
: Содержимое SMS в виде строки.
Каждый объект в списке "sms"
представляет одно SMS-сообщение. Важные поля:
"sender"
: Имя отправителя."ts"
,"date"
,"time"
,"zone"
: Дата и время отправки сообщения с учетом часового пояса."data"
: Содержимое сообщения (текст).
Кодировка "dcs"
указывает на способ кодирования данных в поле "data"
. Значение 2
указывает на кодировку UCS-2 (16-бит Unicode), которая обычно используется для текстовых сообщений на кириллице.
Обратите внимание, что часть информации может быть неполной или сокращенной, так как эти данные представляют собой сжатую версию длинных SMS-сообщений.
Если у вас есть какие-либо дополнительные вопросы или вы хотите более подробно разобраться с каким-либо аспектом данных, пожалуйста, уточните.
Задача №3. Написать рабочий код
Пришло время писать код. Но писать с нуля не очень хотелось. Поэтому был взят код из web-интерфейса модема, написанного на JS. Попросил чат конвертировать этот код из JS в PHP (лучше наверно в python, но опыта маловато). Он сделал это, но предупредил что часть кода пропала, т.к. в PHP не получится работать с DOM деревом страницы