web-dev-qa-db-ja.com

Telegramでグループのチャット履歴をダウンロードするにはどうすればよいですか?

Telegramの公開グループに投稿されたチャット履歴(すべてのメッセージ)をダウンロードします。どうすればPythonでこれを行うことができますか?

APIでこのメソッドを見つけました https://core.telegram.org/method/messages.getHistory これは私がやろうとしているように見えると思います。しかし、実際にどのように呼び出すのですか? python使用するMTprotoプロトコルの例はないようです。

ボットAPIも調べましたが、メッセージをダウンロードする方法はないようです。

12
siamii

Telethon を使用できます。 Telegram APIはかなり複雑で、telethonを使用すると、APIについての予備知識がなくても、非常に短時間でTelegram APIの使用を開始できます。

pip install telethon

次に、アプリを登録します(telethonから取得): enter image description here

リンクは: https://my.telegram.org/

次に、グループのメッセージ履歴を取得するには(グループIDがあると仮定):

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の例 から取られ、簡略化されています。

10
apadana

更新(2018年8月)により、Telegram Desktopアプリケーションはチャット履歴の保存を非常に便利にサポートするようになりました。 jsonまたはhtml形式で保存できます。

この機能を使用するには、コンピューターにTelegram Desktopの最新バージョンがインストールされていることを確認してから、[設定]> [電報データのエクスポート]をクリックします。

https://telegram.org/blog/export-and-more

2
newsha

Telegram MTProtoは初心者には使いにくいので、telegram-cliをお勧めします。

third-partytg-export スクリプトを使用できますが、初心者にも簡単ではありません。

1
Sean

pythonにはテレポット( ここにドキュメント )を使用できます。例:

import telepot

token = 'your_token'
bot = telepot.Bot(token)
tmp_history = bot.getUpdates()
print(tmp_history['result'])

ただし、履歴読み取りで100レコードの制限で実行できます this それについて

0
Vadim