Обработка кода ошибки 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 - видимо, это не такая тяжёлая операция.

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

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

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

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

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

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/vk-error-6/:

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

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

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

Для тех, кто продаёт через свой профиль в соц. сетях: моя сестра, Анастасия Мальцева запустила свой курс: «Комфортные продажи через контент»

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

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

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

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

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

Попробуйте

Выберите валюту для отображения денежных единиц