Вопрос отражает стремление разобраться он понятен и несёт пользу. Как через vk api получить идентификатор группы по её url? Само vk api работает только с id. Перечисленные через запятую идентификаторы пользователей или их короткие имена (screenname). Назначал группу администратором беседы, давал доступ к переписке полный, пробовал отправлять вместе с peerid , пробовал без chatid результат один и тот же.
Я получаю токен (accesstoken) группы и логинюсь,потом хочу установить callbackserver, но для этого требуется groupid (по техническим причинам получаю только токен, без id группы). И теперь стоит задача получить id группы от которой я залогинился. Как с помощью python vk api получить id пользователей сделавших репост определённой записи на моей группе.
Популярные запросы
- Vk api get user id
- Vk api user get
- Vk api узнать id группы
- Vk api узнать id группы по ссылке
- Vk api узнать id группы-
Источник: redactor-online.ru
Как узнать и получить id группы вконтакте
VK API — Добавление групп.
В предыдущей статье мы разобрались, что из себя представляет VK API, какие он дает возможности и написали простенькое приложение, которое авторизует пользователя и получает информацию о нем. В этой статье мы будем добавлять группы, стену которых в будущем будем парсить и получим основную информацию о паблике.
Рекомендую вам сразу выкачать код с репозитория. Так как изменения довольно объёмные, а в этой статье я буду описывать только основные нюансы. Ссылка на репозиторий.
Я поменял структуру приложения. Первое, что сделал, это добавил psr-4 загрузчик, Он позволит нам красиво оформить неймспейсы, четко разделяя приложение на компоненты. Для этого нужно привести файл composer.json к виду:
< «require»: < «slim/slim»: «^3.0», «twbs/bootstrap»: «4.0.0-alpha.6», «illuminate/database»: «^5.4», «slim/twig-view»: «^2.2», «guzzlehttp/guzzle»: «~6.0» >, «autoload»: < «psr-4»: < «App\»: «app/» >> >
Переделал файл с маршрутами. Теперь маршруты выполняют методы указанных контроллеров:
get(‘/’, AppControllersSiteController::class .’:index’); $app->get(‘/authorize’, AppControllersSiteController::class . ‘:authorize’); $app->get(‘/groups’, AppControllersGroupsController::class .’:index’); $app->post(‘/groups/add’, AppControllersGroupsController::class.’:insert’);
Каждый контроллер, должен в конструкторе принимать объект контейнера. В контейнере находится вся информация о нашем приложении и для того, чтобы класс мог работать с приложением, нужно в конструктор класса передать этот объект.
Как узнать ID группы или паблика ВКонтакте?
Раньше для авторизации пользователя мы выполняли методы в колбеках наших маршрутов, сейчас я вынес все в отдельный класс:
container = $container; $this->vk = new VK($this->container->get(‘settings’)[‘vk’]); > public function index ($request, $response, $args) < if (isset($_SESSION[‘vk’])) < if (!isset($_SESSION[‘account’])) < // Устанавливаем токен $this->vk->accessToken = $_SESSION[‘vk’]->access_token; // Получаем информацию о текущем пользователе // Записываем всю информацию в сессию $_SESSION[‘account’] = $this->vk->getAccountInfo($_SESSION[‘vk’]->user_id); > return $this->container->view->render($response,’index.html’, [‘vk’ => $this->vk, ‘account’ => $_SESSION[‘account’]->response]); > return $this->container->view->render($response,’index.html’, [‘vk’ => $this->vk]); > public function authorize ($request, $response, $args) < if ($request->getQueryParam(‘code’) != NULL) < // Получаем токен $_SESSION[‘vk’] = $this->vk->getAccessToken($request->getQueryParam(‘code’)); > return $response->withStatus(302)->withHeader(‘Location’, ‘../’); > >
Все предельно понятно, тоже самое, что и было в роутах, только теперь в отдельном классе.
Следующий класс у нас, это GroupsController . Класс который пока еще обладает функционалом отображения списка групп и добавлением их в базу.
container = $container; > public function index ($request, $response, $args) < $account = $_SESSION[‘account’]->response; $groups = Group::orderBy(‘created_at’, ‘desc’)->get(); return $this->container->view->render($response, ‘groups.html’, [‘account’ => $account, ‘groups’ => $groups]); > public function insert ($request, $response, $args) < $data = $request->getParsedBody(); if (!isset($data[‘id’])) < return $response->withJson([‘success’ => false, ‘msg’ => ‘Не указан ID группы.’]); > if ($data[‘id’] == ») < return $response->withJson([‘success’ => false, ‘msg’ => ‘ID не должен быть пустым.’]); > if (!is_int( (int) $data[‘id’])) < return $response->withJson([‘success’ => false, ‘msg’ => ‘ID содержит недопустимые символы.’]); > $groupExists = Group::where(‘group_id’, (int) $data[‘id’])->count(); if ($groupExists > 0) < return $response->withJson([‘success’ => false, ‘msg’ => ‘Группа с таким ID уже добавлена.’]); > $group = new Group; $group->group_id = (int) $data[‘id’]; if ($group->save()) < $vk = new VK($this->container->get(‘settings’)[‘vk’]); $vk->accessToken = $_SESSION[‘vk’]->access_token;; $groupInfo = $vk->getGroupInfo($group->group_id); $data = $groupInfo[0]; $group->name = $data->name; $group->type = $data->type; $group->avatar = $data->photo_50; $group->followers = $data->members_count; $group->update(); return $response->withJson([‘success’ => true, ‘msg’ => ‘Группа успешно добавлена.’, ‘data’ => $group]); > return $response->withJson([‘success’ => false, ‘msg’ => ‘Ошибка.’]); > >
Здесь уже посложнее. Первое, что бросается в глаза, это участок кода в самом начале:
use AppClassesVK; use AppModelsGroup;
Этим мы подключаем к нашему классу модель для работы с группами и класс VK , который предоставляет нам методы для работы с API, модель в свою очередь позволит нам работать с базой данных, но об этом ниже.
Метод index служит для отображения страницы с группами и вывода на неё информации. Другой метод под именем insert служит для добавления групп в базу. Валидации данных не очень красивые, но на первое время подойдут, в будущем напишем свой класс валидации данных. Как вы могли заметить, все ответы, что будут отправлены клиенту, я отдаю в формате json . Это связано с тем, что добавляю я группы при помощи AJAX , поэтому ответ должен быть в формате json . Я писал небольшой туториал по работе с AJAX на примере загрузки фотографии на сервер.
С добавлением в базу группы все просто, сначала мы записываем в базу ID группы, который получили из формы.
$group = new Group; $group->group_id = (int) $data[‘id’];
Далее, если данные сохранились успешно, мо делаем запрос к API вконтакте, получаем данные и задаем атрибуты нашего объекта группы, обновляем модель.
if ($group->save()) < $vk = new VK($this->container->get(‘settings’)[‘vk’]); $vk->accessToken = $_SESSION[‘vk’]->access_token;; $groupInfo = $vk->getGroupInfo($group->group_id); $data = $groupInfo[0]; $group->name = $data->name; $group->type = $data->type; $group->avatar = $data->photo_50; $group->followers = $data->members_count; $group->update(); return $response->withJson([‘success’ => true, ‘msg’ => ‘Группа успешно добавлена.’, ‘data’ => $group]); >
Метод getGroupInfo , делает запрос к API и возвращает нам данные о конкретной группе.
public function getGroupInfo ($id) < $url = ‘https://api.vk.com/method/groups.getById’; $client = new GuzzleHttpClient(); $response = $client->request(‘POST’, $url, [ ‘form_params’ => [ ‘group_id’ => $id, ‘fields’ => ‘photo_50,members_count’, ‘access_token’ => $this->accessToken ], ‘verify’ => false ]); $data = json_decode($response->getBody()); return $data->response; >
Для работы с базой я взял ORM Eloquent , кто имел дело с фреймворком Laravel , тот знает, что это такое. Тем кто дела не имел, в кратце пару слов.
ORM — это своеобразная прослойка между программистом и базой данных. Используя ту или инную ORM вам больше не нужно писать sql запросы к базе данных, нужно лишь настроить подключение и использовать методы, которые предоставляет ORM. Также ORM даёт нам возможность работать с данными в базе как с объектом. Простой пример:
$groups = $pdo->query(‘SELECT * FROM groups ORDER BY created_at DESC’);
$groups = Group::orderBy(‘created_at’, ‘desc’)->get();
На выходе во втором случае мы получим коллекцию объектов, с которыми будет очень удобно работать. Более подробно о методах данной ORM написано в официальной документации.
Файл модели выглядит так:
Group.php
Запрос на создание таблицы groups в базе данных:
CREATE TABLE IF NOT EXISTS `groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `group_id` int(10) UNSIGNED DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL, `type` varchar(255) DEFAULT NULL, `followers` int(10) UNSIGNED DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Файл для подключения к базе данных:
addConnection([ ‘driver’ => ‘mysql’, ‘host’ => ‘localhost’, ‘database’ => ‘vkapi’, ‘username’ => ‘vkapi’, ‘password’ => ‘password’, ‘charset’ => ‘utf8’, ‘collation’ => ‘utf8_unicode_ci’, ‘prefix’ => », ]); $capsule->setAsGlobal(); $capsule->bootEloquent();
Для того, чтобы база данных была доступна в нашем приложении, добавим строчку в файл app.php :
include ‘database.php’;
Страница для отображения списка групп и добавления новых имеет в себе таблицу, которая наполняется информацией о группах и небольшую форму для добавления новых групп. Для добавления группы, нужно ввести в форму её ID .
Добавить
0 %>
Авторизировать пользователя
>»>Авторизация $(document).ready(function () < $(«#showForm»).click(function () < $(‘#addNewGroup’).slideToggle(); >); $(‘#addNewGroup’).submit(function (f) < f.preventDefault(); var form = new FormData(this); $.ajax(< type:’POST’, url: ‘>/groups/add’, data: form, cache: false, contentType: false, processData: false, success:function(data)< var response = data.data; $(‘#groupsTable tbody’).prepend(‘
‘); console.log(response); > >); >); >);
Теперь перейдя по адресу http://localhost/groups (адрес может иметь другой вид, в зависимости от настройки вашего веб сервера), мы попадем на страницу с группами и сможем добавлять в список группы.
В следующей статье, будем удалять группы из списка и научимся парсить стену паблика.
Надеюсь у меня удалось раскрыть основные моменты, если что-то не понятно, пишите комментарии, поправим)
Источник: adminnotes.info
vk-api-for-groups 0.0.1
A package that provides simple vk-api integration. Mostly for groups-related methods.
Навигация
Ссылки проекта
Статистика
Метаданные
Лицензия: MIT License (MIT Licence)
Требует: Python >=3.8
Сопровождающие
Классификаторы
Описание проекта
VK API for groups
Python package, that allows posting to groups with ease.
How to Use · Report Bug · Request Feature
About The Project
Post to vk groups with ease.
Built With
- Python
- Python’s package requests
TODO
- Add text formatting from .md files
- Add attachment support
- Add ability to change groups’ settings.
- Add auto attachments uploading to vk servers
Getting Started
Prerequisites
Python language is necessary, obviously. You need to also install Python requests:
pip install requests
Installation
pip install vk_api_for_groups
Usage
Usage example is located in examples/example.py