Закрыть

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

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Вы счастливы или несчастны не благодаря тому, что вы имеете, и не в связи с тем, кем являетесь, где находитесь или что делаете; ваше состояние определяется тем, что вы обо всем этом думаете.

Дейл Карнеги

Обработка кода ошибки 6 в Вконтакте - Слишком много запросов в секунду

10 апреля 2018 г. 6:26

При работе с API в Контакте можно встретить следующий ответ:

{'error': 'Too many requests per second',
 'error_code': 6}

Значение 6 ключа error_code говорит о том, что превышено допустимое количество обращений api в течение некоторого времени (обычно в течение секунды).

Обработать его можно достаточно легко, например:

import requests
import time


def get_vk_data(url, params):
    repeat = True
    while repeat:
        resp = requests.get(url, params=params)
        data = resp.json()

        if 'error' in data and 'error_code' in data['error'] and data['error']['error_code'] == 6:
            time.sleep(2)
        else:
            repeat = False

    return data

Другими словами, мы пытаемся получить ответ (в переменную data) до тех пор, пока либо не будет ошибки (покаdata не будет содержать ключ error), либо код ошибки будет отличный от 6.

 

В качестве примера приведу обновление (синхронизацию) информации пользователя ВК:

class VKUser(models.Model):
    vk_user_id = models.IntegerField(_('VK User ID'), null=True, blank=True)

    screen_name = models.CharField(_('Screen name'), max_length=100, blank=True)
    pic_url = models.URLField(_('Pic url'), blank=True, w=100, h=100)

    first_name = models.CharField(_('First name'), max_length=100)
    last_name = models.CharField(_('Last name'), max_length=100)

    def sync_data(self):
        get_user_url = api_vk_url('users.get')
        params = {
            'v': '3.0',
            'access_token': settings.ACCESS_TOKEN,
            'user_ids': self.vk_user_id,
            'fields': 'first_name, last_name, screen_name, photo_100',
        }

        data = get_vk_data(get_user_url, params)['response'][0]

        self.first_name = data['first_name']
        self.last_name = data['last_name']
        self.screen_name = data['screen_name'] if 'screen_name' in data else ''
        self.pic_url = data['photo_100']

        self.save()

Метод sync_data() обновляет поля: имя и фамилия пользователя, а также его аватар и короткое имя (screen_name).

Теперь этот код можно использовать так:

for vk_user in VKUser.objects.all():
    vk_user.sync_data()

для того, чтобы обновить информацию о всех пользователях.

 

На практике обновление информации о пользователях не вызывало ошибку с кодом 6 - видимо, это не такая тяжёлая операция.

Но когда мне нужно было синхронизировать товары с сайта в группы ВК, то такая ошибка вылетала.

Оцените статью

0 из 5 (всего 0 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/vk-error-6/:

Разрешается копировать статью с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.ru/it/vk-error-6/">http://vivazzi.ru/it/vk-error-6/</a>

Подробнее: Правила использования сайта

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

Комментариев: 0

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

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте