Vk net что это

Приложение разрабатывается, чтобы помочь людям найти других людей, со схожими интересами, чтобы разделить время за любимым занятием/интересом. Проект пока находится на стадии бета тестирования во Вконтакте. Исправляю баги и добавляю того что не хватает. Захотелось отвлечься и написать немного про разработку, писал и понял что разделю на части. Здесь больше про бэкэнд нюансы с которыми столкнулся, и все что пользователь не видит.

2166 просмотров
Немного про Vk mini apps.

Вк мини апп это сайт, который подгружается в iframe, с возможностью взаимодействия с базовым функционал VK через API. То есть часть функций доступна сразу без имплементации взаимодействия с их API, но для этого нужна библиотека VkBridge. Здорово что есть такая библиотека, правда, как и в случае с API документацией, здесь также есть своя особенность с языком на котором вы ее читаете.

По умолчанию у меня выбран английский язык в VK, но во Вконтакте есть небольшой прикол с документацией на разных языках. Более полная информация доступна на русском языке, тогда как некоторые страницы на английском либо вовсе отсутствуют, либо частично заполнены. Так что советую перейти сначала на русский прежде чем смотреть документы. А тут группа vk mini apps со ссылками на документацию и прочее.

Работаем с vk api на C#, часть 1

Мне нужно было создать web API для взаимодействия мини приложения с сервером. В плане технологий это .Net Core, EF Core в качестве ORM, тот же Swagger чтобы при разработке другой человек мог понять какие типы запросов существуют, с какими входными и выходными данными нужно работать. Плюс несколько дополнительных библиотек.

Первым делом, для приема запросов только со стороны ВК, можно сказать некая авторизация пользователей с Вконтаке, должна быть реализована проверка параметров при каждом запросе, примеры от vk, и ниже приведен пример для .Net Core. OnActionExecuting метод наследуемый от класса ActionFilterAttribute, т.е. фактически вы создаете свой атрибут, который можно повесить на контроллер.

Сам параметр vkUrl можно получить из заголовка “referer”. И отдельно еще можно брать параметр vk_user_id из этого заголовка, чтобы использовать его как идентификатор или делать сверку с ним в случае если вы будете использовать его в свойстве своего объекта.

SecretKey — это секретный ключ вашего мини ВК приложения, его можно найти в настройках (на странице вашего приложения — «Защищённый ключ»), там же можно найти сервисный токен который понадобится, например, при запросе данных о пользователях со стороны сервера.

На стороне сервера еще нужно обязательно сделать защиту от спам запросов. Есть готовая библиотека AspNetCoreRateLimit, с помощью которой можно задать ограничения на частоту запросов по IP или ID клиента. Достаточно будет инициализировать рейт лимиты в Startup методе Configure и ConfigureServices.

// Configure app.UseIpRateLimiting(); app.UseMvc();

Я специалньно добавил еще UseMvc() метод после вызова UseIpRateLimiting() (как впринципе указано в документации), но так же поместил вызовы до инициалтзации свагера, так как иначе UseIpRateLimiting не работает. Сами правила описываются в appsettings раздельно для дебага и релиза.

Еще по теме:  Макрос Вконтакте что это

Аутентификация: Используем VKontakte провайдер

«IpRateLimiting»: < // Limit splitted to different types of http (get, post e.t.c) «EnableEndpointRateLimiting»: true, «StackBlockedRequests»: false, «RealIpHeader»: «X-Real-IP», «ClientIdHeader»: «X-ClientId», «HttpStatusCode»: 429, «GeneralRules»: [ < «Endpoint»: «*», «Period»: «1s», «Limit»: 3 >, < «Endpoint»: «*», «Period»: «1m», «Limit»: 20 >, < «Endpoint»: «*», «Period»: «1h», «Limit»: 900 >] >,

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

В качестве бд PostgreSQL, и так как проект связан с геоданными, то необходимо хранить где-то эти координаты, поэтому к БД можно добавить расширение PostGIS, компонент находится в дополнительном установщике Stack Builder. Это расширение позволит вам производить базовые вычисления, такое как расстояние между точками, прямо в запросе.

Общение с БД идет через EF Core, и помимо основой библиотеки для работы с базой Npgsql.EntityFrameworkCore.PostgreSQL, существуют дополнительная Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite, как раз для расширения PostGIS. В ней присутствуют основные типы данных которые есть в запросах с Entity. В моем случае используются гео координаты, но расширение позволяет хранить координаты не только двух точек, но и 3 , то есть точку в объеме, поэтому важно задать какие типы точек будут использоваться.

При инициализации приложения можно создать фабрику по производству гео координат и добавить как синглтон в IoC.

// 4326 refers to WGS 84, a standard used in GPS and other geographic systems. var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); // To use single factory when we need to create some point services.AddSingleton(geometryFactory);

А так же не забудьте указать тип, из возможных типов данных БД, в аннотации к свойству типа Point.

HasColumnType(«geography (point)»)

Важный момент с использованием PostGIS, а точнее с установкой дополнительных расширений на базу данных с использованием миграций. Есть проблема с типами данных которые не обновляются при очередной миграции, саму проблему можно найти здесь. Чтобы предотвратить ошибки возникающие при запросах к БД, можно добавить следующий код в класс DbContext для обновления кэша используемых типов и вызвать этот метод при страте приложения.

public void MigrateDatabase() < if (Database.GetPendingMigrations().Any()) < Database.Migrate(); // Need to reload postgis types, cause of some weird behaviour Database.OpenConnection(); ((NpgsqlConnection)Database.GetDbConnection()).ReloadTypes(); Database.CloseConnection(); >>

Что касаемо использования каких-то функций Вконтакте, типа отправки уведомлений или получение информации о пользователях, я создал отдельную небольшую библиотеку VkApi. Здесь как раз и понадобится Service token из настроек вашего приложения на странице VK. В коде поле называется _accessToken, так как параметр носит такое же название — access_token, именно в него нужно передавать Service token. Не все методы API доступны для вызова с сервисным ключом, будьте внимательны. В основном классе VkApi добавил метод SendNotificationAsync, чтобы вызывать Вкашный notifications.sendMessage, само название VK методов хранится пока в enum — VkApiMethod.

Еще по теме:  Ник Вконтакте что это

Описание API методов ВК можно найти на официальном сайте, перед описанием метода вы можете увидеть фразу: «Этот метод можно вызвать с сервисным ключом доступа». Как раз их возможно вызывать с сервисным ключом. Так же внимательно смотрите на ограничения, как по отправке уведомлений так и других вызовов функций. После каждого запроса от вк приходит ответ ввиде json, в предыдущем методе это класс NotificationResponse. Впринципе у большинства ответов есть пару схожих свойств, поэтому у меня есть базовый класс BaseResponse .

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

Логика для отправки примерно должна быть такой:

  • ищем всех пользователей кому нужно отправить сообщение
  • делаем проверку apps.isNotificationsAllowed
  • группируем пользователей по сообщению, которое хотим отправить, дабы сделать как можно меньше запросов
  • и отправляем сообщение до 100 пользователям сразу.

Все запросы с ВК приложения должны быть защищенными, то есть начинаться с https. Поэтому чтобы произвести отладку требуется какой-нибудь прокси сервис, например, такой как ngrok, который создает временный глобальный адрес с защищенным соединением к нашему локальному API. Вам нужно лишь сначала запустить ваш Web API, а потом запустить ngrok c параметрами: «ngrok http 3033» (3033 — это порт вашего приложения). Подробнее про сам ngrok и его настройку здесь.

Если кому-то будет интересно помочь покодить, напишите, правда пока все только за плюсик в карму . Следующую часть напишу попозже и добавлю сюда ссылку.

Источник: vc.ru

Начало дружбы с VkNet

Я много дружу с библиотекой VkNet. Но, к сожалению, документация по работе с ней достаточно устарела. Так что я решил поделиться и создать маленький туториал по основам работы с этой библиотекой.

Прежде всего нужно создать приложение здесь.

И из настроек только что созданного приложения взять App Id.

Теперь можно переходить непосредсвенно к коду.

Создадим консольное приложения .net core и добавим зависимость VkNet.

Создадим экземпляр VkApi.

VkApi api = new VkApi();

Теперь необходимо авторизоваться.

api.Authorize(new ApiAuthParams() < Login = «+79*******», Password = «***», ApplicationId = 684***, Settings = Settings.All >);

Получим список из 20 последних диалогов

var dialogs = api.Messages.GetConversations(new GetConversationsParams());

А теперь получим 20 последних сообщений из первого диалога.

var messages = api.Messages.GetHistory(new MessagesGetHistoryParams() );

И, пожалуй, напечатаем результаты.

foreach (var msg in messages.Messages)

И отправим тестовое сообщение автору первого предыдущего сообщения.

api.Messages.Send(new MessagesSendParams() < // ну или подставить сюда ид из диалога PeerId = messages.Messages.First().Id, Message = «Test», RandomId = new Random().Next() >);

И вот такой конечный код мы получили

VkApi api = new VkApi(); api.Authorize(new ApiAuthParams() < Login = «*», Password = «*», ApplicationId = *, Settings = Settings.All >); var dialogs = api.Messages.GetConversations(new GetConversationsParams()); var messages = api.Messages.GetHistory(new MessagesGetHistoryParams() ); Console.OutputEncoding = Encoding.UTF8; foreach (var msg in messages.Messages) < Console.WriteLine(msg.Text); >api.Messages.Send(new MessagesSendParams() < PeerId = messages.Messages.First().Id, Message = «Test», RandomId = new Random().Next() >);

Поддержку можно найти тут.
Или актуальная ссылка на тг, для тех у кого обычные ссылки не открываюся.

Еще по теме:  Как добавить статью в ВК в группе

Источник: habr.com

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window.

Reload to refresh your session.

vknet / vk Public

Vkontakte API for .NET

License

vknet/vk

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time
June 8, 2023 15:18
June 30, 2023 15:55
June 30, 2023 15:55

June 23, 2022 21:44
November 15, 2017 17:54
November 15, 2017 13:33
August 21, 2018 18:51
August 2, 2022 00:09
February 18, 2018 20:26
March 31, 2014 20:00

August 24, 2015 11:39
June 8, 2023 16:08
June 4, 2023 22:10
April 2, 2023 21:08
June 18, 2023 15:12

June 18, 2023 13:35

README.md

Badge
Build Status
Target Frameworks
Nuget
MyGet
Downloads
Issues
Coverity
Contacts

Добавьте пакет в ваш проект:

Package Manager

PM> Install-Package VkNet

.NET CLI

> dotnet add package VkNet

Выполните следующие действия:

  1. Создайте приложение
  2. Авторизуйтесь как указано в документации
  3. Используйте необходимые методы. Список методов по категориям
  4. Список часто задаваемых вопросов
  5. Обсуждение в Telegram

План развития проекта

  • Обновить некоторые методы в соответствии с changelog vk до актуальной версии 5.131.
  • Обновить документацию проекта

Большое спасибо следующим организациям и проектам, работа которых имеет важное значение для развития проекта:

  • JetBrains — ReSharper/Rider лицензия для разработки VkNet
  • Json.Net — Popular high-performance JSON framework for .NET
  • HtmlAgilityPack
  • NUnit — NUnit is a unit-testing framework for all .Net languages.
  • Moq — The most popular and friendly mocking framework for .NET
  • SonarAnalyzer.CSharp — Analyzers which spot bugs and code smells in your code.
  • Также вы можете помочь проекту Pull Request ‘ом

Источник: github.com

Рейтинг
( Пока оценок нет )
Загрузка ...