Парсинг телеграмм чатов php

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Скрипт позволяет выгрузить участников чатов/каналов(по чату для комментариев) и сообщения в различные форматы файлов.

Grigorich-JSDio/TG-Parser

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Парсер участников и сообщений из ТГ-Чатов и чатов для комментариев в ТГ-Каналах

  • Выгрузка участников групп/каналов(по чату для комментариев) в json, excel и txt
  • Выгрузка истории групп/каналов(по чату для комментариев) в html и txt.
  • Запустить ярлык с названием Установка в главном каталоге либо запустить install.bat из каталога data.
  • На сайте https://my.telegram.org/auth получить api_id и api_hash
  • Записать данные в файл config.py.dist и переименовать его в config.py
  • Выполнить pip install -r «requirements.txt» из каталога data.
  • На сайте https://my.telegram.org/auth получить api_id и api_hash
  • Записать данные в файл config.py.dist и переименовать его в config.py
  1. Запустить ярлык с названием Запуск в главном каталоге либо запустить main.py из каталога data. 1.1 При первом запуске скрипт запросит у вас номер телефона. Это необходимо, чтобы скрипт авторизировался под вашим аккаунтом и мог собирать данные о чатах/каналах.
  2. Введите ссылку на чат/канал либо id чата/канала, в которых состоит пользователь, под чьим именем используется скрипт. Обратите внимание, что некоторые TG-клиенты показывают ID чатов/каналов, убирая значение -100 от начала ID. Например:
    • -100123456789 — Правильно
    • 100123456789 — Неправильно
    • 123456789 — Неправильно
  3. После получения списка участников в главном каталоге появятся директории Чаты и Каналы в которых, в зависимости от вашего выбора, появятся папки с вашими чатами/каналами с обработанными данными.
  4. Скрипт предложит вам сохранить историю сообщений. При утвердительном выборе сообщения начнут записываться в те же папки. За формат вывода особая благодарность @danila_ms

Больше скриптов и материалов у нас на канале @osint_club_channel

About

Скрипт позволяет выгрузить участников чатов/каналов(по чату для комментариев) и сообщения в различные форматы файлов.

Источник

Парсинг telegram каналов для агрегатора контента на PHP

Несколько лет назад я начал разрабатывать свой агрегатор контента, что бы упростить свой серфинг в сети. Изначально я парсил только rss, vk и facebook, но в прошлом году решил сделать полный рефакторинг проекта: отказаться от парсинга на клиенте, сделать нормальный back-end, использовать базу данных для хранения данных и расширить список поддерживаемых ресурсов.

Помимо стандартного набора из rss, fb, vk, twitter, instagram, youtube я добавил поддержку произвольных открытых каналов из telegram.

image

Под катом пошаговая инструкция, как парсить любые каналы в telegram без регистрации и смс.

[UPDATE 2019-03-12]
Мой новый пост про парсинг телеграм каналов: habr.com/ru/post/354000. Более качественный код, микросервисы с открытым исходным кодом и новый публичный сервер для тестов.

Изначально я предполагал, что парсить каналы можно через популярный BotApi, на который имелось много инструкций в сети. Но оказалось, что для того, что бы бот мог читать какой-то канал — бота надо в этот канал добавить. Для сторонних каналов этот вариант не возможен. Я перешел к чтению мануалов на основной API телеграма.

Через 30 минут изучения документации я был в отчаянии. Все данные у телеграма шифруются, что бы получить что то от их серверов нужно обладать степенью магистра по криптографии… А еще вместо http запросов используется socket, с которым я ранее не сталкивался. Вообщем чистый хардкор и никаких внятных примеров в сети… Это было почти фиаско.

Последней надеждой было найти какое-то готовое решение. И тут, наконец, удача мне улыбнулась. На сайте telegram я наткнулся на ссылку на неофициальный opensource php клиент. Да-да! Можно использовать telegram под php, и там даже есть поддержка звонков! Это чудо называется madelineProto. Оно может подключаться к серверам используя криптографическую магию и отдавать нужные мне данные в виде нормального, человеческого ассоциативного массива.

Я приступил к настройке php клиента.

1. Регистрация своего клиента.

К сожалению, в начале поста я вас обманул и нам всеже потребуется регистрация и смс авторизация в телеграме…

Если аккаунт в телеграме уже есть, остается зарегистрировать свое приложение/клиент, и получить ключи для доступа к серверам telegram.

Это стандартная процедура, похожая на аналогичную у соц. сетей для доступа к API. Инструкция для создания своих ключей.

После регистрации клиента нам потребуются только «App api_id» и «App api_hash» со страницы my.telegram.org/apps

2. Установка madelineProto.

Для работы требуется php7, но в Readme написано, что есть способ запустить на php5.6.

С запуском на MacOs с php7 из пакета Mamp, и простеньком хостинге за 150 руб в мес проблем не возникло.

Процесс не хитрый: скачать релиз, установить зависимости через composer и можно приступать к настройке.

Для уменьшения размера я удалил лишние зависимости и оставил только danog, paragonie и phpseclib. На работе клиента это никак не сказалось.

3. Настройка madelineProto и первый запуск.

Все примеры по использованию и настройке описаны в репозитории клиента, но я приведу свой код с комментариями.

На этом этапе потребуется авторизовать новое подключение и ввести код верификации, который придет в ранее авторизованный telegram клиент. Запускать код желательно из консоли (но есть и веб режим). Если настраиваете клиент для другого человека, то нельзя пересылать код авторизации через telegram, иначе он будет аннулирован. Но можно пересылать его в виде скриншота или писать текстом.

Количество авторизаций, которые можно запросить, ограничено. Если что-то не срабатывает — не стоит много раз подряд запускать код, иначе Телеграм заблокирует отправку подтверждений на сутки или более.

Я, к сожалению, узнал об этой особенности на своей шкуре. Обычной тех. поддержки у телеграма, кстати, тоже нет, так что в случае блокировки придется ждать 🙂

//мой список настроек минимален, остальные - по умолчанию. Cписок всех значений по умолчанию можно посмотреть в ReadMe клиента на github. $settings = [ 'app_info' => [ // Эти данные мы получили после регистрации приложения на https://my.telegram.org 'api_id' => XXXXX, 'api_hash' => XXXXXXXXXX, ], 'logger' => [ // Вывод сообщений и ошибок 'logger' => 3, // выводим сообещения через echo 'logger_level' => 4, // выводим только критические ошибки. ], //для доступа может потребоваться socks5 прокси //если прокси не требуется, то этот блок можно удалить. 'connection_settings' => [ 'all' => [ 'proxy' => '\SocksProxy', 'proxy_extra' => [ 'address' => 'xxx.xxx.xxx.xxx', 'port' => 1234, 'username' => '',//Можно удалить если логина нет 'password' => '',//Можно удалить если пароля нет ], ], ], 'serialization' => [ 'serialization_interval' => 300, //Очищать файл сессии от некритичных данных. //Значительно снижает потребление памяти при интенсивном использовании, но может вызывать проблемы 'cleanup_before_serialization' => true, ], ]; $MadelineProto = new \danog\MadelineProto\API('session.madeline', $settings); $MadelineProto->start(); 

В корне проекта будут создан файл «session.madeline», в котором, в бинарном виде, будут храниться данные нашей сессии. При повторном запуске авторизовываться заново не придется. Возобновление сессии работает довольно быстро. У меня на инициализацию клиента уходит около 800 мс на зарубежном сервере.

Для обновления настроек достаточно обновить массив и перезапустить скрипт. Удалять файл сессии не требуется.

4. Получение постов из произвольного открытого telegram канала.

 $data = array( 'peer' => '@'.$val['url'], //название_канала, должно начинаться с @, например @breakingmash, все остальные параметры, кроме limit, можно оставить равными 0 'offset_id' => $val['offset_id']?:0, 'offset_date' => $val['offset_date']?:0, 'add_offset' => $val['add_offset']?:0, 'limit' => $val['limit']?:10, //Количество постов, которые вернет клиент 'max_id' => $val['max_id']?:0, //Максимальный id поста 'min_id' => $val['min_id']?:0, //Минимальный id поста - использую для пагинации, при 0 возвращаются последние посты. 'hash' => 0 ); $response = $MadelineProto->messages->getHistory($data); 

Так как у меня обновляется много каналов за один раз, то имеет смысл использовать одну и туже сессию, а не тратить по 2 секунды на каждый канал.

После выполнения мы получаем массив с нужным нам количеством сообщений/постов, разбитых по каналам. Так же передаются данные о медиа-вложениях.

Дальше остается сохранить текст поста, при наличии фото/видео получить превью и подпись к медиа файлу и сформировать ссылку для просмотра поста.

4. Получение медиа-вложений.

К счастью, с недавнего времени, telegram внедрил html превью постов, поэтому можно не сохранять на свой сервер бинарные данные, полученные из клиента, а просто взять ссылку на фото и видео, хранящееся на серверах телеграма.

private function telegram_media_parse($posts_data, $source)< include_once(ROOT_DIR.'/libs/phpQuery.php'); //для парсинга html использую очень быструю и удобную библиотеку phpQuery foreach ($posts_data as &$post_data) < if (!empty($post_data['media']))< $file_contents = self::loader($post_data['post_url'],'site');//Через curl получаем html код страницы поста. $document = phpQuery::newDocumentHTML($file_contents); //Формируем dom-дерево из html строки $post_data['post_image'] = preg_replace('/[\s\S]*background-image:[ ]*url\(["\']*([\s\S]*[^"\'])["\']*\)[\s\S]*/u','$1',$document->find($source['rules']['post_img_path'])->eq(0)->attr('style')); //адрес изображения хранится в background-image свойстве. $post_data['post_description'] = $document->find($source['rules']['post_text_path'])->eq(0)->text(); //Получаем caption медиафайла. > unset($post_data['media']); > unset($post_data); return $posts_data; > 

На этом парсинг закончен и можно сохранять посты в базу или вывести на странице.

Надеюсь, что мой первый пост будет кому нибудь полезен. Ссылку на свой агрегатор не оставляю, так как не уверен, разрешено ли это.

Источник

Как парсить Telegram канал при помощи PHP 37

Когда-то на Хабре была опубликована статья как спарсить Телеграм канал при помощи PHP, как показала практика после прочтения материала появляется ещё больше вопросов, или в процессе тестирования «ни чего не работает».

Нам понадобится:

  1. Действующая учётная запись в Телеграм
  2. Tor браузер под рукой (если вы из РФ и у вас заблокирован доступ к сайту Телеграм)
  3. Обычный хостинг, например Бегет
  4. Знания php и умение использовать composer
  5. PHP 7.2
  6. Умение пользоваться консолью сервера. (Некоторые операции будут выполняться в консоли)

Итак, нужно перейти на сайте Телеграм https://my.telegram.org:

  1. Вводим свой номер телефона
  2. Указываем код подтверждения пришедший в ваше клиентское приложение Телеграм
  3. Переходим в меню API development tools

На этой странице нам нужно заполнить данные о нашем создаваемом приложении (на один номер — одно приложение).

Нам понадобится два параметра: App api_id и App api_hash, далее мы их будем использовать в коде вызова для получения постоянных ключей авторизации.

Следующее что нам надо, это скачать проект https://github.com/danog/MadelineProto к себе в отдельную папку на хостинге и при помощи composer установить все зависимости.

PS: в коде будет использоваться PHP функция «readline» — предварительно установите её на ваш хостинг и проверьте её доступность в консольном режиме PHP.

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

Источник

Читайте также:  Java response bad request
Оцените статью