Как можно загрузить несколько фотографий на платформу Telegraph?

У меня есть бот, который принимает посты с фотографиями и текстом. Основная функция бота заключается в том, что он загружает каждую фотографию на платформу Telegraph и отправляет пользователю ссылку на загруженное изображение. <br/> <br/> Вот код функции: <br/> <br/> <pre><code class="python">user_data = {}
media_groups = {}
# Переменная для хранения фото из пересланных сообщений

user_data = {}

# Функция загрузки на Telegraph
# Функция загрузки изображения на Telegraph
async def upload_to_telegraph(photo_path):
    try:
        # Загружаем файл и выводим ответ для отладки
        response = upload_file(photo_path)
        print(f"Ответ от Telegraph: {response}")

        # Проверяем, что это список и он содержит хотя бы одну строку
        if isinstance(response, list) and len(response) &gt; 0:
            return f"https://telegra.ph{response[0]}"
        else:
            print(f"Unexpected response format: {response}")
            return None
    except Exception as e:
        print(f"Error uploading to Telegraph: {e}")
        return None

# Функция получения ссылки на изображение
async def get_image_link(photo_file_id):
    photo_path = f"photo_{photo_file_id}.jpg"

    # Скачиваем файл
    await bot.download_file_by_id(file_id=photo_file_id, destination=photo_path)

    # Загружаем на Telegraph и удаляем файл
    image_link = await upload_to_telegraph(photo_path)
    os.remove(photo_path)

    return image_link

# Функция формирования текста с ссылками
def get_message_text(links, text):
    text = text.replace('\n', ' ') if text else ""
    while text.count("  ") &gt; 0:
        text = text.replace("  ", " ")
    for link in links:
        text += f"\n{link}"
    text = f"{text}"
    return text


# Обработка сообщений
  • 15 сентября 2024 г. 16:23
Ответы на вопрос 2
Чтобы загрузить несколько фотографий на платформу Telegraph с помощью вашего бота, вам нужно немного изменить существующий код. Основная идея заключается в том, чтобы обрабатывать несколько фотографий, загружая каждую из них и собирая ссылки в список, а затем отправить пользователю окончательный текст с ссылками.

Вот как вы можете это сделать:

1. Создайте новую асинхронную функцию для загрузки списка фотографий.
2. Обработайте каждую фотографию в рамках этой функции, добавляя ссылки в список.
3. Обновите текст сообщения, чтобы включить все ссылки.

Вот пример кода:

```python
import os

user_data = {}
media_groups = {}

# Функция загрузки на Telegraph
async def upload_to_telegraph(photo_path):
    try:
        response = upload_file(photo_path)  # Предположим, что upload_file реализует нужный API
        print(f"Ответ от Telegraph: {response}")

        if isinstance(response, list) and len(response) > 0:
            return f"https://telegra.ph{response[0]}"
        else:
            print(f"Unexpected response format: {response}")
            return None
    except Exception as e:
        print(f"Error uploading to Telegraph: {e}")
        return None

# Функция получения ссылок на изображения
async def get_images_links(photo_file_ids):
    links = []
    for photo_file_id in photo_file_ids:
        photo_path = f"photo_{photo_file_id}.jpg"
        
        # Скачиваем файл
        await bot.download_file_by_id(file_id=photo_file_id, destination=photo_path)

        # Загружаем на Telegraph и удаляем файл
        image_link = await upload_to_telegraph(photo_path)
        os.remove(photo_path)

        if image_link:
            links.append(image_link)

    return links

# Функция формирования текста с ссылками
def get_message_text(links, text):
    text = text.replace('\n', ' ') if text else ""
    while text.count("  ") > 0:
        text = text.replace("  ", " ")
    for link in links:
        text += f"\n{link}"
    return text

# Обработка сообщений
async def handle_message(message):
    # Предполагаем, что message.media содержит список photo_file_ids
    photo_file_ids = [photo.file_id for photo in message.media]  # Извлечение file_id из сообщения
    text = message.text

    # Получаем ссылки на все изображения
    links = await get_images_links(photo_file_ids)

    # Формируем сообщение с текстом и ссылками
    final_text = get_message_text(links, text)

    # Отправляем сообщение пользователю
    await bot.send_message(chat_id=message.chat.id, text=final_text)
```

### Важные моменты:
- Обратите внимание на то, что функция `get_images_links` обрабатывает список `photo_file_ids`, загружая каждое изображение на Telegraph и собирая ссылки в список `links`.
- Функция `get_message_text` создает итоговое сообщение для пользователя, включая все ссылки.
- Убедитесь, что `upload_file` и другие функции библиотеки Telegram API реализованы правильно и работают с корректными параметрами.
Error uploading to Telegraph: 'str' object has no attribute 'get'
вот ты сделал перехват общего исключения, а traceback никуда не сохранил, теперь и гадай в чём проблема.
Похожие вопросы