Telegram messages gethistory как пользоваться

Я хочу загрузить историю чатов (все сообщения), которые были опубликованы в открытой группе Telegram. Как я могу сделать это с помощью python? Я нашел этот метод в API https://core.telegram.org/method/messages.getHistory, который, я думаю, выглядит так, как я пытаюсь сделать. Но как я на самом деле это называю? Кажется, нет примеров python для протокола MTproto, который они используют.

Я также посмотрел API-интерфейс Bot, но у него нет способа загрузки сообщений.

siamii 10 июнь 2017, в 00:31
Поделиться
Bot api не имеет доступа к сообщениям. Для этого вам нужен API Telegram.
apadana 11 июнь 2017, в 01:37

Вы также можете захотеть взглянуть на github.com/LonamiWebs/Telebackup, чтобы получить некоторое вдохновение (у проекта все еще много недостатков), программу на Python, единственная цель которой — загрузить историю чата (следовательно, создать резервную копию). этого).

Lonami 15 июнь 2017, в 14:16
Поделиться:

4 ответа

Вы можете использовать Telethon. API Telegram довольно сложный и с помощью telethon вы можете начать использовать API телеграмм за очень короткое время без каких-либо предварительных знаний об API.

How To Backup Data in Telegram | Backup Telegram Chat


pip install telethon

Изображение 155423

Затем зарегистрируйте свое приложение (взято из телемарафона):

Затем для получения истории сообщений группы (при условии, что у вас есть идентификатор группы):

chat_id = YOUR_CHAT_ID api_id=YOUR_API_ID api_hash = ‘YOUR_API_HASH’ from telethon import TelegramClient from telethon.tl.types.input_peer_chat import InputPeerChat client = TelegramClient(‘session_id’, api_id=api_id, api_hash=api_hash) client.connect() chat = InputPeerChat(chat_id) total_count, messages, senders = client.get_message_history( chat, limit=10) for msg in reversed(messages): # Format the message content if getattr(msg, ‘media’, None): content = ‘> <>’.format( # The media may or may not have a caption msg.media.__class__.__name__, getattr(msg.media, ‘caption’, »)) elif hasattr(msg, ‘message’): content = msg.message elif hasattr(msg, ‘action’): content = str(msg.action) else: # Unknown message, simply print its class name content = msg.__class__.__name__ text = ‘[<>:<>] (ID=<>) <>: <> type: <>’.format( msg.date.hour, msg.date.minute, msg.id, «no name», content) print (text)

Еще по теме:  История очищена Телеграм где настройки

Пример берется и упрощается из примера telethon.

apadana 11 июнь 2017, в 02:59
Поделиться

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

apadana 11 июнь 2017, в 01:53

Также обратите внимание, что InteractiveTelegramClient перестанет поставляться с версией pip, поскольку это только когда-либо предназначалось для примера. Вместо этого используйте TelegramClient .

Lonami 15 июнь 2017, в 14:14
apadana 16 июнь 2017, в 09:42
сколько сообщений я могу скачать с помощью этого скрипта? 5к или безлимитный? Спасибо!
Tony Wang 29 янв. 2018, в 06:07

How To Backup and Restore Telegram Messages

Не могли бы вы обновить код, потому что он вызывает ошибку, как показано здесь gist.github.com/aabdulwahed/5e785a0bd911d9f4f47256b5b25f3c42

aabdulwahed 03 фев. 2018, в 19:05
Показать ещё 3 комментария

Telegram MTProto трудно использовать для новичков, поэтому я рекомендую telegram-cli.

Вы можете использовать сторонний tg-export script, но все же нелегко для новичков.

Sean 09 июнь 2017, в 23:05
Поделиться

С обновлением (август 2018 года) приложение Telegram Desktop поддерживает сохранение истории чата очень удобно. Вы можете сохранить его в формате json или html.

Чтобы использовать эту функцию, убедитесь, что на вашем компьютере установлена последняя версия Telegram Desktop, затем нажмите «Настройки»> «Экспорт данных телеграммы».

newsha 02 дек. 2018, в 19:57
Поделиться
это настоящая вещь.
anvd 14 март 2019, в 16:04

Да, но программно может быть полезно автоматизировать процесс. Представьте, что вам нужно сохранить 100 чатов, вы нажимаете вручную, чтобы экспортировать каждый из них, или вы делаете хороший скрипт, который можно запустить как задание cron? Я предпочитаю способ питона ТБХ;)

firepol 05 апр. 2019, в 12:12

вы можете использовать telepot (документация здесь) для python, например:

Еще по теме:  Почему музыкальные файлы в Телеграмме открываются через приложение а не на прямую

import telepot token = ‘your_token’ bot = telepot.Bot(token) tmp_history = bot.getUpdates() print(tmp_history[‘result’])

но вы можете сбежать с лимитом в 100 записей в истории, прочитать это об этом

Vadim 02 дек. 2018, в 08:07
Поделиться

Ещё вопросы

  • 1 Многопоточность в opennetcf.orm (как использовать SqlCeDataStore)
  • 0 Проблема установки ImageMagick для PHP на Windows
  • 0 как я могу разрешить / usr / bin / ld: не могу найти ошибку -lconfig ++
  • 1 Подсчет всех символов в строке
  • 1 Как сделать флип-анимацию с использованием XML
  • 0 Поймать неосуществленные чистые виртуалы в C ++
  • 1 nodejs — дождитесь завершения fs.stat
  • 0 Yii — Css — один активный эффект для нескольких ссылок
  • 1 Массовая вставка текстового файла в SQL Server с помощью pymssql
  • 0 CakePHP генерирует ссылку, параметр аргумента которой определяется входом select
  • 1 какими должны быть размеры матрицы Q в открытой среде для Q-обучения
  • 0 Зацикливание SVG прямоугольников из базы данных
  • 0 Удалить отступ между вкладкой 2 jquery
  • 1 Javascript есть ли способ получить индекс массива при использовании функционального программирования?
  • 0 AngularFire https://overcoder.net/q/647416/%D0%BA%D0%B0%D0%BA-%D1%8F-%D0%BC%D0%BE%D0%B3%D1%83-%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8E-%D1%87%D0%B0%D1%82%D0%B0-%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B-%D0%B2-telegram» target=»_blank»]overcoder.net[/mask_link]

    Untitled

    EugeneBosyakov

    Эксперементирую с messages.getHistory. Хоть убей не могу понять, как достать не последние сообщения, а первые. То есть к примеру этот запрос возвратит последнее сообщение:

    https://api.vkontakte.ru/method/messages.getHistory.xml?
    uid=user_id
    access_token=access_token
    https://pastebin.com/X9gput4Z» target=»_blank»]pastebin.com[/mask_link]

    Почему метод «message.get()» не работает?

    Столкнулся с проблемой при работе с VK API на Python’е 3. Сделал простого бота по инструкциям (видео на YouTube, статьи различные и т.д.).

    На следующий день, бот перестал работать. Происходила ошибка с параметрами метода message.get() (Ошибка №100). Зашел на документацию ВК, стал искать ошибку. Увидел, что метод устарел и понял, что метод лучше не использовать (даже если ошибка не в нем), но не знал что делать.

    На просторах Интернета нашел видео, в котором использовался метод messages.getConversations() , но он показался мне менее гибким, т.к. он возвращает информацию о диалогах бота и только последнее сообщение диалога (а предыдуший возвращал список диалогов в месте с сообщениями).

    Хештеги: (Написал для поиска по словам)

    vk vk-api vkontakte vkontakte-api вк вконтакте метод message.get метод messages.getConversations ошибка 100 параметры бот чат-бот бот для вк чат-бот для вк python python 3 python.3-x

    Ответы (1 шт):

    Метод message.get устарел и возможно был заблокирован (а если ещё нет, все равно в не рекомендуется использовать). Вместо него лучше использовать сочетание методов messages.getConversations и messages.getHistory . 1 метод возвращает список диалогов(можно использовать фильтры), 2 возвращает сообщения диалога по его id. Для наглядности выполним следующий код:

    VK = vk_api.VkApi(token = ТОКЕН_ДОСТУПА) # ТОКЕН_ДОСТУПА = ‘ae4919g789965bf10. ‘ — токен доступа к сообществу print(VK.method(«messages.getConversations», )) #Метод, который собирает новые диалоги с неотвеченными сообщениями

    Результат (привел в читабельный вид):

    < ‘count’: 1, ‘items’: [< ‘conversation’: < ‘unanswered’: True, ‘peer’: < ‘local_id’: *айди собеседника или беседы*, ‘type’: ‘user’, ‘id’: *ID собеседника*, >’last_message_id’: 312, ‘in_read’: 312, ‘out_read’: 312, ‘can_write’: >, ‘last_message’: < ‘is_hidden’: False, ‘id’: 312, ‘conversation_message_id’: 312, ‘from_id’: *айди автора последнего сообщения*, ‘date’: 1531127807, ‘important’: False, ‘attachments’: [], ‘text’: *Текст последнего сообщения*, ‘out’: 0, ‘peer_id’: *айди диалога*, ‘random_id’: 0, ‘fwd_messages’: [] >>] >

    На самом деле, метод messages.getConversations дает достаточно много, помимо последнего сообщения.

    В нашем случае нам нужен параметр ‘peer_id’ — ID диалога. Кстати, хотел сказать, что в примере только 1 диалог, но их может быть и больше. По этому, мы будем постоянно пользоваться циклом for чтобы последовательно отвечать на сообщения разных диалогов. Теперь вместе с этим методом используем messages.getHistory :

    VK = vk_api.VkApi(token = ТОКЕН_ДОСТУПА) Диалоги_Бота = VK.method(«messages.getConversations», ) for Данные_о_диалоге in Диалоги_Бота[‘items’]: ID_Диалога = Данные_о_диалоге[‘conversation’][‘peer’][‘local_id’] print(VK.method(‘messages.getHistory’, ))

    И вот мы вывели на экран списки сообщений из каждого диалога. Далее, вместо того, чтобы выводить сообщения в консоль мы можем отвечать на них, удалять их, пересылать, записывать и т.д. Таким образом мы смогли заменить старый метод сочетанием 2-х новых.

    Источник: husl.ru

Рейтинг
( Пока оценок нет )
Загрузка ...