Превращаем аватарку ВКонтакте в часы

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Недавно увидел, как у одного пользователя в Телеге аватарка отображает текущее время. Решил, что хочу что-нибудь подобное, но делать такое в Телеге уже не интересно, пусть будет ВКонтакте.
Шаги:

  1. Авторизация ВК из кода
  2. Получаем текущее время, если отличается от того, что на аватарке, меняем
  3. Создаем картинку с текущим временем
  4. Обновляем аватарку

Насколько знаю нельзя делать аватарку Вконтакте так, чтобы она двигалась сама. Поэтому будем каждую минуту удалять старую аватарку и загружать новую.

Авторизация ВК из кода


Для получения доступа к API ВК решил использовать библиотеку vk_api, к ней есть подробная документация и работать с ней приятно. Пора ее установить:

pip3 install vk_api

Авторизуемся через токен, так как метод для смены аватарки требует ключ доступа пользователя.

vk_session = vk_api.VkApi(login = '#ваш логин(лучше всего использовать номер телефона',
                              token='#ваш токен')

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return

Получаем текущее время, если отличается от того, что на аватарке, меняем


Устанавливаем стартовое время, может быть любое. Я выбрал полночь

start_time = '00.00'

После чего создаем цикл, который каждый раз будет получать текущее время и будет сравнивать его со стартовым, и если есть изменения делать определенные действия.

start_time = '00.00'
    while True:
        dt = datetime.now()
        end_time = f"{dt.hour}:{dt.minute:02}"
        if start_time < end_time:

                #Присваиваем стартовому времени текущее время.
                start_time = end_time

Создаем картинку с текущим временем


Для работы с графикой решил использовать библиотеку Pillow, уже имел опыт использования ее и поэтому не возникло трудностей со вставкой текста на картинку.

Устанавливаем:

pip3 install Pillow

Перед циклом задаем параметры для шрифта, положения и цвет текста на картинке.

    #Указываем шрифт и размер (шрифт находится в текущей папке)
    font = ImageFont.truetype('acrom300.otf',70)

    # определяете положение текста на картинке
    text_position = (80, 120)

    # цвет текста, RGB
    text_color = (0,0,0)

   prev_update_time = ""

Так же создам функцию для перевода времени в строку.

  def convert_time_to_string(dt):
    return f"{dt.hour}:{dt.minute:02}"  

Уже в самом цикле создаем картинку с нынешним временем.

#создаем холст
            image = Image.new("RGB", (320,320), (255,255,255))
            
            draw = ImageDraw.Draw(image)
            # собственно, сам текст
            prev_update_time = convert_time_to_string(datetime.now())

            # добавляем текст
            draw.text(text_position, prev_update_time , text_color, font)

            # сохраняем новое изображение
            image.save('test.jpg')

После того как создали картинку, нужно удалить старую аватарку из профиля. Загрузить новую, а также удалить запись со стены о том, что обновили главную страницу, чтобы сильно не палиться, что каждую минуту меняем картинку. И конце удаляем картинку из папки.

# удаляем старую аватарку
            vk = vk_session.get_api()

            response_ph = vk.photos.get(count = 1, album_id = 'profile', rev = 1)

            if response_ph ['items']:
                ph_id = response_ph['items'][0]
                ph_response_delete = vk.photos.delete(photo_id = ph_id['id'])

            # загружаем новую.
            upload = vk_api.VkUpload(vk_session)
            photo = upload.photo_profile('test.jpg')

            response = vk.wall.get(count = 1)

            if response ['items']:
                post = response['items'][0]
                post_response_delete = vk.wall.delete(post_id = post['id'])
           
            # удаляем аватарку с компа
            os.remove('test.jpg')

Готово. Запускаем и любуемся где-то час, а потом Вконтакте присылает нам капчу, которую пока бот не состоянии обработать, надеюсь в будущем смогу найти решения данной проблеме.
И все еще думаю на тем как сделать красивую аву, а не белый фон и цифры черными буквами, хоть и выглядит это довольно минималистично.
Источник: https://habr.com/ru/post/675442/


Интересные статьи

Интересные статьи

Привет, мы команда СберМегаМаркета, и это обзорная статья о нашей площадке, пробный камень для блога Хабре. За нашими плечами спешный переезд с PHP на GO, ребрендинг и решение таких задач, с которыми ...
Рассказываем, как rdl by red_mad_robot помогли «Полиметаллу» решить проблему с анализом гранулометрического состава руды и определением негабарита при производстве золота.
Говоря о разработке сайтов с использованием CMS 1C Bitrix вопрос покрытия тестами поднимается редко. Главная причина в том, что большинство проектов обходится штатным функционалом, который предоставля...
На Хабре ни для кого не секрет, что в текущей повестке практически все сферы частного бизнеса вынуждены реагировать на происходящие изменения. Большое количество привычных всем нам зарубежных сервисов...