簡體   English   中英

報廢電報組中的消息時出錯

[英]Error while Scrapping messages from a Telegram group

我正在使用以下代碼從電報組中刪除消息,但出現錯誤; 請指導我如何解決這個問題或提出任何其他有效的解決方案。

RuntimeError:如果事件循環正在運行,則必須使用“async with”(即您在“async def”中)

代碼:

from telethon.sync import TelegramClient
import datetime
import pandas as pd


import configparser
config = configparser.ConfigParser()
config.read("telethon.config")

api_id = config["telethon_credentials"]["api_id"]
api_hash = config["telethon_credentials"]["api_hash"]

chats = ['cryptodubai7']


client =  TelegramClient('test', api_id, api_hash)


df = pd.DataFrame()


for chat in chats:
    with TelegramClient('test', api_id, api_hash) as client:
        for message in client.iter_messages(chat, offset_date=datetime.date.today() , reverse=True):
            print(message)
            data = { "group" : chat, "sender" : message.sender_id, "text" : message.text, "date" : message.date}

            temp_df = pd.DataFrame(data, index=[1])
            df = df.append(temp_df)

df['date'] = df['date'].dt.tz_localize(None)
  • 您正在創建 2 個TelegramClient ,似乎不需要
  • 你需要client.start()
  • 就像錯誤提示一樣,您需要使用async
  • 還需要await來檢索消息
  • 我建議使用事件循環,例如asyncio

這樣的事情應該讓你朝着正確的方向前進:
未經測試!

from telethon.sync import TelegramClient
import datetime
import pandas as pd
import asyncio

import configparser
config = configparser.ConfigParser()
config.read("telethon.config")

api_id = config["telethon_credentials"]["api_id"]
api_hash = config["telethon_credentials"]["api_hash"]

chats = ['cryptodubai7']

client =  TelegramClient('test', api_id, api_hash)
client.start()

async def main():

    df = pd.DataFrame()

    for chat in chats:
        
        messages = await client.iter_messages(chat, offset_date=datetime.date.today() , reverse=True)
        for message in messages:
            print(message)
            data = { "group" : chat, "sender" : message.sender_id, "text" : message.text, "date" : message.date}

            temp_df = pd.DataFrame(data, index=[1])
            df = df.append(temp_df)

    df['date'] = df['date'].dt.tz_localize(None)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM