@SwitcherN
Начинаю изучать python

Как получить file_id фотографий?

Скажу сразу - с it не связан, образование не профильное, пилю небольшой pet-проект после прочтения 1 книги и просмотра нескольких десятков видео + пару десятков заданий с chekio.org по Python. Можете прямо говорить где и в чем не прав, буду только рад!

Суть - небольшой телеграмм-бот, который принимает заказы и отправляет оператору. Есть фото блюд, сложенные аккуратно в папочку в директории проекта. Есть перечень блюд с описанием и путем к файлу с изображением блюда. Оформлено в виде словаря (config.menu).

По команде запускаем функцию, получаем id и сохраняем в .txt-файл в формате Название блюда \n File ID фотографии.

def photo_id(message):
    result = str()
    for i in config.menu:
        file = config.menu[i][1]
        photo = open(file, 'rb')
        msg = bot.send_photo(message.chat.id, photo, None)
        temp_file_id = bot.send_message(message.chat.id, msg.photo[0].file_id, reply_to_message_id=msg.message_id)
        temp_file_id = f'{temp_file_id}'
        index = temp_file_id.rfind(':')
        start = index + 3
        stop = index + 59
        temp_file_id = temp_file_id[start:stop]
        result += f'{i}\n{temp_file_id}\n\n'
    with open("File_ID.txt", "w") as file:
        file.write(result)


На мой взгляд выглядит не очень изящно. Есть ли вариант не переводить получаемое сообщение в строку и не искать rfind'ом начало file_id?

Дополнительный вопрос - при присваивании переменным msg и temp_file_id значений бот отправляет и сообщение, и фотографию. Есть ли способ не делать боту лишний движений?
  • Вопрос задан
  • 1347 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bbkmzzzz
Посмотрите в сторону библиотек сериализации. Например pickle или json.
Пример с json:
import json

    data = {
        'param1': 'val1',
        'param2': 10,
        'parm3': 11.54,
        'country': {
            'name': 'Russia',
            'cities': ['Moscow']
        }
    }
    print(data)
    serialized_to_string = json.dumps(data)  # сериализация с записью в строку
    print(serialized_to_string)
    with open('testfile.json', 'w') as fle:
        json.dump(data, fle) # сериализация с записью в файл
    #  ### читаем
    with open('testfile.json', 'r') as fle:
        loaded = json.load(fle)  #  чтение из файла
    print(loaded)
    loaded_from_string = json.loads(serialized_to_string) # из строки
    print(serialized_to_string)

Таким образом объект сохраняется в строку или файл, и загружается потом тоже объект.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы