Приветствую всех.
В этот раз немного о питоне “Python” и чтении данных из “json” файла полученного при выгрузке всего чата определённого поста с телеграмм канала.
Эта задача связана с тем, что нужно получить в xml формате список участников чата, а именно их имена и уникальные id для проведения розыгрыша среди участников.
Дополнительно в xml отфильтровывает все ненужные данные, оставляем только “имя” и “id” и удаляем дубли участников по “id”, чтобы в розыгрыш один и тот же человек не попал несколько раз.
Сразу укажу на то, что возможно эстетически код написан не совсем корректно, но он 100% рабочий.
Итак:
В программе PyCharm я создал проект с Python 3.10
Для обработки “json” файлов и способа обработки я выбрал “Pandas”
Установить пакеты для работы с кодом можно через настройки проекта, нажимаем комбинацию клавиш CTRL + SHIF + S и попадём в меню настроек, далее надо найти строку где написано “Project: ваше название проекта” и строку “Python Interpreter” и иконку плюсика “+”
Вводим в строку поиска слово “pandas”, выбираем из списка нужную строку и в низу жмём “Install Packages” (Это всё можно делать через консоль, я покажу просто визуально по кнопкам)
После установки появится строка “Package ‘pandas’ installed successfully”
Таким же способом устанавливаем второй пакет “openpyxl”
После установки появится строка “Package ‘openpyxl’ installed successfully”
Закрываем окна настроек.
Я сразу напишу исполняемый код целиком, а ниже уже распишу для чего какая строка предназначена.
import pandas as pd
data = pd.read_json('result.json', encoding='utf-8')
request = pd.json_normalize(data['messages'])
del_duplicates = request.drop_duplicates(subset=['from_id'], keep='first')
chose_columns = del_duplicates.reindex(columns=['from', 'from_id'])
rename_columns = chose_columns.columns = ['Имя участника', 'Уникальный id участника']
convert = chose_columns
convert.to_excel('output.xlsx', sheet_name='Проведение розыгрыша', index=False)
Так вот.
Для начала нам понадобится файл выгруженный из телеграмм чата.
Заходим в нужный чат или канал, нажимаем сначала на его название
Появится всплывающее окно с кучей данных, и в нём надо нажать три точки ищем строку “export chat history”
Откроется очередное окно, где нам нужно:
1. убрать все галочки
2. Выбрать формат “json” (в стандарте стоит формат “html”)
3. Выбрать строку где написано “machine-readable JSON”
4. Нажать сохранить “Save”
5. И для выгрузки нажать кнопку “Export”
Если это делать на компьютере, то файлы экспорта сохранятся в папку загрузки в подпапке “ Telegram Desktop”. После экспорта в этой папке появится ещё одна папка начинающаяся “ChatExport_2023-02-07” (дату он создаёт автоматически на день экспорта)
Нам нужен файл “result.json”. Его мы кладём в папку проекта Python.
Запускаем наш код мышкой или сочетанием клавиш SHIFT + F10
После обработки файла “result.json” рядом с ним появится xlsx файл с именем “output.xlsx”.
Откроем его и там будет всего два столбика это “Имя участника” и “уникальный id номер” участников чата.
А дальше можно использовать список для розыгрышей, например.
А вот теперь немного подробнее о назначении строк в коде, его можете править на своё усмотрение, главное принцип работы и результат.
import pandas as pd
Эта строка выбора метода обработки
data = pd.read_json('result.json', encoding='utf-8')
Это строка чтения файла с одновременным декодированием в UTF-8 для (если не выбрать формат кодировки, то не прочитает файл)
request = pd.json_normalize(data['messages'])
Делает удобным структурирование данных
del_duplicates = request.drop_duplicates(subset=['from_id'], keep='first')
Сверяет все строки по "уникальному id” и удаляет дубли
chose_columns = del_duplicates.reindex(columns=['from', 'from_id'])
rename_columns = chose_columns.columns = ['Имя участника', 'Уникальный id участника']
Индексирует файл и меняет название для двух колонок
convert = chose_columns
convert.to_excel('output.xlsx', sheet_name='Проведение розыгрыша', index=False)
Конвертирует выбранные колонки, создаёт файл “output.xlsx” добавляя в него название первого листа (shits) “Проведение розыгрыша” и отправляет данные в файл.
PS: я думаю есть более «чистый» код для написания всего этого, но я это писал опираясь на разные сноски в просторах интернета, т.к. не совсем умею правильно читать документацию, где не всегда понятно приведены примеры работы кода.
И да, этот я запаковал в “exe” файл, его можно запускать на любом компьютере (под Windows) где не установлен Python.
Вот готовый файл в формате exe для конвертации (Этот файл должен находиться в одной папке с result.json)