Найти тему
Денискины IT заметки

Выгрузка пользователей из Telegram для розыгрышей среди участников канала или созданного чата в эксель Excel.

Оглавление

Приветствую всех.

В этот раз немного о питоне “Python” и чтении данных из “json” файла полученного при выгрузке всего чата определённого поста с телеграмм канала.

Эта задача связана с тем, что нужно получить в xml формате список участников чата, а именно их имена и уникальные id для проведения розыгрыша среди участников.

Дополнительно в xml отфильтровывает все ненужные данные, оставляем только “имя” и “id” и удаляем дубли участников по “id”, чтобы в розыгрыш один и тот же человек не попал несколько раз.

Сразу укажу на то, что возможно эстетически код написан не совсем корректно, но он 100% рабочий.

Итак:

В программе PyCharm я создал проект с Python 3.10

Для обработки “json” файлов и способа обработки я выбрал “Pandas”

Установить пакеты для работы с кодом можно через настройки проекта, нажимаем комбинацию клавиш CTRL + SHIF + S и попадём в меню настроек, далее надо найти строку где написано “Project: ваше название проекта” и строку “Python Interpreter” и иконку плюсика “+”

Вводим в строку поиска слово “pandas”, выбираем из списка нужную строку и в низу жмём “Install Packages” (Это всё можно делать через консоль, я покажу просто визуально по кнопкам)

-2

После установки появится строка “Package ‘pandas’ installed successfully”

-3

Таким же способом устанавливаем второй пакет “openpyxl”

-4

После установки появится строка “Package ‘openpyxl’ installed successfully”

-5

Закрываем окна настроек.

Я сразу напишу исполняемый код целиком, а ниже уже распишу для чего какая строка предназначена.

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)

Так вот.

Для начала нам понадобится файл выгруженный из телеграмм чата.

Заходим в нужный чат или канал, нажимаем сначала на его название

-6

Появится всплывающее окно с кучей данных, и в нём надо нажать три точки ищем строку “export chat history”

-7

Откроется очередное окно, где нам нужно:
1. убрать все галочки
2. Выбрать формат “json” (в стандарте стоит формат “html”)
3. Выбрать строку где написано “machine-readable JSON”
4. Нажать сохранить “Save”
5. И для выгрузки нажать кнопку “Export”

-8

Если это делать на компьютере, то файлы экспорта сохранятся в папку загрузки в подпапке “ Telegram Desktop”. После экспорта в этой папке появится ещё одна папка начинающаяся “ChatExport_2023-02-07” (дату он создаёт автоматически на день экспорта)

-9

Нам нужен файл “result.json”. Его мы кладём в папку проекта Python.

Запускаем наш код мышкой или сочетанием клавиш SHIFT + F10

-10

После обработки файла “result.json” рядом с ним появится xlsx файл с именем “output.xlsx”.

Откроем его и там будет всего два столбика это “Имя участника” и “уникальный id номер” участников чата.

-11

А дальше можно использовать список для розыгрышей, например.

А вот теперь немного подробнее о назначении строк в коде, его можете править на своё усмотрение, главное принцип работы и результат.

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) “Проведение розыгрыша” и отправляет данные в файл.

-12

PS: я думаю есть более «чистый» код для написания всего этого, но я это писал опираясь на разные сноски в просторах интернета, т.к. не совсем умею правильно читать документацию, где не всегда понятно приведены примеры работы кода.

И да, этот я запаковал в “exe” файл, его можно запускать на любом компьютере (под Windows) где не установлен Python.
Вот
готовый файл в формате exe для конвертации (Этот файл должен находиться в одной папке с result.json)