У меня есть код, который подключается к сессии телеграмм и парсит каналы указанные в url, после подключения к сессии тг начинается парсинг каналов, но тут вылазит ошибка:
Traceback (most recent call last):
File "F:\pythonProject\parcer_tg\parcer.py", line 48, in <module>
client.loop.run_until_complete(main(events))
File "C:\Users\Артём\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
return future.result()
File "F:\pythonProject\parcer_tg\parcer.py", line 38, in main
await parcer_functions.parse(client, url)
File "F:\pythonProject\parcer_tg\parcer_functions.py", line 60, in parse
channel_id = await get_channel_id(client, url) # получение ID канала
File "F:\pythonProject\parcer_tg\parcer_functions.py", line 9, in get_channel_id
m = await client.get_messages(link, limit=1)
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\client\messages.py", line 603, in get_messages
return await it.collect()
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\requestiter.py", line 113, in collect
async for message in self:
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\requestiter.py", line 58, in __anext__
if await self._init(**self.kwargs):
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\client\messages.py", line 27, in _init
self.entity = await self.client.get_input_entity(entity)
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\client\users.py", line 445, in get_input_entity
peer = utils.get_peer(peer)
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\utils.py", line 987, in get_peer
_raise_cast_fail(peer, 'Peer')
File "F:\pythonProject\parcer_tg\venv\lib\site-packages\telethon\utils.py", line 131, in _raise_cast_fail
raise TypeError('Cannot cast {} to any kind of {}.'.format(
TypeError: Cannot cast list to any kind of Peer.
Мой код:
import logging # стандартная библиотека для логирования
import parcer_functions # библиотека этого парсера
from telethon import TelegramClient, events, sync, connection # pip3 install telethon
from config import api_id, api_hash # получение айди и хэша нашего приложения из файла config.py
from loguru import logger
from telethon.tl.functions.channels import JoinChannelRequest
from asyncio import get_event_loop, sleep, gather, run
import asyncio
# настройка логгера
logging.basicConfig(
level=logging.INFO,
filename='parser_log.log',
filemode='w',
format="%(asctime)s %(levelname)s %(message)s"
)
logging.info("script started") # сообщение о начале работы в лог
url = ["XXXX"]
flag = True # флаг нужен для корректного логирования результата работы парсера (успешно/неуспешно)
client = TelegramClient('new', api_id, api_hash)
client.start()
@client.on(events.NewMessage(chats=url))
async def main(event):
async with client:
logger.info(f"коннект аккаунта")
logger.info(f"Запущен парсер групп - {url}")
for channel in url:
try:
await client(JoinChannelRequest(channel))
except:
print(f'Waiting for')
await parcer_functions.parse(client, url)
print(f"Сообщение было отправлено в канале")
err = event.text
print(err)
await client.run_until_disconnected()
with client:
client.loop.run_until_complete(main(events))