Skip to content
Anton Samarchyan edited this page Jun 26, 2022 · 1 revision

Temporary help script to update vk data of unsynchronized accounts. Useful only once.

from moviesapp.exceptions import VkCountryNotFoundError
from moviesapp.models import User, VkCountry
from moviesapp.vk import update_user_vk_avatar

def _get_country_from_vk_country_id(vk_country_id: int) -> str:
    """Get country from VK country ID."""
    vk_countries = VkCountry.objects.filter(pk=vk_country_id)
    if not vk_countries.exists():
        raise VkCountryNotFoundError(vk_country_id)
    vk_country: VkCountry = vk_countries.first()  # type: ignore
    country: str = vk_country.country
    return country

def update_user(vk_id, user_id):
  fields = ["country","screen_name","photo_100","photo_200",]
  data=vk.users.get(fields=fields, user_ids=vk_id)[0]
  print(data)
  if "deactivated" in data:
    return
  user_to_update=User.objects.get(pk=user_id)
  update_user_vk_avatar(user_to_update, data)
  if "country" in data:
    country = _get_country_from_vk_country_id(data["country"]["id"])
    user_to_update.country=country
  username=data['screen_name'].startswith('id')
  if not data['screen_name'].startswith('id'):
    user_to_update.username=data['screen_name']
  user_to_update.first_name=data['first_name']
  user_to_update.last_name=data['last_name']
  user_to_update.save()

vk_requester_user_id=15
user = User.objects.get(pk=vk_requester_user_id)
vk = user.get_vk()
vk = vk.vk

# user_id, vk_user_id
users_list=[
]
for user_id, vk_user_id in users_list:
  update_user(vk_user_id, user_id)

users_to_update = []
all_users=User.objects.all()
for u in all_users:
  if u.username.isnumeric():
    users_to_update.append((u.pk, f"id{u.username}"))

for user_id, vk_user_id in users_to_update:
  update_user(vk_user_id, user_id)
Clone this wiki locally