{"id":15171722,"url":"https://github.com/oncecreated/cleverapi","last_synced_at":"2025-10-01T06:32:04.738Z","repository":{"id":62562569,"uuid":"139057119","full_name":"oncecreated/cleverapi","owner":"oncecreated","description":"Python API для игры Клевер от ВКонтакте / Python API for quiz game Clever","archived":true,"fork":false,"pushed_at":"2018-12-28T06:18:45.000Z","size":68,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-01-18T00:51:56.744Z","etag":null,"topics":["asynchronous","clever","cleverapi","python","third-party-api","vk","vkontakte"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oncecreated.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-28T18:54:50.000Z","updated_at":"2023-01-28T18:34:47.000Z","dependencies_parsed_at":"2022-11-03T15:17:49.149Z","dependency_job_id":null,"html_url":"https://github.com/oncecreated/cleverapi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oncecreated%2Fcleverapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oncecreated%2Fcleverapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oncecreated%2Fcleverapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oncecreated%2Fcleverapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oncecreated","download_url":"https://codeload.github.com/oncecreated/cleverapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234837110,"owners_count":18894541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","clever","cleverapi","python","third-party-api","vk","vkontakte"],"created_at":"2024-09-27T09:02:39.900Z","updated_at":"2025-10-01T06:32:04.450Z","avatar_url":"https://github.com/oncecreated.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Clever API**\nБиблиотека созданная для удобного взаимодействия с API мобильного приложения Клевер, разрабатываемого во ВКонтакте.\n\n## Навигация\n- [Установка](#Установка)\n- [Использование](#Использование)\n- [Получение токена](#Получение-токена)\n- [Обработчики](#Обработчики)\n- [Действия](#Действия)\n- [Отправка ответа](#Отправка-ответа)\n- [Бамп](#Бамп)\n- [События](#События)\n    - [sq_game_winners](#sq_game_winners)\n    - [sq_friend_answer](#sq_friend_answer)\n    - [sq_question](#sq_question)\n    - [sq_ed_game](#sq_ed_game)\n    - [sq_question_answers_right](#sq_question_answers_right)\n    - [video_comment_new](#video_comment_new)\n- [Примеры](#Примеры)\n\n## Установка\nПротестирована работа с Python 3.6.\n\n* Установка с помощью pip (пакетный менеджер Python):\n```\n$ pip install cleverapi --upgrade\n```\n* Установка из исходного кода (требуется git)\n```\n$ git clone https://github.com/oncecreated/cleverapi.git\n$ cd cleverapi\n$ python setup.py install\n```\n\n## Использование\nВывод текста вопроса из онлайн викторины:\n\n```python\nfrom cleverapi import CleverApi, CleverLongPoll\n\napi = CleverApi(\"TOKEN\")\nlp = CleverLongPoll(api)\n\n@lp.question_handler()\ndef new_question(event):\n    print(event[\"question\"][\"text\"])\n\nlp.game_waiting()\n```\nГлавной точкой взаимодействия библиотеки с Клевером, является **CleverLongPoll** реализуемый библиотекой. С помощью него становится возможным в реальном времени получать игровые события, будь то ответ вашего друга или новый вопрос.\n\n## Получение токена\nДля работы библиотеки необходимо получить access_token приложения Клевер, сделать это можно воспользовавшись ссылкой (access_token будет в адресной строке после подтверждения прав доступа):\n\n`http://oauth.vk.com/authorize?client_id=6334949\u0026scope=589842\u0026display=mobile\u0026response_type=token`\n\n## Обработчики\nПоступающие игровые события нужно как-то обрабатывать, для этого нужно использовать специальные обработчики.\n\nОбработчиком становится функция перед которой установлен определенный декоратор. К примеру, если вы захотите получать список победителей игры в вашей функции, то можно воспользоваться следующей конструкцией:\n\n```python\n@lp.game_winners_handler()\ndef print_winners(event):\n    print(event)\n```\n\nУ функции после декоратора должен быть единственный параметр, отвечающий за информацию о событии.\n\nСписок доступных декораторов:\n\n|Декоратор | Тип события | Описание|\n|---|---|---|\n| `comment_handler`| `video_comment_new`|Событие комментария к игровой трансляции|\n| `question_handler`|`sq_question`|Событие нового вопроса|\n| `friend_answer_handler`|`sq_friend_answer`|Событие ответа друга пользователя|\n| `right_answer_handler`|`sq_question_answers_right`|Событие результата ответа на вопрос|\n| `end_game_handler`|`sq_ed_game`|Событие окончания викторины|\n| `game_winners_handler`| `sq_game_winners` |Событие списка победивших игроков |\n| `start_game_handler`|-|Дополнительный декоратор, сигнализирует о начале игры |\n| `all_events_handler`|-|Дополнительный декоратор, служит для получения всех событий пришедших с LongPoll |\n| `last_time_answer`|`sq_question`|Дополнительный декоратор, вызываемый в последнее возможное время ответа на вопрос (может быть полезно, когда нужно ответить не сразу после получения вопроса) |\n\n\n## Действия\nВ игре существуют некоторые действия, за которые вам начисляют клеверсы. Для начисления виртуальных монеты необходимо самостоятельно вызывать метод **send_action***.\n\nВ параметрах необходимо передать тип действия (**cleverapi.Action**) и идентификатор пользователя.\n\nНапример, если вы правильно ответили на вопрос, то не забудьте оповестить об этом сервер:\n```python\nfrom cleverapi import Action\napi.send_action(Action.ANSWER_CORRECT)\n```\n\nСписок возможных действий:\n\n|Действие | Описание|\n|---|---|\n| `Action.WATCHED_GAME`|Вы досмотрели игру до конца|\n| `Action.JOIN_GAME`|Вы присоединились к игре|\n| `Action.ANSWER_CORRECT`|Вы дали правильный ответ|\n| `ACtion.WIN_GAME`|Вы выиграли игру|\n| `Action.INVITE_FRIEND`|Вы пригласили друга|\n| `Action.COMMUNITY_NOTIFY`|Вы подписались на уведомления сообщества Клевер|\n\n## Отправка ответа\nДля отправки ответа используется метод. **send_answer**:\n```python\napi.send_answer(coins_answer, game_id, answer_id, question_id)\n```\nПараметры метода:\n- `coins_answer` (`bool`) - Передавайте True если играете на клеверсы, передавайте значение False, если вы продолжаете играть на деньги. *Осторожно, если вы передадите значение False когда уже выбыли из игры ваш ответ не будет засчитан*\n- `game_id` (`int`) - идентификатор текущей игры, его можно получить из атрибута `game_id` класса `CleverLongPoll`\n\n## Бамп\nДля бампа используется метод. **bump**:\n```python\napi.bump(lat, lon)\n```\nПараметры метода:\n- `lat` (`string`) - Широта\n- `lon` (`string`) - Долгота\n\nПередаются в виде градусов (xx.xxxxxx)\n\nВнимание: За 1 бамп с 1 человеком дают 50 клеверсов, с 1 человеком можно бампится 1 раз в неделю. Лимит бампов в неделю: 1000 клеверсов.\n\n## Покупка в магазине за клеверсы\nДля получения списка товаров с магазина используется метод. **getGifts**.\n```python\ngifts = api.get_gifts()\nprint(gifts)\n```\nПокупка товара: **purchaseGift**\n```python\napi.purchase_gift(1)\n```\nГде цифра 1 это ID товара. В нашем случае это жизнь.\n## События\nИгровые события в формате JSON.\n\n### **sq_game_winners** \n```json\n{  \n   \"type\":\"sq_game_winners\",\n   \"owner_id\":-162894513,\n   \"video_id\":456230000,\n   \"users\":[  \n      {  \n         \"name\":\"Самира В.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Владислав П.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Варвара Д.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Анастасия Ф.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Тёма Б.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Евгений В.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Вячеслав З.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Дарья М.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      },\n      {  \n         \"name\":\"Светлана С.\",\n         \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\"\n      }\n   ],\n   \"prize\":0,\n   \"winners_num\":9,\n   \"version\":2\n}\n```\n\n### **sq_friend_answer** \nНеобходимо купить их отображение за 299 клеверсов (id подарка 50)\n```json\n{  \n   \"type\":\"sq_friend_answer\",\n   \"game_id\":200,\n   \"user_id\":100,\n   \"answer_id\":0,\n   \"photo_url\":\"https://vk.com/images/camera_200.png?ava=1\",\n   \"is_live_enabled\":true\n}\n```\n\n### **sq_question** \n```json\n{  \n   \"type\":\"sq_question\",\n   \"owner_id\":-162894513,\n   \"video_id\":456239000,\n   \"question\":{  \n      \"id\":11,\n      \"text\":\"Кто основал социальную сеть ВКонтакте?\",\n      \"answers\":[  \n         {  \n            \"id\":0,\n            \"text\":\"Николай Дуров\"\n         },\n         {  \n            \"id\":1,\n            \"text\":\"Павел Дуров\"\n         },\n         {  \n            \"id\":2,\n            \"text\":\"Илон Маск\"\n         }\n      ],\n      \"time\":null,\n      \"number\":1\n   },\n   \"version\":2\n}\n```\n\n### **sq_ed_game**\n```json\n{  \n   \"type\":\"sq_ed_game\",\n   \"owner_id\":-162894513,\n   \"video_id\":456230000,\n   \"version\":2\n}\n```\n\n### **sq_question_answers_right**\n```json\n{  \n   \"type\":\"sq_question_answers_right\",\n   \"owner_id\":-162894513,\n   \"video_id\":456230000,\n   \"question\":{  \n      \"text\":\"Кто основал социальную сеть ВКонтакте?\",\n      \"answers\":[  \n         {  \n            \"id\":0,\n            \"text\":\"Николай Дуров\",\n            \"users_answered\":1584\n         },\n         {  \n            \"id\":1,\n            \"text\":\"Павел Дуров\",\n            \"users_answered\":389217\n         },\n         {  \n            \"id\":2,\n            \"text\":\"Илон Маск\",\n            \"users_answered\":389\n         }\n      ],\n      \"right_answer_id\":1,\n      \"id\":11,\n      \"is_first\":true,\n      \"is_last\":false,\n      \"number\":1,\n      \"sent_time\":1529600002,\n      \"answer_set\":true\n   },\n   \"question_time\":1529600000,\n   \"version\":2\n}\n```\n\n### **video_comment_new**\n```json\n{  \n   \"type\":\"video_comment_new\",\n   \"owner_id\":-162894513,\n   \"video_id\":456230000,\n   \"comment\":{  \n      \"id\":0,\n      \"from_id\":100,\n      \"date\":152960000,\n      \"text\":\"мыши\"\n   },\n   \"user\":{  \n      \"id\":100,\n      \"photo_50\":\"https://vk.com/images/camera_200.png?ava=1\",\n      \"photo_100\":\"https://vk.com/images/camera_200.png?ava=1\",\n      \"first_name\":\"Павел\",\n      \"last_name\":\"Анисимов\",\n      \"sex\":2\n   },\n   \"version\":2\n}\n```\n\n## Примеры\n[like_friends.py](https://github.com/oncecreated/cleverapi/blob/master/examples/like_friends.py) - использование библиотеки для создания бота, который выбирает наиболее популярный ответ у друзей\n[bump.py](https://github.com/oncecreated/cleverapi/blob/master/examples/bump.py) - использование библиотеки для бампа, который происходит в выбранных координатах\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foncecreated%2Fcleverapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foncecreated%2Fcleverapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foncecreated%2Fcleverapi/lists"}