Як отримати дані з Telegram за допомогою Python

2 червня 2023 1 хвилина Автор: Cyber Witcher

Вилучення даних Telegram за допомогою Python: розкриття потужності API

Python – це потужна та популярна мова програмування, яка відома своєю простотою та ефективністю. Вона використовується для розробки різноманітних програм, веб-додатків, наукових досліджень та багатьох інших проектів. Python має чистий синтаксис, що робить його легким у вивченні та розумінні, і забезпечує широкі можливості для розробників. Python підтримує велику кількість бібліотек та фреймворків, що дозволяє розширити його функціональність та зручність використання. Існує багато спеціалізованих бібліотек для різних галузей, таких як веб-розробка, наукові обчислення, обробка даних, штучний інтелект та багато інших. Завдяки своїй універсальності та простоті використання, Python став однією з найпопулярніших мов програмування у світі. Він використовується як початкова мова для новачків у програмуванні, а також є інструментом в руках досвідчених розробників. Багато великих компаній та організацій використовують Python для своїх проектів через його ефективність та гнучкість.

Python є потужним і популярним мовою програмування з багатьма бібліотеками, які спрощують взаємодію зі зовнішніми сервісами. За допомогою Python і відповідних бібліотек для Telegram API, ви можете здійснювати різноманітні запити до Telegram-серверів та отримувати дані, такі як повідомлення, профілі користувачів, списки контактів тощо. Ця стаття надасть вам  інформацію про те, як підключитися до Telegram API за допомогою Python, налаштувати аутентифікацію, виконати запити до сервера та отримати необхідні дані. Ми також поділимося корисними порадами та прикладами коду, які допоможуть вам почати працювати з Telegram API без зайвих зусиль. Отримати доступ до даних з Telegram за допомогою Python – це відмінна можливість для розробників, дослідників та аналітиків, які бажають отримати більше інформації про користувачів та їх активності в цьому популярному месенджері. Приєднуйтесь до нас і дізнайтеся, як маніпулювати даними з Telegram за допомогою потужних можливостей Python.

Вимоги

Обов’язково отримайте останній вихідний код зі сховища GitHub. Також ви можете переглянути цей відеоурок про те, як використовувати цей сценарій.

Для дослідницьких цілей і аналізу вмісту каналу Telegram вам можуть знадобитися дані каналу в чистому форматі JSON.

Я створив скрипт Python для отримання даних із каналів Telegram. Він має два основних файли: один для отримання даних учасників із каналу, а другий для отримання повідомлень каналу. Цей сценарій зберігає ці дані у файлах JSON; ви можете використовувати їх для аналізу або для імпорту в свої бази даних.

Потрібно встановити Python 3

Крім того, я використовував telethon пакет Python для роботи з Telegram.

Для встановлення telethon необхідно скористатися pip командою:

pip3 встановити телемарафон

Ви можете прочитати документацію Telethon , щоб дізнатися про всі функції цього пакета.

Отримайте свої облікові дані Telegram API

Щоб підключитися до Telegram, нам потрібні api_idі api_hash. Щоб отримати ці параметри, вам потрібно увійти в ядро ​​Telegram і перейти в область інструментів розробки API . Існує форма, яку вам потрібно заповнити, і після цього ви можете отримати свої api_idта api_hash.

Ось довідкова документація Telegram про те, як отримати свої облікові дані API .

Створіть клієнт Telegram у своєму сценарії Python

Ця частина майже однакова як для залучення членів каналу, так і для повідомлень каналу. По-перше, нам потрібен основний імпорт:

Раніше я configparserчитав облікові дані API з конфігураційного файлу та package.jsonскидав дані у файли у форматі JSON.

Ми імпортуємо те, що нам потрібно з Telethon, щоб створити клієнт Telegram у нашому скрипті.

Як ви, напевно, знаєте, зберігати облікові дані Telegram API у вихідному коді небезпечно. Якщо ви додаєте будь-які облікові дані безпосередньо у свій вихідний код, ви ризикуєте своєю безпекою, а також безпекою тих, хто використовує цей код, оскільки ви вводите в оману тих, хто хоче використовувати ваш код.

Тому, щоб уникнути проблем із безпекою, ми розміщуємо наші облікові дані API в іншому файлі під назвою config.ini. Він має таку просту структуру:

Тепер, щоб створити клієнт Telegram у нашому сценарії Python, спочатку ми читаємо ці облікові дані в нашому коді:

Тепер, коли у нас є все необхідне, ми намагаємося увійти в Telegram і створити клієнтський об’єкт для отримання даних:

Telegram авторизує ваші облікові дані, а потім запитує код підтвердження та пароль, якщо ви встановили їх для свого Telegram. Це точно так само, як якщо б ви входили у свій обліковий запис Telegram у додатку або онлайн.

Майте на увазі, що під час запуску цього сценарію він має доступ до вашого облікового запису Telegram. Переконайтеся, що ви запускаєте сценарій у безпечному середовищі.

Зараз у нас clientготовий об’єкт, і ми можемо використовувати цей об’єкт для підключення та спілкування з Telegram.

Залучення учасників каналу

Ми зробимо це в два кроки. Спочатку ми отримуємо всі дані учасників каналу з Telegram, а потім зберігаємо ці дані у файлі JSON.

Перед виконанням цих кроків не забудьте додати ще три імпортовані файли до заголовка сценарію:

Запит учасників каналу з Telegram

Перш за все, ми просимо у користувача Telegram-канал. Ви можете надати скрипту URL-адресу каналу або унікальний ідентифікатор каналу.

Отже, ми отримуємо дані користувача та перетворюємо їх на канал Telegram:

Якщо користувач дає нам ідентифікатор каналу, ми можемо перетворити його на об’єкт PeerChannel. І якщо користувач надає нам URL-адресу каналу Telegram (наприклад, https://t.me/channel), ми можемо використовувати її безпосередньо.

Наступним кроком буде залучення учасників каналу . По-перше, вам потрібно знати, що Telegram не відповідає всіма даними, які ви запитуєте, а надає дані пакетами. Ми можемо отримати 100 учасників у кожному запиті.

Ми встановлюємо ліміт 100, починаючи зі зсуву 0, і створюємо список, який міститиме учасників каналу. У нескінченному циклі ми створюємо об’єкт GetParticipantsRequest, який шукає порожні рядки в списку учасників каналу, і це приводить усіх користувачів. Як я вже згадував, ми можемо отримати лише 100 учасників у кожному запиті. Після отримання членів ми перевіряємо, чи participantsмає об’єкт usersвластивість. Якщо він не має users, це означає, що ми отримуємо всіх користувачів, тому ми розриваємо нескінченний цикл. Якщо він має users, ми додаємо нових учасників до списку всіх учасників і додаємо довжину списку отриманих учасників до зсуву, тому наступний запит запитує користувачів, починаючи з цього зміщення. Цей цикл продовжується, доки він не охопить усіх учасників каналу.

Зберігайте дані у файлі JSON

Це найлегша частина. Хоча ви можете зберегти дані в будь-якій базі даних, такій як MySQL, MongoDB тощо, найпростішим способом є збереження даних у файлі JSON. Однак якщо у вас багато даних, краще розглянути можливість зберігання їх у базі даних.

Ви можете зберігати весь об’єкт члена у файлі JSON, але я вважаю за краще зберігати лише те, що мені потрібно. Отже, я створив список для додавання даних учасників, а потім написав дамп JSON цього списку у файл

Просто та легко: я створив словник даних члена та додаю його до списку. Після цього я записав дамп JSON у файл.

Ось повний код для отримання учасників каналу Telegram:

Отримання повідомлень каналу

Перш ніж почати цей крок, вам потрібно додати ці імпортовані дані до головної частини вашого сценарію:

Після редагування імпорту створення клієнта Telegram у вашому коді Python точно так само, як і в попередньому розділі. Крім того, отримання ідентифікатора каналу або URL-адреси від користувача відбувається так само, як описано в попередньому розділі. Отже, я припускаю, що у вас готовий Telegram clientі ви створили об’єкт каналу, який я називаю my_channel:

Надсилання GetHistoryRequestоб’єкта клієнту Telegram повертає об’єкт історії зі списком повідомлень. Знову ж таки, ми маємо обмеження в 100 повідомлень для кожного запиту. Отже, ми зациклюємо цей запит у нескінченному циклі. Після кожного запиту ми перевіряємо, чи має об’єкт history властивість messages. Якщо ні, ми досягли кінця повідомлень у каналі, тому ми можемо вийти з циклу.

Я також додав total_count_limitзмінну. Можливо, ви не хочете отримувати всі повідомлення або отримання всіх повідомлень може зайняти надто багато часу, тому ви можете встановити, скільки повідомлень ви хочете отримувати з каналу. Якщо встановити значення 0, сценарій отримуватиме всі повідомлення з каналу.

Цього разу встановити зсув трохи складно. GetHistoryRequestотримує offset_id, що означає, з якого повідомлення він повинен почати отримувати історію. Щоразу, коли ви отримуєте список повідомлень, вам потрібно встановлювати зсув на ідентифікатор останнього повідомлення:

Щоб зберегти повідомлення як дані JSON, потрібно перетворити об’єкт повідомлення на словник. Ви можете використовувати to_dictфункцію, щоб отримати об’єкт повідомлення у форматі словника:

У останніх двох рядках коду перевірте, чи total_count_limitвстановлено значення вище 0. Якщо загальна кількість отриманих повідомлень — це загальна кількість повідомлень, які ми хочемо, і якщо ці дві умови виконуються, цикл переривається.

Тепер, коли у вас є всі дані повідомлень, ви можете зберегти цей список у файлі JSON.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.