Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Недавно увидел, как у одного пользователя в Телеге аватарка отображает текущее время. Решил, что хочу что-нибудь подобное, но делать такое в Телеге уже не интересно, пусть будет ВКонтакте.
Шаги:
Насколько знаю нельзя делать аватарку Вконтакте так, чтобы она двигалась сама. Поэтому будем каждую минуту удалять старую аватарку и загружать новую.
Для получения доступа к API ВК решил использовать библиотеку vk_api, к ней есть подробная документация и работать с ней приятно. Пора ее установить:
Авторизуемся через токен, так как метод для смены аватарки требует ключ доступа пользователя.
Устанавливаем стартовое время, может быть любое. Я выбрал полночь
После чего создаем цикл, который каждый раз будет получать текущее время и будет сравнивать его со стартовым, и если есть изменения делать определенные действия.
Для работы с графикой решил использовать библиотеку Pillow, уже имел опыт использования ее и поэтому не возникло трудностей со вставкой текста на картинку.
Устанавливаем:
Перед циклом задаем параметры для шрифта, положения и цвет текста на картинке.
Так же создам функцию для перевода времени в строку.
Уже в самом цикле создаем картинку с нынешним временем.
После того как создали картинку, нужно удалить старую аватарку из профиля. Загрузить новую, а также удалить запись со стены о том, что обновили главную страницу, чтобы сильно не палиться, что каждую минуту меняем картинку. И конце удаляем картинку из папки.
Готово. Запускаем и любуемся где-то час, а потом Вконтакте присылает нам капчу, которую пока бот не состоянии обработать, надеюсь в будущем смогу найти решения данной проблеме.
И все еще думаю на тем как сделать красивую аву, а не белый фон и цифры черными буквами, хоть и выглядит это довольно минималистично.
Шаги:
- Авторизация ВК из кода
- Получаем текущее время, если отличается от того, что на аватарке, меняем
- Создаем картинку с текущим временем
- Обновляем аватарку
Насколько знаю нельзя делать аватарку Вконтакте так, чтобы она двигалась сама. Поэтому будем каждую минуту удалять старую аватарку и загружать новую.
Авторизация ВК из кода
Для получения доступа к 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')
Готово. Запускаем и любуемся где-то час, а потом Вконтакте присылает нам капчу, которую пока бот не состоянии обработать, надеюсь в будущем смогу найти решения данной проблеме.
И все еще думаю на тем как сделать красивую аву, а не белый фон и цифры черными буквами, хоть и выглядит это довольно минималистично.