C贸digo para actualizar la foto de perfil de Vkontakte utilizando la API de VK. Considere trabajar con captcha y cargue el c贸digo en el servidor para actualizar autom谩ticamente la foto.

Bibliotecas requeridas
Instale la biblioteca vk_api para trabajar con la API de VK para Python: pip install vk_api
Ejemplo de trabajo de vk_api Importa las bibliotecas necesarias
import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve
Iniciar sesi贸n
Autorizaci贸n en VK usando API
vk_session = vk_api.VkApi('+7999132****', '*********') vk_session.auth() vk = vk_session.get_api()
Subir im谩genes
Suba im谩genes al servidor VKontakte.
photos.getOwnerPhotoUploadServer () devuelve la direcci贸n del servidor para cargar la foto principal en la p谩gina del usuario.
url = vk.photos.getOwnerPhotoUploadServer()['upload_url']
Para cargar la imagen en el servidor VKontakte, debe transferir el archivo a la direcci贸n upload_url obtenida en el p谩rrafo anterior generando una solicitud POST con el campo de foto.
Guarde el servidor y los valores hash. Los necesitar谩 para actualizar su foto de perfil.
server = request['server'] hash = request['hash']
Actualizaci贸n de foto de perfil
photos.saveOwnerPhoto () guarda la foto del usuario.
Despu茅s de actualizar la foto, se agrega una publicaci贸n con esta foto al muro. Si no elimina estas publicaciones, el feed de amigos se obstruir谩 con publicaciones sobre la actualizaci贸n de su avatar.
posts = vk.wall.get() post_id = posts["items"][0]["id"] vk.wall.delete(post_id = post_id)
Si ejecutamos el c贸digo, la foto de nuestro perfil se actualizar谩.
Para la automatizaci贸n, solo agregue un bucle sin fin y haga un minuto de retraso despu茅s de cada actualizaci贸n de fotos.
y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x
C贸digo completo import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve vk_session = vk_api.VkApi('+7999132****', '***********') vk_session.auth() vk = vk_session.get_api() images = os.listdir("images") url = vk.photos.getOwnerPhotoUploadServer()['upload_url'] photo = [] for image in images: request = requests.post(url, files={'photo': open('images/'+image, 'rb')}).json() photo.append(request['photo']) server = request['server'] hash = request['hash'] y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x]) posts = vk.wall.get() post_id = posts["items"][0]["id"] vk.wall.delete(post_id = post_id) photos = vk.photos.getAll() if (photos['count']>1): photo_id = photos["items"][1]["id"] vk.photos.delete(photo_id = photo_id) time.sleep(60)
Pero despu茅s de unas pocas docenas de actualizaciones de fotos de perfil, se producir谩 un error
Captcha: se necesita Captcha
Veamos c贸mo trabajar con captcha en VK API.
Trabajar con captcha
El m茅todo vk_api.VkApi () ya ha implementado el trabajo con captcha. Adem谩s del inicio de sesi贸n y la contrase帽a, es necesario transferir la funci贸n de procesamiento captcha captcha_handler.
Cambiar vk_session
vk_session = vk_api.VkApi('+7999132****', '**********', captcha_handler=captcha_handler)
Agregamos la funci贸n captcha_handler (captcha), que toma la direcci贸n captcha, env铆a la imagen captcha a los mensajes del usuario y espera el captcha del usuario.
def captcha_handler(captcha):
Funci贸n para enviar mensajes con una imagen captcha al usuario.
El usuario no puede acceder a los m茅todos de mensaje desde el servidor, por lo que debe crear un grupo y obtener un token.
- Crear un grupo / p谩gina p煤blica
- Gesti贸n => Trabajar con API => Crear una clave
- Elegir:
- Permitir que la aplicaci贸n acceda a mensajes de la comunidad
- Permitir el acceso de la aplicaci贸n a las fotos de la comunidad.
- Copia la llave
Tambi茅n debe habilitar Mensajes en la configuraci贸n del grupo (Control => Mensajes) y habilitar mensajes (en el men煤 del grupo)
def send_captcha(captcha_url):
Si ejecutamos el c贸digo, se ejecutar谩 hasta que interrumpamos su trabajo. Cuando sea necesario ingresar captcha, la imagen captcha se enviar谩 a mensajes privados y despu茅s de enviar caracteres de la imagen, continuar谩 actualizando la foto de perfil.
C贸digo completo import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve def captcha_handler(captcha): captcha_url = captcha.get_url() urlretrieve(captcha_url, "captcha.jpg") key = send_captcha(captcha_url) print(key) return captcha.try_again(key) def send_captcha(captcha_url): token = "" vk_session = vk_api.VkApi(token = token) vk = vk_session.get_api() url = vk.photos.getMessagesUploadServer()['upload_url'] request = requests.post(url, files={'photo': open("captcha.jpg", 'rb')}).json() photo = vk.photos.saveMessagesPhoto(server=request['server'], photo = request['photo'], hash = request['hash']) attachment = 'photo{}_{}'.format(photo[0]['owner_id'], photo[0]['id']) vk.messages.send( user_id=_ID, attachment = attachment, random_id=get_random_id()) os.remove("captcha.jpg") key = '' while (key == ''): messages = vk.messages.getDialogs()['items'][0] if 'attachments' not in messages['message'].keys(): key = messages['message']['body'] return key vk_session = vk_api.VkApi('+7999132****', '*********', captcha_handler=captcha_handler) vk_session.auth() vk = vk_session.get_api() images = os.listdir("images") url = vk.photos.getOwnerPhotoUploadServer()['upload_url'] photo = [] for image in images: request = requests.post(url, files={'photo': open('images/'+image, 'rb')}).json() photo.append(request['photo']) server = request['server'] hash = request['hash'] y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x]) posts = vk.wall.get() post_id = posts["items"][0]["id"] vk.wall.delete(post_id = post_id) photos = vk.photos.getAll() if (photos['count']>1): photo_id = photos["items"][1]["id"] vk.photos.delete(photo_id = photo_id) print("Successfully", x) time.sleep(60)
Para la ejecuci贸n de c贸digo las 24 horas, uso el alojamiento VPS. Cargo im谩genes y ejecuto el c贸digo en el servidor.
C贸digo de Github
Si tiene preguntas, escriba en los comentarios o en el PM.