Форум сайта python.su
Я работаю над скриптом, который скачивает фото и видео, а также текст нескольких постов телеграм-канала. Задача состоит в том, чтобы для каждого сообщения создать отдельную папку (в качестве имени - id сообщения), и в эту папку скачать медиафайлы сообщения, а также сохранить текст. И так для каждого сообщения. Все происходит в цикле с заданным лимитом. Скрипт работает корректно, если у каждого сообщения только по одному фото или видео. Однако если в каком-то или во всех сообщениях по несколько медиафайлов, то процесс сбивается. Папки создаются, но фото скачиваются поодиночке и не в свои папки. Также и текст сохраняется только в некоторых папках. Даже не знаю, где может быть моя ошибка - в методах библиотеки pyrogram, или нужно вызвать методы самого telegram API, или ошибка в коде самого python. Я не программист python и не до конца понимаю, как в нем работает асинхронность. Подскажите пожалуйста, как модифицировать код, чтобы он корректно скачивал данные. То есть, в каждой созданной папке сохранялся текст сообщения, и все его медиа-файлы. или один. Для примера я привел телеграм-канал, где многие посты содержат по несколько фото. Буду весьма признателен за вашу помощь. Вот код:
import os from pyrogram import Client api_id = api_id api_hash = "api_hash" channel_name = 'wondermoscow' docs_limit = 3 # init app app = Client("my_name", api_id=api_id, api_hash=api_hash) async def main(): # check directory exists/create if not os.path.isdir(channel_name): os.mkdir(channel_name) await app.start() chat = await app.get_chat(channel_name) async for message in app.get_chat_history(chat.id, limit=docs_limit): doc_folder = os.path.join(channel_name, str(message.id)) os.mkdir(doc_folder) if(message.photo or message.video): await app.download_media(message) # copy downloaded content await move_files('downloads',doc_folder) text = str(message.caption) with open(os.path.join(doc_folder,'data.txt'), 'w', encoding='utf-8') as file: file.write(text) # move files drim one directory to another async def move_files(src,dest): # gather all files allfiles = os.listdir(src) # iterate on all files to move them to destination folder for f in allfiles: src_path = os.path.join(src, f) dst_path = os.path.join(dest, f) os.rename(src_path, dst_path) app.run(main())
Офлайн
Проблема решена.
Офлайн
kitenНу это всё не так делается, как у тебя написано.
Я работаю над скриптом, который скачивает фото и видео, а также текст нескольких постов телеграм-канала. Задача состоит в том, чтобы для каждого сообщения создать отдельную папку (в качестве имени - id сообщения), и в эту папку скачать медиафайлы сообщения, а также сохранить текст. И так для каждого сообщения. Все происходит в цикле с заданным лимитом.
Отредактировано py.user.next (Сен. 8, 2023 15:03:55)
Онлайн