ссылка на обработчик api на вашем домене выдающий бонусы за голоса игроков
Ссылка на обработчик api на вашем домене выдающий бонусы за голоса игроков
Чтобы обратиться к методу API ВКонтакте, Вам необходимо выполнить POST или GET запрос такого вида:
Например, вызовем метод users.get для пользователя с идентификатором 210700286:
К методам API ВКонтакте (за исключением методов из секций secure и ads) с ключом доступа пользователя можно обращаться не чаще 3 раз в секунду. Для ключа доступа сообщества ограничение составляет 20 запросов в секунду. Если логика Вашего приложения подразумевает вызов нескольких методов подряд, имеет смысл обратить внимание на метод execute. Он позволяет совершить до 25 обращений к разным методам в рамках одного запроса.
Для методов секции ads действуют собственные ограничения, ознакомиться с ними Вы можете на этой странице.
Максимальное число обращений к методам секции secure зависит от числа пользователей, установивших приложение. Если приложение установило меньше 10 000 человек, то можно совершать 5 запросов в секунду, до 100 000 — 8 запросов, до 1 000 000 — 20 запросов, больше 1 млн. — 35 запросов в секунду.
Если Вы превысите частотное ограничение, сервер вернет ошибку с кодом 6: «Too many requests per second.».
Помимо ограничений на частоту обращений, существуют и количественные ограничения на вызов однотипных методов. По понятным причинам, мы не предоставляем информацию о точных лимитах.
После превышения количественного лимита доступ к конкретному методу может требовать ввода капчи (см. captcha_error), а также может быть временно ограничен (в таком случае сервер не возвращает ответ на вызов конкретного метода, но без проблем обрабатывает любые другие запросы).
Запросы к API ВКонтакте могут быть выполнены из браузера со страниц сторонних сайтов или IFrame приложений.
Чтобы осуществлять кроссдоменные запросы к API, Вы можете использовать протокол JSONP. Для этого необходимо подключать к документу скрипт с адресом запроса в src. Запрос должен содержать дополнительный параметр callback c именем функции, которая будет вызвана при получении результата.
Правильный подход к использованию API Вконтакте
В своё время, бороздя просторы интернета на предмет рационального использования API Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.
Так уж сложилось, что API Вк, реализован довольно хорошо, за исключением некоторых не логичных моментов, о которых я упомяну позднее. Но речь, сегодня не о качестве, а о конкретном применении.
Сразу необходимо сделать оговорку, помимо описания, я буду приводить куски рабочего кода к моей библиотеке, ссылку на которую я приведу в конце статьи. Библиотека работает на последней стабильной версии 5.5, если вырезать генераторы из пакетного получения, то должно работать на 5.4.
Пример кода, с помощью которого можно провернуть это не хитрое дело.
С момента, когда мы имеем ключ доступа, мы можем выполнять запросы к API. Общая логика запросов проста, вы передаёте специально сформированный запрос на URL API. Запрос должен содержать, название метода и аргументы.
Список методов, это одна из богатых вещей API. В нём вы можете встретить методы, которые не требуют ключ доступа для своей работы, следовательно вызывать их вы можете, не получая его.
При использовании библиотеки нам необходимо создать базовый объект, например так:
Пара примеров запросов с использованием библиотеки:
Через анонимную функцию в each, пройдёт ровно 100 объектов, содержащих данные о пользователях от 1 до 100. Заметьте, если мы уберём вызов функции, то не произойдёт никакого запроса, всё потому что вернётся объект, у которого переопределены магические методы __call и __get, что позволяет нам делать запрос, когда нам это действительно необходимо.
Одна из вещей, что открывает, нам использование генераторов — пакетное получение. То есть, мы получаем данные только тогда, когда они нам нужны. Следующий пример, позволит нам получить ВСЕ наши сообщения, запросами по 100. Будьте внимательны, метод требует от вас прав для messages, Standalone приложения, такой-же авторизации и соответственно передачи ключа доступа.
Хороший метод, который можно отыскать в API — execute. Он принимает параметр code в качестве аргумента, code — некий псевдо JavaScript, который позволяет нам выполнять наш код на стороне сервера, так-же он позволяет выполнять хранимые процедуры, которые мы можем создать при редактировании нашего приложения.
Эту вещь я не смог обойти стороной и реализовал её в библиотеке. В двух словах, она позволяет выполнить несколько запросов, как один. Смотрите следующий пример кода.
Как и обещал, одно из тех недоразумений, которое вы можете встретить в текущей версии API(5.21), метод users.get вернёт нам response, как массив, хотя в других местах, например friends.get, начиная с версии номер 5, нам возвращаются поля count и items, мне кажется это не совсем логичным, к тому же это требует лишнего кода при работе с API.
Так-же в библиотеке реализованы обработчики для некоторых операций, с вашей помощью их может стать больше.
С использованием библиотеки мы можем добиться довольно приятного и красивого кода, а это, самое важное в нашем не лёгком деле.
Вполне вероятно, что в коде остались какие-то недоразумения или баги, надеюсь на вашу внимательность и Pull Requests приветствуются.
Библиотека в большинстве своём отвечает стандарту PSR-0.
Надеюсь, мне удалось показать вам, что API Вконтакте не страшно, а даже приятно.
Благодарю за внимание!
UPDATE:
Можно установить через Composer: composer require «getjump/vk:*»
UPDATE 2:
Теперь минимальная версия 5.4, теоретически(по идее не используется большинство его функционала) может завестись и на 5.3, если не использовать короткий синтаксис для массивов.
API ВКонтакте для Python
Всем привет! Сегодня я расскажу вам немного о Пайтоновском API для соц. сети ВКонтакте.
Пост предназначен в первую очередь для школьников начинающих разработчиков, которые хотят сделать простейшее приложение.
Поскольку я сама не особо сильна в Пайтоне, о различных аспектах этого прекраснейшего языка (ООП, функциональное программирование и т.д.) я умолчу.
Пайтоновскую виртуальную машину под винду вместе с небогатой средой разработки IDLE можно скачать здесь.
Не советую качать версию 3.5, ибо под ней некоторые модули (ещё не обновившиеся) могут не работать.
И если вы только начинаете знакомиться с этим языком, не советую также качать версии ниже третьей.
Если вы юзаете UNIX то должны сами знать где гуглить. Под Убунтой просто обновитесь (типа sudo apt-get update).
Также рекомендую поставить pip под вашу версию языка.
В командной строке или терминале введите pip install vk (pip3 install vk)
Или можете воспользоваться этой ссылкой.
Также присутствует документация с примерами.
Что надо сделать ВКонтакте?
Тыкаем там на кнопку «Создать приложение»
Вводим имя и нажимаем «Подключить приложение». Тип оставляем Standalone.
После создания приложения заходим в его настройки и копируем (запоминаем) его идентификатор, он нам позже пригодится. На скриншоте ID закрашен другим цветом.
Дополнительно можно также загрузить свою иконку, поменять имя и т.д.
Теперь самое интересное. Нужно получить токен авторизации.
В принципе, модуль vk вполне работает и без него. Некоторые методы могут быть вызваны вообще без авторизации на сайте. Кроме того, вы можете в самом приложении авторизоваться через свой логин и пароль (как показано в этом примере).
Прикол в том, что токен авторизации выдаётся конкретному приложению с конкретными правами доступа и конкретным ID. Т.е. в принципе, разрабу модуля он бесполезен.
А вот ваши данные авторизации могут быть вполне полезны. Потому я считаю что лучше юзать токен. По крайней мере, если у вас возникнут какие-то подозрения, не придётся менять пароль и засвеченную почту (номер телефона).
Ещё одним плюсом токена для параноиков является то, что он может быть выдан на определённый срок. В общем, юзайте лучше токены. Это немного сложнее, но безопаснее.
Как получить токен авторизации для Standalone-приложения описано здесь. Вам (или пользователю приложения) нужно перейти по ссылке определённого вида, авторизоваться ВКонтакте (если вы это ещё не сделали), в открывшемся фрейме внимательно прочесть какие разрешения запрашивает приложение, выдать приложению доступ, и из перенаправленной ссылки вытащить токен авторизации.
Это запрос к сайту на выдачу токена авторизации для нашего Standalone-приложения. Разберём подробнее.
После того, как юзер даст приложению доступ со страницы ВК, его перебросит на пустую страницу с URL вида
С некоторыми дополнительными параметрами. Для авторизации приложению необходим токен, стоящий в параметре access_token. Вам необходимо его вытащить.
После этого необходимо авторизоваться в самой программе. На сайте разработчика модуля приводится такой простой пример:
После этого у объекта api вы можете вызывать все методы, перечисленные на этой странице.
К примеру, написание первого поста:
api.wall.post(message = ‘Hello, World!’)
Приведёт к появлению на вашей стене текстового поста.
Лирическое отступление относительно токенов и добросовестности
Как видите, процедура получения токена довольно проста, а его наличие даёт практически неограниченный контроль над страницей пользователя (практически такой же, как и с веб-интерфейса).
Естественно, это накладывает определённые требования к добросовестности пользователей. Любой из вас может обмануть доверчивого друга или соседа, прислав ему ссылку и попросив скопировать ответ (хотя на странице-редиректе и стоит напоминание о том, что ссылку с токеном нельзя никому присылать) либо получив на короткое время доступ к незапароленному компьютеру.
Притом после получения токена с неограниченным сроком годности, его можно использовать для скрытого чтения чужих сообщений, накрутки лайков, общения в соцсети от чужого имени и прочих противоправных действий.
Я искренне надеюсь что вы не станете так делать.
Написание простейшей программы с использованием API
Давайте напишем какую-нибудь полезную программу, использующую API ВКонтакте.
Вот пример такой программы, предназначенной для своевременного получения обновлений сообщений (к сожалению, после сохранения поста всё форматирование пропадает, потому вместо символов табуляции я буду использовать escape-последовательность \t):
def searchForUser(user_list, ID):
\tfor user in user_list:
\t\tif type(user) is int:
\t\t\treturn user[‘first_name’] + ‘ ‘ + user[‘last_name’] + ‘\n’
\tfor message in message_list:
\t\tif type(message) is int:
\t\t\tif ‘chat_id’ not in message:
\tuser_list = api.users.get(user_ids = ‘,’.join(IDS))
\tfor message in message_list:
\t\tif type(message) is int:
\t\tif message[‘read_state’] == 0:
\t\t\tif ‘chat_id’ not in message:
\t\t\t\ttext = text + searchForUser(user_list, message[‘uid’]) + message[‘body’] + ‘\n’
\t\t\t\ttext = text + ‘Сообщение из чата\n’ + message[‘body’] + ‘\n’
\tmessage = api.messages.get(time_offset = 0)
\t\tprint(‘No new messages!’)
\t\tSendEmail.sendEMail(‘No new messages!’)
Разберём построчно что делает этот код.
Функция searchForUser(user_list, ID) ищет пользователя по его ID в списке user_list объектов user. Когда она его находит, то возвращает строку с именем и фамилией юзера. Проверка на тип сделана т.к. API ВКонтакте частенько возвращает первым элементом списка объектов длину этого списка.
Фунция checkMessages(message_list) просматривает список сообщений (опять же, пропуская элемент списка, содержащий число сообщений в списке) и формирует список из ID тех юзеров, сообщения которых ещё не прочитаны. Далее по этому списку ID у API запрашивается список юзеров. И наконец потом формируется единая строка, в которой через строчку указан отправитель (полученный функцией searchForUser(user_list, ID)) и текст его сообщения.
Если сообщение был отправлено из чата, то это дополнительно указывается.
И наконец основная часть программы. Сначала мы авторизуемся (токен можно записать прямо в Пайтоновский файл либо читать из текстового файла), затем в бесконечном цикле делаем следующее:
1) Проверяем, есть ли сообщения и прочтено ли последнее сообщение
2) Если есть, то вытаскиваем функцией checkMessages(message_list) строку вида
Сообщение от юзера 1
Сообщение от юзера 2
Другой Юзер Юзеров
Сообщение от юзера 1
И отправляем её себе на Email функцией SendEmail.sendEMail(text). Вместо отправки на почту можно выводить сообщение в консоль или записывать в файл.
2а) Если сообщений не было, то отправляем уведомление об этом (его цель, в основном, дать вам понять что программа не вылетела из-за какого-нибудь эксепшена).
3) Вызовом time.sleep(600) ждём ещё 10 минут.
Естественно, эта простенькая программа не является верхом совершенства. Изредка вызов API может приводить к поднятию эксепшена, что в данном случае попросту валит всю программу. Кроме того, приложение никак не запоминает что оно уже отправило вам уведомление о неких сообщениях, т.е. если вы не прочтёте новые сообщения, оно вас снова уведомит. И снова. И так до тех пор, пока в очередном вызове не вылетит эксепшен.
Если вы планируете писать своё приложение, обращайте также внимание на ограничения по частоте запросов к API (в конце страницы).
Всем спасибо за внимание, до новых встреч!
Найдены возможные дубликаты
Хотел бы поделиться более удобной библиотекой для vk на python.
Это улучшенный fork той библиотеки что описывается в статье, где решены вопросы код дизайна, внесено множество исправлений, добавлено несколько дополнительных вкусных фич и упрощена работа в целом. Welcome =)
Круть, спасибо, обязательно посмотрю!
Привет, можешь мне немного скрипт с vk api поправить? сделать постраничную пагинацию с помощью offset. Я сам в такое не смогу)
«Для авторизации приложению необходим токен, стоящий в параметре access_token. Вам необходимо его вытащить.»
Извиняюсь за глупый вопрос, но как вытащить токен? Я просто из деревни
Нужно сделать запрос, с нужными тебе параметрами, а он вернёт тебе access_token. Что-то типа такого:
Дальше гугл в официальные доки в помощь.
Если в 2018+ ты на этой странице, то вся информация устарела.
Спасибо) А на чем сейчас работают?
Спасибо, отличная статья. Как раз пишу бота на питоне
Была подобная идея и для Spring’a сделать, тоже в виде API. Но все никак руки не доходят(((
пожалуйста. кто нибудь помогите написать прогу на питоне для вк! буду крайне признателен вам и благодарен. https://vk.com/id426829652( мой вк)
Чувак, ты с хабром не перепутал сайты?
Как раз на хабре ( http://habrahabr.ru/sandbox/84639/ ) статью и не пропустили)
Правда, туда писала не я.
вроде ж есть подписка на уведомления для сообщений?
Да, для девайсов на Android или iOs можно делать подписку на push-уведомления.
А ты программист на питоне?
Зрители в Грозном освистали бойца Станислава Власенко после его победы над Хусейном Халиевым
Несмотря на lucky punch Хусейна в первом раунде, русский боец сумел одержать волевую победу. По реакции зрительского зала уже понятно, что бой проходил в Грозном.
«Ладно не шумите, мерседесов я у вас не прошу» =).
Поздравляем Станислава Власенко с важной победой! Нужно отметить, что его соперник поступил по мужски, тоже поздравил Стаса с победой, в наше время это уже немало.
Не самая честная работа
10 лет отработал в СМИ, потом 2 года в букмекерской конторе. Пришел на собеседование в другую компанию, вроде все понравилось, потом просто немного поболтали. Один из собеседующих задал вопрос:
— А вот вы работали в букмекерской конторе, вас не смущает, что там все делается не самым честным путем?
Ржали всем собеседованием.
Когда спросил у жены, где деньги, которые были на карте
Добавить, честно говоря, нечего. Все кратко, ёмко и по существу. (с)
Была бы идеальная инструкция его не употреблять
С прицепом в комплекте
Детство
Не могу уснуть. То жарко, то холодно, то неудобно и тревожно. На часах 3 утра, подъем в 6. Надо бы уже спать.
Вдруг вспоминаю, как засыпала в детстве. 96-ой год, мне около четырёх лет. После развала СССР у нас в республике отключили отопление, а электричество и вода включались на несколько часов в день.
Я, дед, бабушка, мама и папа играем в лото под светом керосиновой лампы. Иногда дед, будучи электриком, умудрялся подключать нам свет. И мы завешивали окна одеялами, чтобы не спалили соседи, и смотрели телевизор. Эти дни мне нравились меньше, чем дни с лото. Потому что по телеку показывали скукоту.
Квартира отапливалась буржуйкой, стоящей на кухне. А так как спальня далеко, в ней всегда было холодно. И вот ты купаешься в тазике воды, которую чудом подогрели фиг пойми на чем, и надеваешь очень тёплую пижаму. А потом пару минут себя настраиваешь, чтобы нырнуть в постель. А там. Огромная подушка из пера, матрас из овчины, похожий на мягкое облачко, и тяжёлое, толстое одеяло. И все это вместе ледяное. Накрываешь себя с головой и усиленно дышишь, чтобы поскорее согреться. Уже через 10 минут лежишь в тёплой, мягкой постели, укутавшись по самую шею, и сладко сопишь.
Утром вставать ещё тяжелее, потому что буржуйка за ночь остыла, и из тёплого убежища вылезать не хочется. Но тут слышатся уверенные шаги деда, который спешит на кухню. Ты снова закрываешь глаза в полудреме, а через 30 минут просыпаешься от волшебного запаха картошки, приготовленной на буржуйке.
Дома тепло и уютно, дед берет тебя на колени, целует, и отправляет чистить зубы и умываться. Обычно он идёт следом, чтобы проверить, насколько хорошо ты это сделала.
Почему-то все хорошие воспоминания у меня связаны с дедом. Его уже много лет нет, и я очень прошу его присниться мне. Вот и в эту ночь просила, а он не приснился. Вспомню его хотя бы здесь.
Интеграция с ВКонтакте на базе Open API
Социальная сеть ВКонтакте предоставляет широкие возможности для интеграции со сторонними сайтами. В основном эти возможности представлены уже готовыми виджетами. Однако, есть еще и Open API, которое позволяет не только авторизовать пользователя, но и выполнить любой метод, доступный приложениям ВКонтакте (ВКонтакте API).
Попробуем создать небольшое приложение-игру, используя возможности Open API. Тренироваться будем на игре «Память», суть которой заключается в том, что надо очистить игровое поле, открывая по 2 одинаковых картинки. В качестве картинок будем использовать фотографии друзей игрока.
Приступаем к работе
Прежде всего необходимо создать новое приложение, указав его название и тип.
После этого переходим к настройкам приложения и указываем адрес сайта и базовый домен.
Реализация
Создадим HTML страницу, которая будет содержать несколько блоков:
Основная функциональность нашего приложения будет располагаться в файле general.js, поэтому перейдем к его рассмотрению.
Инициализация Open API
Важной частью скрипта является инициализация API, которая заключается в вызове метода VK.init, в который передается объект, содержащий минимум одно поле — apiId — ID приложения (он отображается на странице настроек приложения):
Авторизация
Для авторизации пользователя добавим обработчик для ссылки a#vk-login, который будет вызывать метод VK.Auth.login. Первым параметром передается callback-функция, а вторым — необходимые пользовательские настройки приложения, которые являются перечнем необходимых уровней доступа. В нашем случае необходим доступ только к списку друзей, поэтому обработчик для ссылки будет выглядеть так:
Завершение сеанса
Для того, чтобы пользователь мог завершить сессию, добавим обработчик для ссылки a#vk-logout, который будет вызывать метод VK.Auth.logout. Первым параметром передается callback-функция, которая в нашем случае будет обновлять страницу:
Отслеживание событий
Для того, чтобы перейти к игре (в нашем случае это заключается в обновлении страницы) после того как пользователь прошел авторизацию, необходимо подписаться на событие auth.login. Также подпишемся на событие auth.sessionChange, оно будет генерироваться, когда изменяются данные, связанные с авторизацией пользователя. Это необходимо для того, чтобы перейти к игре в том случае, если пользователь уже авторизирован ранее и только подтверждает доступ к списку друзей. Для добавления обработчика события необходимо вызвать метод VK.Observer.subscribe, который принимает два параметра — событие, на которое необходимо подписаться, и callback-функцию — обработчик события:
Метод refreshPage обновляет страницу, если пользователь не был ранее успешно авторизован:
Сбор начальных данных
Для проверки текущего статуса пользователя существует метод VK.Auth.getLoginStatus. Задействуем его, чтобы определить, авторизирован ли пользователь, и скрыть/показать необходимые из описанных выше блоков. Также, если пользователь уже авторизирован, сразу перейдем к началу игру. В метод VK.Auth.getLoginStatus передается один параметр — callback-функция, в которую, в свою очередь, передается объект, содержащий сессионные данные пользователя:
Для вызова любого метода ВКонтакте API служит метод VK.Api.call, который принимает три параметра — название метода, объект, представляющий собой параметры, передаваемые в указанный метод, и callback-функцию, в которую будет передан результат вызова метода. Для получения списка друзей необходимо вызвать метод friends.get. Метод не имеет обязательных параметров и в случае вызова без параметров вернет список всех друзей. Поскольку нам нужны фотографии друзей пользователя, передадим в метод параметр fields со значением ‘photo_rec’, что соответствует квадратной фотографии со стороной 50 пикселей:
В случае возникновения ошибки, объект data будет содержать вложенный объект error, содержащий информацию об ошибке. Ошибка с кодом 7 говорит о том, что у приложения не хватает прав, то есть в нашем случае о том, что пользователь не разрешил доступ к списку друзей.
Если вызов метода завершен успешно, то объект data будет содержать поле response, которое является массивом объектов, каждый из которых представляет информацию об одном из друзей пользователя.
После того, как список друзей получен, отбираем из него тех, у кого задана фотография (то есть не является стандартной картинкой со знаком вопроса) и переходим к инициализации игры:
Подготовка игрового процесса
Необходимо учесть, что в нашей игре лучший результат — это меньший результат, поэтому в идеале описанный метод не совсем подходит для сохранения результатов, поскольку при достижении максимально возможного количества рекордов, лучшие результаты будут вытеснены худшими.
Список чемпионов
Для получения таблицы рекордов используется метод getHighScores, который не имеет параметров. Метод возвращает массив объектов, каждый из которых содержит информацию о пользователе и его рекорд.
Чтобы пользователь мог посмотреть таблицу рекордов, добавим обработчик ссылки a#game-scores, который будет вызывать указанный выше метод, формировать таблицу результатов и показывать ее в диалоговом окне:
Как видно из кода обработчика, каждая новая строка таблицы добавляется перед предыдущей, что связано с описанной выше особенностью результатов игры.
Результат
Итоговый файл general.js можно посмотреть здесь, сама игра доступна по ссылке VK Memory.
Для создания приложения были использованы плагины для jQuery Pines Notify и BlockUI. Всю информацию об API ВКонтакте можно получить на странице для разработчиков.